Вот идея. Обратитесь к этому SO Вопрос . Первый ответ содержит ссылку на XML-файл с координатами многоугольника для всех государственных границ. Вы также можете упростить полигоны, чтобы их было не так много.
Когда маркер добавляется на карту, вы можете проверить, существует ли он в одном из 50 точечных массивов, используя алгоритм, подобный this :
ОБНОВЛЕНИЕ: исходная функция, которую я разместил, не была в javascript. Вот один Javascript и скрипка его работы :
/*
* 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;
}
Если он существует, увеличить счетчик.
Как только вы нашли состояние с наибольшим количеством маркеров, вы можете установить масштаб, создав объект bounds.
//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)
Я понятия не имею, как это повлияет на производительность, но это должно быть намного быстрее, чем обратное геокодирование.