2013-04-21 152 views
2

所以我在一個地理定位項目中工作(asp.net MVC4),我在我的數據庫中有很多職位,我想在我的地圖中顯示它,我的問題是腳本只顯示第一個位置,這是我的腳本:在地圖中顯示多個標記

var checkpoints = []; 
function setMarkers(map, locations) { 

for (var i = 0; i < locations.length; i++) 
{ 
    var place = locations; 
    for (var i = 0; i < place.length; i++) 
    { 
     var points = new google.maps.LatLng(place[i][1], place[i][2]); 
     checkpoints.push(points); 
    } 

    var check = checkpoints[0]; 
    var index = 0; 
    for (var j = 0; j < checkpoints.length; j++) 
    { 
      check = checkpoints[j]; 
      index = j; 
      var myLatLng = new google.maps.LatLng(place[index][1], place[index][2]);  

      var marker = new google.maps.Marker 
       (
        { 
         position: myLatLng, 
         map: map, 
         title: place[index][0], 
         zIndex: place[index][3] 
        } 
       ); 
    } 
} 
return marker; 
} 

所以如果有人有任何解決方案或想法,我將非常感激。

謝謝大家@大衛@甜菜,甜菜根@razzak我的劇本現在工作得很好,這是我的新的腳本:

var checkpoints = []; 
function setMarkers(map, locations) { 

for (var i in locations) { 
    var points = new google.maps.LatLng(locations[i][1], locations[i][2]); 
    checkpoints.push(points); 
    var marker = new google.maps.Marker({ 
     map: map, 
     position: points, 
     title: locations[i][0], 
     zindex: locations[i][4] 
    }); 
} 
} 

更新: 我的腳本工作正常,但我有一個小問題我事件,當我上的一個標記DBLCLICK它應該表現出他的頭銜,但它只是告訴我的最後一個標誌的標題:

var checkpoints = []; 
function setMarkers(map, locations) { 

for (var i in locations) { 
    var points = new google.maps.LatLng(locations[i][1], locations[i][2]); 
    checkpoints.push(points); 
    var marker = new google.maps.Marker({ 
     map: map, 
     position: points, 
     title: locations[i][0], 
     zindex: locations[i][4], 
    }); 
    //this is my event 
    google.maps.event.addListener(marker, 'dblclick', function() { 
     alert("I am marker " + marker.title); 
    }); 
} 
} 

回答

1

我已經簡化了你的代碼

function setMarkers(locations) { 
    for(var i in locations) { 
    var points = new google.maps.LatLng(locations[i][1].lat,locations[i][2].lng); 
    checkpoints.push(points); 
    var marker = new google.maps.Marker({ 
    map:map, 
    position: points, 
    icon: 'myicon.png',// 
    title: locations[i][0], 
    zindex: locations[i][4] 
    }); 

    } 
} 
+0

再次感謝你@david它的工作原理,但你應該更新以下幾行:var points = new google.maps.LatLng(locations [i] [1 ],地點[i] [2]);和:title:locations [i] [0], zindex:locations [i] [4] – Mohammadov 2013-04-21 15:34:08

+0

我在活動中遇到了一個小問題,它向我展示了相同的標題:google.maps.event.addListener(marker, 'dblclick',函數(){alert(「I am marker」+ marker.title); }); – Mohammadov 2013-04-21 16:22:43

+0

@Mohammadov嘗試'alert(「我是標記」+ this.title);' – 2013-04-21 17:45:59

0

Mohammadov,你這是它複雜得多,它需要的。

嘗試這種情況:

function setMarkers(map, locations) { 
    for(var i=0; i<locations.length; i++) { 
     var loc = locations[i]; 
     loc[4] = new google.maps.Marker({ 
      position: new google.maps.LatLng(loc[1], loc[2]), 
      map: map, 
      title: loc[0], 
      zIndex: loc[3] 
     }); 
    } 
} 

地圖然後應該顯示標記,並且locations陣列的每個成員應與它的標記物的參考來增強,如元素[4]。

0

主循環內部的兩個循環都會導致問題,它們是不必要的,可以避免。同時在循環的最後返回標記將返回只有最後一次,你可以刪除它,以及:現在

var checkpoints = []; 

function setMarkers(map, locations) {  
for (var i=0; i<locations.length; i++) 
{ 
    var place = locations[i], 
     myLatLng = new google.maps.LatLng(place[1], place[2]), 
     marker = new google.maps.Marker 
       (
        { 
         position: myLatLng, 
         map: map, 
         title: place[0], 
         zIndex: place[3] 
        } 
       ); 
    checkpoints.push({"point": myLatLng, "marker": marker}); 
} 
} 

檢查站應具備的LatLng和每個地方的陣列。

jsfiddle

+0

感謝@razzak但它仍然沒有工作循環仍然是循環1次 – Mohammadov 2013-04-21 14:08:41

+0

注:當我在這裏封閉循環:for(VAR I = 0; i Mohammadov 2013-04-21 14:13:18

+0

它給出了所有位置 – Mohammadov 2013-04-21 14:15:06

相關問題