环境:SQL Server 2012中我使用了一个在线工具,是唯一一个我能找到到目前为止,在地球上绘制多边形和点。 http://www.birdtheme.org/useful/googletool.html我有两个表。 一个店“区”为多边形,另一个表存储点之间无关,我的问题其他的事情。 为简单起见,我只会降低我的方案,以SQL变量。
在下面的查询中,我使用的兴趣以及已知点的地理数据类型。 我画了罗本岛,在罗本岛一个点,在恶魔点的一多边形。
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
上面这个查询,如果我理解正确的话,告诉我,我的@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
现在的问题是,为什么地理数据类型返回意外的结果,而几何按预期工作? 非常感谢你。