答え:https ://stackoverflow.com/a/10674273/1314132はあなたが探しているものに近いと思います。それはカバーします:
- マーカーの並べ替えと、同じ場所を占めるマーカーの識別。
- 同じ場所にあるマーカーを1つのマーカーにマージします。
InfoWindow
同じ場所を共有するマーカーのテーブルに個別のデータを表示するシングルを作成します。
同じ場所にあるマーカーを識別するロジックを変更して、近くにある特定のマーカーセットを識別し、InfoWindow
コンテンツを変更して、現在の例に示されているデータではなく写真を表示する必要があると思います。これらの両方の変更を行うのはかなり簡単なようです。
Google Mapsv3を使用するために元の回答を更新する編集:
ステップ1:マーカーデータを並べ替えて、同じ場所を占めるマーカーを識別できるようにします。
markerArray.sort( function( a, b ) {
var aLat = a.Latitude, bLat = b.Latitude;
if ( aLat !== bLat ) { return aLat - bLat; }
else { return a.Longitude - b.Longitude; }
});
ステップ2::の同じ場所に配置されたメンバーの「特別な」マーカーを作成する新しい関数を追加しますmarkerArray
。
var specialMarkers = null;
function createSpecialMarker( specialMarkers ) {
var infoWinContent = "<table class='special-infowin-table'>";
for ( var i = 0; i < specialMarkers.length; i++ ) {
infoWinContent +=
"<tr>" +
"<td class='special-table-label'>" +
"Visited Place [" + (i+1) + "]" +
"</td>" +
"<td class='special-table-cell'>" +
specialMarkers[i].nome + " on : " + specialMarkers[i].data +
"</td></tr>";
}
infoWinContent += "</table>";
var mrkrData = specialMarkers[0];
var point = new google.maps.LatLng( mrkrData.Latitude, mrkrData.Longitude );
var marker = new google.maps.Marker( point );
google.maps.event.addListener(marker, "click", function() {
map.openInfoWindowHtml( point, infoWinContent );
});
return marker;
}
ステップ3:マーカーデータを反復処理し、緯度と経度の両方が事前定義された場所にあるグループを特定margin
し、特別なマーカーを使用してそれらを地図上に表示し、他の場所ですべてのマーカーデータを「通常」処理します。
var margin = 50;
for ( var i = 0; i < markerArray.length; i++ ) {
var current = markerArray[i];
var coLocated = null;
var j = 0, matchWasFound = false;
if ( i < ( markerArray.length - 1 ) ) {
do {
var next = markerArray[ i + ++j ];
if ( next !== undefined ) { //just to be safe
if ( ( ( next.Latitude - current.Latitude ) < margin ) &&
( ( next.Longitude - current.Longitude ) < margin ) )
{
matchWasFound = true;
if ( coLocated === null ) {
coLocated = new Array( current, next);
}
else { coLocated.push( next ); }
}
else { matchWasFound = false; }
}
else { matchWasFound = false; }
}
while ( matchWasFound )
if ( coLocated != null ) {
var coLoMarker = createSpecialMarker( coLocated );
if ( specialMarkers === null ) {
specialMarkers = new Array( coLoMarker );
}
else {
specialMarkers.push( coLoMarker );
}
i += --j;
continue;
}
var point = new google.maps.LatLng(
markerArray[i].Latitude, markerArray[i].Longitude);
description = "Visited place : " + markerArray[i].name +
" on : " + markerArray[i].data;
//Simply creates a regular marker:
createMarker( point, i + 1, description );
}
}
アイデアは、単一のマーカーを作成し、情報ウィンドウに重要な場所に関する複数の情報を伝達させて、次のようなものにすることです。
この実際のコードは実行していませんが、毎日実行されるコードに基づいています。これは、アプローチをかなり詳細に説明し、コードの本体を共有することを目的としています。これにより、少し調整とデバッグが必要になる可能性があることを理解した上で、使用可能なソリューションにかなり近づくことができます。