从一组(纬度/经度)点计算点的凸壳

时间:2015-03-22 06:08:47

标签: sql-server google-maps polygon

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

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

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

非常感谢任何帮助!!!

谢谢。

1 个答案:

答案 0 :(得分:0)

你没有提到你所使用的版本,但是在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