我在Lat/long (地理位置)有一个公交站点。我想检查我的公交站点(经纬度)在一个区域中的位置。我的区域是一组经度/经度点。我有一个区域的经度/经度(构成一个区域的经度/经度的轮廓)的地理形式。现在我有一个点lat/long,我想确定该点是否位于我的区域内。我怎么做呢? 4000个点构成一个区域的轮廓,其中一个点是检查该区域中是否存在该区域。我该怎么检查呢?
我想我可以使用STContains或STintersect,但是我不知道确切的语法。
SELECT
Region.BlockID, Bus_Route.geography
FROM
Bus_Route, Region
WHERE
Region.points.STContains(Bus_Route.geography) = 1发布于 2012-11-21 22:08:21
我使用为您编写的代码()作为起点来获取点表。从那里开始:
select geography::STPolyFromText(
'POLYGON((' +
stuff((
select ',' + cast(g.STPointN(t.i).Long as varchar(10)) + ' ' + cast(g.STPointN(t.i).Lat as varchar(10))
from [a]
cross join tally as [t]
where t.i <= g.STNumPoints()
order by i
for xml path('')
), 1, 1, '') + '))'
, 4326)这段代码假设了一些事情。首先:你的点是按照你在区域边界上的顺序排列的。这很重要。想一想把点连在一起的拼图。为了得到正确的图片,你必须按照正确的顺序来做。其次,与第一个相关,他们必须在正确的方向上。多边形遵循左侧规则。也就是说,如果你按顺序遍历这些点,你就定义了你左侧的区域。因此,如果您以相反的顺序指定这些点,您将获得除您所在区域之外的所有内容!您将立即知道这一点,因为在SQL 2012之前,您只能拥有完全包含在半球中的区域。
但现在我不得不问:鉴于您之前提出的问题(我在上面链接了这个问题),您是否收到了包含多边形的shapefile?如果是这样的话,把它保存起来,省去重新构建它的麻烦。
https://stackoverflow.com/questions/13484636
复制相似问题