寻找两个多边形之间的最短距离(SQLC#)

寻找两个多边形之间的最短距离(SQLC#),c#,sql,sql-server,spatial,C#,Sql,Sql Server,Spatial,我想找出两个多边形之间的最短距离。我知道有一个方法shortlineto(),但它在执行此操作时会给出空字符串。 有人能给我建议一些替代方法吗? 使用最短的行 当两个地理位置发生变化时,将返回一个空的LineString实例 实例彼此相交 使用最短的行 当两个地理位置发生变化时,将返回一个空的LineString实例 实例彼此相交 您应该按逆时针顺序定义地理位置。如果您将其定义为CW,则它将是除您定义的区域之外的所有世界: DECLARE@G1 GEOGRAPHY='POLYGON((11,31

我想找出两个多边形之间的最短距离。我知道有一个方法
shortlineto
(),但它在执行此操作时会给出空字符串。 有人能给我建议一些替代方法吗? 使用最短的行

当两个地理位置发生变化时,将返回一个空的LineString实例 实例彼此相交

使用最短的行

当两个地理位置发生变化时,将返回一个空的LineString实例 实例彼此相交


您应该按逆时针顺序定义地理位置。如果您将其定义为CW,则它将是除您定义的区域之外的所有世界:

DECLARE@G1 GEOGRAPHY='POLYGON((11,31,33,13,11));
声明@G2 GEOGRAPHY='POLYGON((4545,4546,4446,4445,4545));
//这就是你所定义的
声明@G3 GEOGRAPHY='多边形((45,44,45,44,46,45,45));
@G1:点顺序是CCW,因此@G1是包含
点(2,2)

@G2:点顺序为CCW,因此@G2是包含
点(44.5,45.5)

@G3:点顺序为CW,因此@G3是一个包含除@G2多边形外的整个世界的多边形。它还包含@G1多边形,因此@G1和@G3之间的最短距离没有任何意义

在CW和CCW几何图形之间切换 使用该方法,您可以在CW和CCW地理位置之间切换。因此,如果您尝试:

选择@G3.ReorientObject().STDifference(@G2.statext();
结果将是
GEOMETRYCOLLECTION为空
,因为它们包含相同的区域。因此它们相交,
ShortestLineTo
的结果返回一个
LINESTRING空
,因为它们彼此相交

还有一点 您可以通过检查来检查多边形是否包含过大的区域,以便了解错误定义的地理位置


如图所示,
EnvelopeAngle=180
表示多边形包含世界上非常大的区域。

您应该按逆时针顺序定义地理。如果您将其定义为CW,则它将是除您定义的区域之外的所有世界:

DECLARE@G1 GEOGRAPHY='POLYGON((11,31,33,13,11));
声明@G2 GEOGRAPHY='POLYGON((4545,4546,4446,4445,4545));
//这就是你所定义的
声明@G3 GEOGRAPHY='多边形((45,44,45,44,46,45,45));
@G1:点顺序是CCW,因此@G1是包含
点(2,2)

@G2:点顺序为CCW,因此@G2是包含
点(44.5,45.5)

@G3:点顺序为CW,因此@G3是一个包含除@G2多边形外的整个世界的多边形。它还包含@G1多边形,因此@G1和@G3之间的最短距离没有任何意义

在CW和CCW几何图形之间切换 使用该方法,您可以在CW和CCW地理位置之间切换。因此,如果您尝试:

选择@G3.ReorientObject().STDifference(@G2.statext();
结果将是
GEOMETRYCOLLECTION为空
,因为它们包含相同的区域。因此它们相交,
ShortestLineTo
的结果返回一个
LINESTRING空
,因为它们彼此相交

还有一点 您可以通过检查来检查多边形是否包含过大的区域,以便了解错误定义的地理位置


如图所示,
EnvelopeAngle=180
表示多边形包含世界上非常大的区域。

您能发布您的代码示例吗?添加了示例。请看图片。给你一个答案。你能发布你的代码样本吗?添加了样本。请看图片。给你一个答案。问题是两个地理实例不相交。请看图片以获得清晰的信息。@messi它们确实相交,因此LeMara指出了正确的问题,但更多解释请参见我的答案。问题是两个地理实例没有相交。请查看图片以获得清晰的信息。@messi它们确实相交,因此LeMara指出了正确的问题,但更多解释请参见我的答案。@messi乐于助人:)@messi乐于助人:)