這是一個想法。請參閱此SO Question。第一個答案有一個指向所有狀態邊界的帶有多邊形座標的XML文件的鏈接。你也可以簡化多邊形,所以沒有太多的頂點。
當一個標記添加到地圖上,您可以檢查,看它是否在使用的算法類似this的50個陣列中的一個存在:
UPDATE:我張貼的最初的功能是不是在JavaScript。這裏是一個Javascript和一個fiddle of it working:
/*
* state == array of Google LatLng objects.
* lat == latitude to test
* lng == longitude to test
*/
function pointInPolygon(state, lat, lng) {
var polyCount = state.length;
var oddNodes = false;
var j = 0;
for (var i = 0; i < polyCount; i++) {
j++;
if (j == polyCount) {
j = 0;
}
latitudeBoundry = state[i].lat();
longitudeBoundry = state[i].lng();
latitudeBoundry2 = state[j].lat();
longitudeBoundry2 = state[j].lng();
if ((latitudeBoundry > lat && latitudeBoundry <= lat
|| latitudeBoundry2 > lat && latitudeBoundry <= lat)) {
if (longitudeBoundry + (lat - latitudeBoundry)
/(latitudeBoundry2 - latitudeBoundry)
* (longitudeBoundry2 - longitudeBoundry) > lng) {
oddNodes = !oddNodes
}
}
}
return oddNodes;
}
如果它存在遞增計數器。
一旦找到了標記最多的狀態,就可以通過創建邊界對象來設置縮放。
//the polyArray is the array of points for the target state.
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < polyArray.length; i++)
{
bounds.extend(polyArray[ i ]);
}
//set the map viewport
map.fitBounds(bounds)
我不知道這將如何擺脫性能明智,但它應該比反向地理編碼快得多。
我覺得你會因爲各種不同的狀態而受到任何數學上的絆倒......想象你的標記是在一個完美的網格中佈置的......你無法做任何事情來確定正確的狀態而沒有知道每個標記處於哪種狀態。也許你的源可以提供該部分,所以你不必爲每個點都反轉地理代碼? – 2011-12-13 19:23:05
來源無法提供該數據。如果我能找到一種方法來放大標記濃度最高的區域(忽略狀態標記),我會願意推遲。我意識到這不是一個非常深思熟慮的要求,但我必須給他們一些東西。 – smp7d 2011-12-13 19:30:11