我正在开发一个使用Google Map的网络应用程序,我希望通过创建一组给定地理坐标/点的多边形叠加来显示“覆盖区域”/“地理区域”。
“覆盖区域”可以包含数千个地理坐标(存储在sql server中的表中的经度和纬度数据)。理想情况下,我想从sql server数据库(2008 R2)计算Convex Hull点,这样我就可以将结果(点)传递给Google Map来创建多边形叠加。
此处的示例(http://www.geocodezip.com/v3_map-markers_ConvexHull.asp)正是我正在寻找的,除了我想在可能的情况下从SQL服务器直接获得右侧面板上的船体点。原因是我可能需要处理数千个地理坐标。我宁愿不从数据库中检索大量数据,然后使用JavaScript发送到客户端来计算凸包点。
非常感谢任何帮助!!!
谢谢。
答案 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