使用Sql空间数据(C#)查找;“视觉”;不规则多边形的中心
我正在Bing Maps WPF控件上绘制区域(使用使用Sql空间数据(C#)查找;“视觉”;不规则多边形的中心,c#,.net,sql-server,polygon,bing-maps,C#,.net,Sql Server,Polygon,Bing Maps,我正在Bing Maps WPF控件上绘制区域(使用SqlGeometry/SqlGeography并将其转换为WPFLocationCollection等效项),需要对其进行标记。我在区域上绘制了标签,并将它们附着到STCentroid()找到的点上。当然,正如您想象的,这是“U”或“C”形区域的一个问题,其中质心位于该区域之外,这使得标签不正确 有没有一种方法可以使用SqlGeometry/SqlGeography找到“可视”中心,或者找到适合形状的最大圆并使用该中心?我尝试过使用STPoi
SqlGeometry
/SqlGeography
并将其转换为WPFLocationCollection
等效项),需要对其进行标记。我在区域上绘制了标签,并将它们附着到STCentroid()
找到的点上。当然,正如您想象的,这是“U”或“C”形区域的一个问题,其中质心位于该区域之外,这使得标签不正确
有没有一种方法可以使用SqlGeometry
/SqlGeography
找到“可视”中心,或者找到适合形状的最大圆并使用该中心?我尝试过使用STPointOnSurface()
,但似乎STPointOnSurface()
总是在边上拾取一个点,就像这样DCREHA(底部深绿色区域的标签总是在边上结束:
已经提出了一个几乎相同的问题。在您的案例中,最相关的答案可能是一个。答案中最难的部分是确定在何处绘制将多边形分割为两个相等区域的线。因此,我建议对SQL Server的以下版本稍作修改:
STCentroid
查找重心STWithin
),则无需进一步处理;否则:stedevelope
获取多边形的封套,并将其作为参数传递给STCentroid
)STWithin
),则可能足够好(需要测试);否则:STIntersection
)假设只有一个形状,一个解决方案可能是找到开放的一面,然后将标签移动到另一面,直到标签位于形状内。您还可以进行一些过滤以删除一些区域。或者您可以尝试找到最大的凹面区域(我不知道是否有算法)。相关:那么U形的“视觉中心”?内部最大圆圈的中心。我贴的例子是U形的,所以在我看来,可以容纳的最大圆圈应该在西南部,包围加纳,接触PDNUNN区域。我会接受这一点,因为它非常接近我最终所做的(对任何有类似问题的人都适用)我很感激他们的努力。我从质心(如果不是内部形状)投射了8条射线对于NW、N、NE、E、SE、S、SW、W,取这些线与实际几何图形和视口形成的形状的交点,测量它们,并将标签放置在最长生成线的中点。