ここにアイデアがあります。このSO Questionを参照してください。最初の回答には、すべての州境のポリゴン座標を持つXMLファイルへのリンクがあります。あまりにも多くの頂点がないようにポリゴンを単純化することもできます。
マーカーがマップに追加されたとき、あなたはそれがthisのようなアルゴリズムを使用して、50ポイントのアレイのうちの1つに存在するかどうかを確認することができます
UPDATE:私は掲載元の関数はJavaScriptではなかったです。ここではJavascriptを1と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)
これは、パフォーマンスが賢明になる方法についてはわかりませんが、逆ジオコーディングよりもはるかに速いはずです。
私はあなたが状態の異なるサイズのため数学的に何かにトリップするつもりであるように感じる...あなたのマーカーが完璧なグリッドに配置されたと想像して...あなたは、各マーカーがどの状態にあるのかを知ることができます。あなたのソースがその部分を供給できるので、各点を逆ジオコードにする必要はありませんか? –
ソースはそのデータを提供できません。マーカーの濃度が最も高い一般的な領域にズームする方法(状態の指定を無視して)を見つけることができれば、私は後退しても構いません。私はこれが非常によく考え出された要求ではないことを認識していますが、私はそれらに何かを与えなければなりません。 – smp7d
疑似逆転はどうですか?最大と最小の緯度(経度と同じ)をとり、Xで割って、各マーカーを配置するごとに、各スライスのカウンタを増やしてください...その後、Googleに電話しなくても一般的なアイデアが得られます毎回 –