环境:SQL Server 2012 我正在使用一个在线工具,这是迄今为止我能找到的唯一一个,在地球上绘制多边形和点。http://www.birdtheme.org/useful/googletool.html 我有两张桌子。一个将“区域”存储为多边形,另一个表存储与我的问题无关的点。为简单起见,我将把我的场景简化为 sql 变量。
在下面的查询中,我将 geography 数据类型用于众所周知的兴趣点。我在罗本岛周围画了一个多边形,在罗本岛画了一个点,在恶魔岛画了一个点。
DECLARE @robben_island geography = ('POLYGON((18.351803 -33.788421,18.382788 -33.787494,18.386736 -33.820515,18.354464 -33.822369,18.351803 -33.788421))')
DECLARE @point_in_robben_island geography= ('POINT(18.369226 -33.80554)')
DECLARE @point_in_alcatraz geography= ('POINT(-122.423401 37.827006)')
SELECT @robben_island.STContains(@point_in_robben_island) --returns 'False', but it's not what I expected
SELECT @robben_island.STContains(@point_in_alcatraz) --returns 'True', but it's not what I expected
如果我理解正确,上面的这个查询告诉我 my@point_in_robben_island
不包含在 中@robben_island
,而是我的 @point_in_alcatraz 存在于@robben_island
其中,众所周知,这是不正确的。
现在,当我将数据类型从地理更改为几何时,一切正常,但我担心如果我继续使用几何数据类型,我可能会遇到一些问题。我只是想知道我是否不会受到几何学不能完全解释地球曲率这一事实的负面影响。摸木头。
DECLARE @robben_island geometry = ('POLYGON((18.351803 -33.788421,18.382788 -33.787494,18.386736 -33.820515,18.354464 -33.822369,18.351803 -33.788421))')
DECLARE @point_in_robben_island geometry= ('POINT(18.369226 -33.80554)')
DECLARE @point_in_alcatraz geometry= ('POINT(-122.423401 37.827006)')
SELECT @robben_island.STContains(@point_in_robben_island) --returns 'True' as it should
SELECT @robben_island.STContains(@point_in_alcatraz) --returns 'False' as it should
现在我的问题是,为什么 geography 数据类型会返回意外的结果,而 geometry 按预期工作?非常感谢你。