Sql server 从一组(横向/纵向)点计算点的凸包

Sql server 从一组(横向/纵向)点计算点的凸包,sql-server,google-maps,polygon,Sql Server,Google Maps,Polygon,我正在使用Google Map开发一个web应用程序,我希望通过创建一组给定地理坐标/点的多边形覆盖来显示“覆盖区域”/“地理区域” “覆盖区域”可以由存储在SQLServer表中的数千个地理坐标经纬度数据组成。理想情况下,我希望从sql server数据库2008 R2计算凸面外壳点,以便将结果点传递到Google地图以创建多边形覆盖 这里的示例正是我所要寻找的,只是如果可能的话,我想直接从SQL server获取右面板上的外壳点。原因是我可能需要处理数千个地理坐标。我不希望从数据库中检索大量

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

“覆盖区域”可以由存储在SQLServer表中的数千个地理坐标经纬度数据组成。理想情况下,我希望从sql server数据库2008 R2计算凸面外壳点,以便将结果点传递到Google地图以创建多边形覆盖

这里的示例正是我所要寻找的,只是如果可能的话,我想直接从SQL server获取右面板上的外壳点。原因是我可能需要处理数千个地理坐标。我不希望从数据库中检索大量数据,然后使用JavaScript发送到客户端以计算凸包点

任何帮助都将不胜感激


谢谢。

您没有提到您使用的是哪个版本,但SQL 2012中有一个内置的起始版本,它应该完全满足您的需求

下面是链接到文档中示例的扩展,该文档获取凸面外壳角点的坐标。根据我的经验,它假设你有一个数字表,围绕着一个非常有用的东西

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开发版。有人能举一个例子说明ConvexHullAggregate函数如何根据查询的结果经纬度返回多边形所需的一组点吗?我无法让它工作。但我最终决定遵循这个思路,让它以合理的性能完成我想要的任务。谢谢你抽出时间来。