2013-03-20 15 views
8

マーカーを1つずつ作成するのではなく、効率的になるように、Googleマップでマーカーの配列を作成する際に助けが必要です。私は以下を試みたが、うまくいきませんでした。誰にでもアドバイスがありますか?Googleマップでマーカーの配列を追加する

//create array to store a set of location 
var collection = new Array(); 

//a set of locations stored in array 
collection[0] = new google.maps.LatLng(13.742167701649997, 100.50721049308777); 
collection[1] = new google.maps.LatLng(13.74428, 100.5404525); 
collection[2] = new google.maps.LatLng(13.744108, 100.543098); 

var pointMarkerImage = new Array();//store image of marker in array 
var pointMarker = new Array();//store marker in array 

//create number of markers based on collection.length 
function setPoint(){ 
for(var i=0; i<collection.length; i++){ 

var pointMarkerImage[i] = new google.maps.MarkerImage('marker.png'); 
var pointMarker[i] = new google.maps.Marker({ 
     position: collection[i], 
     map: map, 
     icon: pointMarkerImage[i], 
     animation: google.maps.Animation.BOUNCE, 
     title: "collection"+ i 
    }); 

    google.maps.event.addListener(pointMarker[i], 'click', function() { 
      window.open("blog/page01.html","_blank","toolbar=yes, location=yes, directories=no, status=no, menubar=yes, scrollbars=yes, resizable=yes, copyhistory=yes") 
      }; 
    ); 
    } 
} 
+0

あなたは 'setPoint()'を起動していますか?この関数をどこで呼びますか? –

+0

あなたはforループを考えていません。配列インデックスごとに新しいlatlngオブジェクトを作成する必要はありません。番号を保存して(tipical for){new google.map(lat [i]) }そのようなもの –

+0

あなたのコメントをありがとう、私は下に適切な外観を与えるために全体のコードを投稿する必要があります.. – user2192094

答えて

3

私はいくつかのことを参照してください。...ただpointMする必要がありますループのため、VaRのpointMに

1)... varは、それはあなたがのためにループの外に持っているセットを無視します追加。

2)あなたはaを持っています。物事を壊している機能の後に。

これを試してみてください:

//create array to store a set of location 
var collection = new Array(); 

//a set of locations stored in array 
collection[0] = new google.maps.LatLng(13.742167701649997, 100.50721049308777); 
collection[1] = new google.maps.LatLng(13.74428, 100.5404525); 
collection[2] = new google.maps.LatLng(13.744108, 100.543098); 

var pointMarkerImage = new Array();//store image of marker in array 
var pointMarker = new Array();//store marker in array 

//create number of markers based on collection.length 
function setPoint(){ 
    for(var i=0; i<collection.length; i++){ 

    pointMarkerImage[i] = new google.maps.MarkerImage('marker.png'); 
    pointMarker[i] = new google.maps.Marker({ 
      position: collection[i], 
      map: map, 
      icon: pointMarkerImage[i], 
      animation: google.maps.Animation.BOUNCE, 
      title: "collection"+ i 
    }); 

    google.maps.event.addListener(pointMarker[i], 'click', function(){ 
     window.open("blog/page01.html","_blank","toolbar=yes, location=yes, directories=no, status=no, menubar=yes, scrollbars=yes, resizable=yes, copyhistory=yes"); 
    } 
    ); 
    } 
} 
+0

フィードバックいただきありがとうございます。不注意なミスだった!なぜそれがまだ動作していないのか分かりません。私はより良い画像を与えるために、以下の全体のコードを掲載したいかもしれません。 – user2192094

25

これは私の単純なコードであり、それは正常に動作します。マーカーをクリックすると、そのマーカーの位置に基づいて情報ウィンドウが開きます。

<script> 
var locations = [ 
    ['Title A', 3.180967,101.715546, 1], 
    ['Title B', 3.200848,101.616669, 2], 
    ['Title C', 3.147372,101.597443, 3], 
    ['Title D', 3.19125,101.710052, 4] 
]; 
var map = new google.maps.Map(document.getElementById('map'), { 
    zoom: 12, 
    center: new google.maps.LatLng(3.171368,101.653404), 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
}); 

var infowindow = new google.maps.InfoWindow; 

var marker, i; 

for (i = 0; i < locations.length; i++) { 
    marker = new google.maps.Marker({ 
     position: new google.maps.LatLng(locations[i][1], locations[i][2]), 
     map: map 
    }); 

    google.maps.event.addListener(marker, 'click', (function(marker, i) { 
     return function() { 
      infowindow.setContent(locations[i][0]); 
      infowindow.open(map, marker); 
     } 
    })(marker, i)); 
} 
</script> 

<div data-role="page" id="map_result"> 
    <div data-role="header" data-position="fixed"><h1>Multiple Marker</h1></div> 
    <div data-role="content" style="padding:0;"> 
     <div id="map"></div> 
    </div> 
</div> 
+1

その機能は、(i)関数のものを返すことは非常に素晴らしいです。 –

関連する問題