2013-04-21 105 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

相关问题