首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STContains on Geography专栏

STContains on Geography专栏
EN

Stack Overflow用户
提问于 2012-11-21 08:41:52
回答 1查看 2.3K关注 0票数 0

我在Lat/long (地理位置)有一个公交站点。我想检查我的公交站点(经纬度)在一个区域中的位置。我的区域是一组经度/经度点。我有一个区域的经度/经度(构成一个区域的经度/经度的轮廓)的地理形式。现在我有一个点lat/long,我想确定该点是否位于我的区域内。我怎么做呢? 4000个点构成一个区域的轮廓,其中一个点是检查该区域中是否存在该区域。我该怎么检查呢?

我想我可以使用STContainsSTintersect,但是我不知道确切的语法。

代码语言:javascript
复制
SELECT
    Region.BlockID, Bus_Route.geography
FROM
    Bus_Route, Region
WHERE
    Region.points.STContains(Bus_Route.geography) = 1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-21 22:08:21

我使用为您编写的代码()作为起点来获取点表。从那里开始:

代码语言:javascript
复制
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?如果是这样的话,把它保存起来,省去重新构建它的麻烦。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13484636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档