2012-09-10 155 views
0

Hy我无法在谷歌地图V3中显示多个标记,我获取的坐标正确但不显示在地图上。另外,在控制台中没有错误谷歌地图v3阵列标记

  1. map_items [0] =标题
  2. map_items [1] = 55.153766,11.909180
  3. map_items [2] =链路
  4. map_items [3] =文本

他们都显示正确,如果我做一个警报。 例如

“标题”, “51.00150763193481,-2.5659284999999272”, “链接”, “文本”

function initialize() { 
      var map = new google.maps.Map(document.getElementById('map'), { 
       zoom: 7, 
       center: new google.maps.LatLng(55.153766, 11.909180), 
       mapTypeId: google.maps.MapTypeId.ROADMAP 
      }); 
      for (var x = 0; x < temp.length; x++) { 
       if(temp[x][1]){ 
        var map_items = temp[x]; 
        var myLatlng = new google.maps.LatLng(map_items[1]); 
        var marker = new google.maps.Marker({ 
         map: map, 
         position: myLatlng, 
         title: map_items[0] 
        }); 
        google.maps.event.addListener(marker, 'click', function() { 
         infowindow.setContent('<div class="google_marker"><a href="'+map_items[2]+'">'+map_items[0]+'</a><br /><p>'+map_items[3]+'</p></div>'); 
         infowindow.open(map, marker); 
        }); 
       } 
      } 
     } 
+0

变量temp在哪里创建,并且您确定它包含数据? –

+0

临时变量像200行长,但它是正确的只有标记显示不起作用 –

回答

7

google.maps.LatLng()有两个参数,而不是一个,这样:

var latlon = map_items[1].split(','); 
var myLatlng = new google.maps.LatLng(parseFloat(latlon[0]), parseFloat(latlon[1])); 

虽然事实上,这将是更好地使用对象,而不是其中每个项目包含不同的数据类型的数组,例如:

marker_data[0] = { 
    "lat": 55.153766, 
    "lon": 11.909180, 
    "title": "My Title", 
    "link": "http://stackoverflow.com" 
} 
//etc... 

,然后你访问它是这样的:

var myLatlng = new google.maps.LatLng(marker_data[0].lat, marker_data[0].lon); 
+0

Tnks它的工作,但为什么?该变量中有2个坐标 –

+1

有两个坐标,但变量是一个字符串。它与“我的标题”一样,有2个词,但除非你分开它,变量只是一个字符串。 – Marcelo

1

假设map_items[1]是字符串

if (temp[x][1]) { 
    var map_items = temp[x]; 
    var latlng = map_items[1].split(","); 
    var myLatlng = new google.maps.LatLng(parseFloat(latlng[0]), parseFloat(latlng[1])); 
    var marker = new google.maps.Marker({ 
     map: map, 
     position: myLatlng, 
     title: map_items[0] 
    }); 
    google.maps.event.addListener(marker, 'click', function() { 
     infowindow.setContent('<div class="google_marker"><a href="' + map_items[2] + '">' + map_items[0] + '</a><br /><p>' + map_items[3] + '</p></div>'); 
     infowindow.open(map, marker); 
    }); 
} 
0

我认为,当你点击任何标记仅去年map_items将可用。创建不同的上下文可能会解决您的问题。

function initialize() { 
       var map = new google.maps.Map(document.getElementById('map'), { 
        zoom: 7, 
        center: new google.maps.LatLng(55.153766, 11.909180), 
        mapTypeId: google.maps.MapTypeId.ROADMAP 
       }); 
       function AttachEventToMarker(marker, map_items){ 

        google.maps.event.addListener(marker, 'click', function() { 
         infowindow.setContent('<div class="google_marker"><a href="'+map_items[2]+'">'+map_items[0]+'</a><br /><p>'+map_items[3]+'</p></div>'); 
         infowindow.open(map, marker); 
        }); 
       } 

       for (var x = 0; x < temp.length; x++) { 
        if(temp[x][1]){ 
         var map_items = temp[x]; 
         var myLatlng = new google.maps.LatLng(map_items[1]); 
         var marker = new google.maps.Marker({ 
          map: map, 
          position: myLatlng, 
          title: map_items[0] 
         }); 
         AttachEventToMarker(marker, map_items); 
        } 
       } 
      }