我想你基本上是在寻找你的多边形centroid,你可以围绕它你的文本居中。维基百科文章包含了对各种方法的很好的描述。
一个简单的方法是只取,让你的多边形的各点的平均值,并使用该平均点为中心,为您的文本。
也看到这个问题:
How do I find the center of a number of geographic points?
它比简单平均有点复杂,因为你需要考虑地球在你的计算(曲率也许,如果规模足够大)。
更新:我只是想你可以做这样一个简单的方法。写一个函数是这样的:
public Point Centrality(Point somePoint, Point[] otherPoints)
{
float sumOfSquares = 0;
foreach (Point point in otherPoints)
{
float dist = DistanceBetween(somePoint, point);
sumOfSquares += dist * dist;
}
return 1/sumOfSquares;
}
然后(这可能是计算昂贵的),你希望通过界定该区域的矩形任何分辨率迭代,并评价每个点的中心地位。具有最高Centrality得分的点几乎肯定会在复杂区域的边界内,因为该区域外的点将远离构成该区域的所有点(这就是为什么您使用平方距离而不是距离)。
这可能只是一个起点。这个衡量标准很大程度上受到构成该地区的点/线的粒度的影响 - 例如,如果佛罗里达州的土豆块被定义为佛罗里达另一半的两倍,那么具有最高中心性度量的点将会很好进入锅柄,而不是在它的中心。
谢谢,centriod是一种改进,使围绕框中的文字居中。尽管如此,我所见过的所有东西都将“佛罗里达”一词放在墨西哥湾。我对这个中心不感兴趣,因为它在“干地”上,即不在毗邻的管辖区内。 – 2010-05-28 17:22:18
是的,我想在边界矩形内尝试一堆点是实现它的方法。这将是昂贵的,但它只需要做一次。关于你的函数返回的东西靠近锯齿状的边界而不是直的边界,你是对的。 我只需选择符合地理形状的名称矩形,并且距离边界矩形的中心最近,如果没有合适的话最接近中心的矩形。 – 2010-05-30 11:31:35