我在SQL Server中创建以下查询迭代查询的空间记录
declare @x XML
set @x='<Dataset_Extent>
<EXTENT_TYPE>Bounding_Polygon</EXTENT_TYPE>
<Vertex>
<LON>66.91292909247741</LON>
<LAT>30.27001012181008</LAT>
<X>299232</X>
<Y>3350549</Y>
<COL>1</COL>
<ROW>1</ROW>
</Vertex>
<Vertex>
<LON>66.99456841960638</LON>
<LAT>30.27128639618252</LAT>
<X>307089.5</X>
<Y>3350549</Y>
<COL>15715</COL>
<ROW>1</ROW>
</Vertex>
<Vertex>
<LON>66.99700791329992</LON>
<LAT>30.1509623521339</LAT>
<X>307089.5</X>
<Y>3337207.5</Y>
<COL>15715</COL>
<ROW>26683</ROW>
</Vertex>
<Vertex>
<LON>66.91546772378466</LON>
<LAT>30.14969219541345</LAT>
<X>299232</X>
<Y>3337207.5</Y>
<COL>1</COL>
<ROW>26683</ROW>
</Vertex>
<Center>
<LON>66.9549932872921</LON>
<LAT>30.21048776638499</LAT>
<X>303160.75</X>
<Y>3343878.25</Y>
<COL>7858</COL>
<ROW>13342</ROW>
</Center>
</Dataset_Extent>';
declare @wkt varchar(8000);
select @wkt=CONVERT(varchar(7000),@x.query('distinct-values(
for $lon in /Dataset_Extent/Vertex/LON/text()
for $lat in /Dataset_Extent/Vertex/LAT/text()
return ($lon cast as xs:string?,$lat cast as xs:string?,","))
'));
--concatenate the word POLYGON
set @wkt='POLYGON(('[email protected] +'))';
print @wkt
这给了我下面的输出:
POLYGON((66.91292909247741 66.99456841960638 30.27128639618252 66.99700791329992 66.91546772378466 30.27001012181008,30.1509623521339 30.14969219541345))
每个经度/纬度对不按照正确的顺序,我需要输出格式如下:
POLYGON((66.91292909247741 30.27001012181008,66.99456841960638 30.27128639618252,66.99700791329992 30.1509623521339,66.91546772378466 30.14969219541345,66.91292909247741 30.27001012181008))
起始顶点Lon/Lat也应该在结尾重复以使多边形关闭。
我需要做什么来解决这些问题?
这很好。它以POLYGON格式((LON LAT,LON LAT,LON LAT,LON LAT))给我所有的POLYGONS。它约有300行,未来可能会随着插入数据而增加。现在我想对我提供的多边形应用每个结果行的STIntersects()函数,例如POLYGON((66.9214310204 30.1191654521,66.9724466643 30.1273507980,66.9612156084 30.1614246796,66.9324717194 30.1540007613,66.9214310204 30.1191654521)),以检查它是否与它们中的任何一个相交。我必须返回STIntersects()结果= 1的所有记录。谢谢 – user3125776 2014-09-05 12:03:44