2017-07-21 13 views
1

Googleマップの最新版を使用してmapmarkersを印刷しようとしています。 は、私が使用していることを実行します。Googleマップ、マーカー情報が彼のマーカーに近づいていません

function initmap2() { 
     map2 = new google.maps.Map(document.getElementById('map-scan'), { 
      zoom: 16, 
      styles: style, 
      center: { lat: 13.7218501, lng: -89.2039192 } 
     }); 

     for (i = 0; i < positions.length; i++) { 
      markers = new google.maps.Marker({ 
       position: new google.maps.LatLng(positions[i]), 
       map: map2 
      }); 
     } 

     var markers = positions.map(function (location, i) { 
      return new google.maps.Marker({ 
       position: location, 
      }); 
     }); 

     for (var i = 0; i < markers.length; i++) { 
      markers[i].info = new google.maps.InfoWindow({ 
       content: '<b>' + positions[i]["title"].toUpperCase() + '</b>' 
      }); 
      markers[i].info.open(map2, markers[i]); 
     } 

    } 

マーカーが正しい位置に表示されますが、InfoWindwsは非常にそれらを離れています。

なぜ私はmapの代わりにmap2を使用していますか?別のgooglemapを事前にロードし、map2がダイアログにロードされます(ダイアログが開いている場合はオンデマンドで)

この動作を修正するにはどうしたらいいですか?

enter image description here

+1

あなたは 'マーカー 'を2回設定しているように私に見えます。一度グローバルになると、その都度上書きされ、一度はローカルに上書きされますが、 'map'には設定されません。あなたがjsfiddleを作成した場合、私はそれが明確でない場合は何を意味するのかを示すことができます。 –

+0

実際の例がないと、マーカーARRAYは、指定したコードで決して更新されません。私は可読性を高めるために変数名を変更することをお勧めします。 –

答えて

0

あなたの問題は、これはあなたの位置の各々のためのマーカーを作成し、... positionsオーバーあなたのループです:

for (i = 0; i < positions.length; i++) { 
     markers = new google.maps.Marker({ 
      position: new google.maps.LatLng(positions[i]), 
      map: map2 
     }); 
    } 

あなたは再び同じことを実行します。

var markers = positions.map(function (location, i) { 
     return new google.maps.Marker({ 
      position: location, 
     }); 
    }); 

そして、この第2の方法の最後では、markersはマーカーの配列です。その後、情報ウィンドウを設定するためにループします。

ただし、最初にマーカーを作成したときに、map属性を指定しました。そのマーカーは地図上に現れます。 2度目は気にしなかったので、これらのマーカーは地図上にありません。

あなたの最初のやり方により、マーカーが表示されます。しかし、その後、2番目の方法で作成された目に見えないマーカーに情報ウィンドウを添付します。 :/

コードはちょっと混乱しています。positionsを超えるループを1つだけ実行し、各マーカーにmapプロパティを指定してください。私はちょうど行うだろう:

var markers = []; 

for (i = 0; i < positions.length; i++) { 
    markers.push(new google.maps.Marker({ 
     position: new google.maps.LatLng(positions[i]), 
     map: map2 
    })); 

    markers[i].info = new google.maps.InfoWindow({ 
     content: '<b>' + positions[i]["title"].toUpperCase() + '</b>' 
    }); 
    markers[i].info.open(map2, markers[i]); 
} 
関連する問題