【问题标题】:Calculate Convex Hull of points from a set of (lat/long) points从一组(纬度/经度)点计算点的凸包
【发布时间】:2015-05-25 08:08:02
【问题描述】:

我正在使用 Google 地图开发一个网络应用程序,我想通过创建一组给定地理坐标/点的多边形叠加层来显示“覆盖区域”/“地理区域”。

“覆盖区域”可以包含数千个地理坐标(存储在 sql server 中的表中的经度和纬度数据)。理想情况下,我想从 sql server 数据库 (2008 R2) 计算凸包点,这样我就可以将结果(点)传递给 Google 地图以创建多边形叠加层。

这里的示例 (http://www.geocodezip.com/v3_map-markers_ConvexHull.asp) 正是我想要的,除了我想尽可能直接从 SQL 服务器获取右侧面板上的船体点。原因是我可能必须处理数千个地理坐标。我宁愿不要从数据库中检索大量数据,然后使用 JavaScript 发送到客户端来计算凸包点。

任何帮助将不胜感激!!!

谢谢。

【问题讨论】:

    标签: sql-server google-maps polygon


    【解决方案1】:

    您没有提及您使用的版本,但从 SQL 2012 开始,有一个内置的 ConvexHullAggregate 应该可以满足您的需求。


    这是链接到文档中示例的扩展,它获取凸包角的坐标。它假定您有一张数字表(根据我的经验,这是一件非常有用的事情)。

    with cte as (
        SELECT City, geography::ConvexHullAggregate(SpatialLocation) AS Hull
        FROM Person.Address
        WHERE City in ('Ottawa', 'Burnaby')
        group by City
    )
    select City, Number, Edge.Long as Long, Edge.Lat as Lat
    from cte
    cross apply (
        select Number, Hull.STPointN(Number) as Edge
        from dbadmin.dbo.Numbers
        where Number < Hull.STNumPoints()
    ) as HullEdges
    

    【讨论】:

    • 谢谢,我使用的是 2008R2,但如果我知道有一个可以使用的内置功能,我可以将它升级到 2012。我很想听听更多细节...
    • 谢谢,我今天将 SQL 升级到 2012 DEV 版。谁能举例说明 ConvexHullAggregate 函数如何根据查询的结果(经度和纬度)返回多边形所需的一组点?
    • 我无法让它工作。但我最终决定关注这个线程 (stackoverflow.com/questions/6768477/…) 并让它以合理的性能完成我想做的事情。感谢 Ben 抽出宝贵时间。
    猜你喜欢
    • 2012-03-29
    • 2016-12-02
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    相关资源
    最近更新 更多