结合谷歌地图多边形(polygon)与Sql Server 2008的空间数据类型计算某个点是否在多边形内的注意事项

首先在利用 GEOGRAPHY::STPolyFromText(@GeoStr, 4326) 这样的函数把字符串转换为Geography类型时,字符串里经纬度的顺序是 “经度[空格]纬度”,即“longitude latitude”。

另外就是从谷歌地图里得到的多边形(polygon)的顶点定义的顺序和Sql Server里Geography类型中的顶点定义顺序是相反的,即一个是顺时针定义,一个是逆时针定义(至于哪个是顺时针,哪个是逆时针,没有细究),所以把这些顶点存到数据库的时候,需要先反转一下,否则SQL Server会报异常。

最后判断一个点是否在多边形内的方法很简单,SQL Server里只需要以下代码:

DECLARE @g geography;
DECLARE @h geography;
SET @g = geography::STGeomFromText('POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326);
SET @h = geography::Point(47.653, -122.358, 4326)

SELECT @g.STIntersects(@h)

而在Entity Frameowkr里,将数据库的Geography字段定义为 System.Data.Entity.Spatial.DbGeography类型(EF 6),然后利用这个类型的Intersects方法即可。

posted on 2013-12-13 18:14  零度的火  阅读(1178)  评论(0编辑  收藏  举报

导航