找到边界矩形多边形的长度

时间:2019-03-08 08:13:38

标签: sql sql-server ssms

我管理一个包含动物记录(具有地理坐标的物种名称)的sql express数据库(使用v17.9.1 SSMS)。物种的名称和位置经常变化,我想使用SSMS计算所有物种的最大线性距离(以公里为单位)。我可以在ArcMap中通过创建按种类名称分组的最小边界矩形,将CRS更改为投影并计算以米为单位的矩形长度来手动完成此操作,但这是对数据库单独完成的,并且在更改数据库时不会更改。最近,我发现了sql express中的几何和地理数据类型以及空间函数(例如,converthullaggregate),这使我相信我可以在sql express中做到这一点。

答案可能是对问题Calculate Convex Hull of points from a set of (lat/long) points的答案,但是我需要一些帮助使其正常工作,并且不确定这是否是正确的方法。我认为在一组点周围创建一个矩形更有意义,因为找到矩形的最长边应该很简单。无论如何,这是我使用上述示例的过程,从几何坐标字段“ position”和同一表“ _fldProjectID”中的字段开始,稍后我将替换物种名称字段(位于另一个表中):

with cte as (
    SELECT _fldProjectID, geometry::ConvexHullAggregate(position) AS Hull
    FROM tblsite
    where position is not null
    group by _fldProjectID
)
select _fldProjectID, 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

当前,SSMS无法识别“ Edge”和“ Number”,并且我不确定用什么替换“ dbadmin.dbo.numbers”。之后,我可以看到许多有关如何使用STDistance计算距离的示例,例如Calculating distance between two points (Latitude, Longitude)

希望有人可以提供帮助,

迈克

0 个答案:

没有答案