我想你基本上是在尋找你的多邊形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