查找两个多边形之间的最短距离(SqlGeography c#) [英] Finding shortest distance between two polygons(SqlGeography c# )
本文介绍了查找两个多边形之间的最短距离(SqlGeography c#)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想找出两个SqlGeography多边形之间的最短距离。我知道有一个方法ShortestLineTo
(https://msdn.microsoft.com/en-us/library/ff929252.aspx),但它在这样做的时候会给出空字符串。
有谁能给我推荐一些替代方法吗?
推荐答案
应按逆时针顺序定义GEOGRAPHY
。如果您将其定义为CW,则它将是除您正在定义的地区之外的所有世界:
DECLARE @G1 GEOGRAPHY = 'POLYGON ((1 1, 3 1, 3 3, 1 3, 1 1))';
DECLARE @G2 GEOGRAPHY = 'POLYGON ((45 45, 45 46, 44 46, 44 45, 45 45))';
//This is what you have defined
DECLARE @G3 GEOGRAPHY = 'POLYGON ((45 45, 44 45, 44 46, 45 46, 45 45))';
@g1:点顺序是逆时针,因此@g1是一个包含POINT(2,2)
@g2:点顺序为逆时针,因此@g2是包含POINT(44.5,45.5)
@G3:点的顺序是CW,因此@G3是一个包含整个世界的多边形,但@G2多边形除外。它还包含@G1多边形,因此@G1和@G3之间的最短距离没有任何意义。
在CW和CCW几何图形之间切换
使用ReorientObject()
方法,您可以在CW和CCW地理位置之间切换。因此,如果您尝试:
SELECT @G3.ReorientObject().STDifference(@G2).STAsText();
结果将是GEOMETRYCOLLECTION EMPTY
,因为它们包含相同的区域。因此它们相交,ShortestLineTo
的结果返回LINESTRING EMPTY
,因为它们彼此相交。
再加一分
您可以通过检查EnvelopeAngle
来检查多边形是否包含太大的区域,以便让您知道错误定义的地理位置。
如图所示,EnvelopeAngle=180
表示多边形包含世界上非常大的区域。
这篇关于查找两个多边形之间的最短距离(SqlGeography c#)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文