【发布时间】:2017-01-09 15:00:53
【问题描述】:
我正在 Bing Maps WPF 控件上绘制区域(使用 SqlGeometry/SqlGeography 并将它们转换为 WPF LocationCollection 等效项)并且需要标记它们。我在区域上绘制了标签并将它们附加到STCentroid() 找到的点上。当然,正如您想象的那样,“U”或“C”形区域的质心最终位于该区域之外,这会导致标签不正确。
有没有办法使用SqlGeometry/SqlGeography 找到“视觉”中心,或者找到适合形状的最大圆圈并使用该中心?我试过various methods 使用STPointOnSurface() 但似乎STPointOnSurface() 总是像DCREHA 一样在边缘选择一个点(底部深绿色区域的标签总是在边缘结束:
【问题讨论】:
-
假设只有一个形状,一种解决方案可能是找到打开的一侧,然后将标签移动到另一侧,直到标签在形状内。您还可以进行一些过滤以删除某些区域。或者你可能会尝试找到最大的凹面区域(我不知道是否有算法)。
-
那么U形的“视觉中心”在哪里?
-
最大的圆的中心适合里面。我发布的示例是 U 形的,因此非常非正式地,在我看来,可以容纳的最大圆圈位于西南,包括 Garner 并触及 PDNUNN 区域。
标签: c# .net sql-server polygon bing-maps