zoukankan      html  css  js  c++  java
  • 结合谷歌地图多边形(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方法即可。

  • 相关阅读:
    肩部肌肉劳损zt
    大屏幕手机上网页字体显示很小的问题
    SWT的Display
    The connection to adb is down, and a severe error has occured.
    [ZT]使用tmpfs缓存文件提高性能
    Mutex
    javascript阻塞加载问题【转】
    IE参考
    2台电脑网线对接注意的事项
    重建索引
  • 原文地址:https://www.cnblogs.com/Ricky81317/p/3473667.html
Copyright © 2011-2022 走看看