Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript google maps v3上的多个标记不在循环中工作_Javascript_Google Maps_Google Maps Api 3 - Fatal编程技术网

Javascript google maps v3上的多个标记不在循环中工作

Javascript google maps v3上的多个标记不在循环中工作,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,好了,各位,我在添加多个标记时遇到了一些问题。我发誓,我一直在寻找,直到我的眼睛交叉,我只是无法找出这一点 这是我的密码: function initialize() { cnt = 0; var icon = "bullet-red-icon.png"; var mapProp = { center: new google.maps.LatLng(39.8282,-98.5795), zoom:5, mapTypeId: google.maps.MapTypeId.

好了,各位,我在添加多个标记时遇到了一些问题。我发誓,我一直在寻找,直到我的眼睛交叉,我只是无法找出这一点

这是我的密码:

function initialize()
{
cnt = 0;

var icon = "bullet-red-icon.png";

var mapProp = {
    center: new google.maps.LatLng(39.8282,-98.5795),
    zoom:5,
    mapTypeId: google.maps.MapTypeId.ROADMAP
};

var map = new google.maps.Map(document.getElementById("googleMap"), mapProp);

$("marker", mapxml).each(
    function(i)
    {
        var iwcontent = $(this).find("mname").text() + "<br /><br />";
        iwcontent += $(this).find("mstreet").text() + "<br />" + $(this).find("mcity").text() + " " + $(this).find("mstate").text() + " " + $(this).find("mzip").text() + "<br /><br />";
        iwcontent += "UNITS: " + $(this).find("units").text() + "<br />";
        iwcontent += "UNIT COST: " + $(this).find("unitcost").text() + "<br />";
        iwcontent += "TOTAL FUEL COST: " + $(this).find("fuelcost").text() + "<br />";

        var mlat = parseFloat($(this).find("mlat").text());
        var mlon = parseFloat($(this).find("mlon").text());

        addMarker(iwcontent, mlat, mlon, map, i);
    }
);

$("#d_transmap").show();
$(".t_loader").hide();

}
现在,如果我跳出循环并称之为:

addMarker(content, 39.8282, -98.5795, map, i)
它会吐出一个记号笔!所以我最初的想法是我的lat-long数据有问题。然而,我记录了所有这些,甚至记录了标记本身,它似乎创建了它们。我只是看不到他们


我到底做错了什么?

将下面的代码用于多个标记 变量arr是lat long值的数组

   function initialize(arr) {

  directionsDisplay = new google.maps.DirectionsRenderer();
  geocoder = new google.maps.Geocoder();

  var mapOptions = {     
  };

  var icon = "bullet-red-icon.png";
  map = new google.maps.Map(document.getElementById('map_addresses'),mapOptions);

  jQuery(arr).each(function(i){
     if(typeof arr[i] != 'undefined'){  
      var latlng = new google.maps.LatLng(arr[i][0],arr[i][1]);
            geocoder.geocode(
                {'latLng': latlng},
                function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                  bounds.extend(results[0].geometry.location);
                  map.fitBounds(bounds);

                   marker = new google.maps.Marker({
                    map: map,
                    position: results[0].geometry.location,
                    icon: icon ,
                    animation: google.maps.Animation.DROP,
                  });
                  //google.maps.event.addListener(marker, 'click', toggleBounce);
                  markersArray.push(marker);
                } else {
                  alert('Geocode was not successful for the following reason: '
                    + status);
                }
              }
          );
     }
  });
}
google.maps.event.addDomListener(window, 'load', initialize);

希望这将帮助您使用下面的代码进行多标记 变量arr是lat long值的数组

   function initialize(arr) {

  directionsDisplay = new google.maps.DirectionsRenderer();
  geocoder = new google.maps.Geocoder();

  var mapOptions = {     
  };

  var icon = "bullet-red-icon.png";
  map = new google.maps.Map(document.getElementById('map_addresses'),mapOptions);

  jQuery(arr).each(function(i){
     if(typeof arr[i] != 'undefined'){  
      var latlng = new google.maps.LatLng(arr[i][0],arr[i][1]);
            geocoder.geocode(
                {'latLng': latlng},
                function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                  bounds.extend(results[0].geometry.location);
                  map.fitBounds(bounds);

                   marker = new google.maps.Marker({
                    map: map,
                    position: results[0].geometry.location,
                    icon: icon ,
                    animation: google.maps.Animation.DROP,
                  });
                  //google.maps.event.addListener(marker, 'click', toggleBounce);
                  markersArray.push(marker);
                } else {
                  alert('Geocode was not successful for the following reason: '
                    + status);
                }
              }
          );
     }
  });
}
google.maps.event.addDomListener(window, 'load', initialize);
希望这能帮助您您的
addMarker()
函数有几个问题

  • 对lon.toFixed(6)的调用不应该在那里。直接使用
    lon
    。我还建议使用名称
    lng
    而不是
    lon
    ,以与Maps API术语保持一致
  • 对于click事件监听器,您不需要使用函数returning-a-function进行花哨的歌舞表演。这里已经有一个闭包,因为
    addMarker()
    是一个函数。你不需要再做一次了结。而且您根本不需要
    i
    参数。这并不会妨碍您的代码工作,但会带来很多您不需要的额外复杂性
  • 功能添加标记(内容、lat、lng、地图){
    var point=new google.maps.LatLng(lat,lng);
    var marker=new google.maps.marker({
    位置:点,,
    图标:“子弹红图标.png”,
    地图:地图
    });
    var infowindow=new google.maps.infowindow({content:content});
    google.maps.event.addListener(标记'click',函数(){
    infowindow.setContent(content);
    信息窗口。打开(地图、标记);
    });
    }
    
    更新:在你的测试页面中一直放大,这样你就可以看到南极洲了。找到你丢失的记号笔了吗?:-)

    (更新2:好吧,有时我在那里看到标记,有时我看不到。但继续阅读…)

    现在检查XML下载中的纬度和经度,例如:

    <mlat>-82.753936</mlat>
    <mlon>42.675168</mlon>
    
    -82.753936
    42.675168
    
    您的
    addMarker()
    函数有几个问题

  • 对lon.toFixed(6)的调用不应该在那里。直接使用
    lon
    。我还建议使用名称
    lng
    而不是
    lon
    ,以与Maps API术语保持一致
  • 对于click事件监听器,您不需要使用函数returning-a-function进行花哨的歌舞表演。这里已经有一个闭包,因为
    addMarker()
    是一个函数。你不需要再做一次了结。而且您根本不需要
    i
    参数。这并不会妨碍您的代码工作,但会带来很多您不需要的额外复杂性
  • 功能添加标记(内容、lat、lng、地图){
    var point=new google.maps.LatLng(lat,lng);
    var marker=new google.maps.marker({
    位置:点,,
    图标:“子弹红图标.png”,
    地图:地图
    });
    var infowindow=new google.maps.infowindow({content:content});
    google.maps.event.addListener(标记'click',函数(){
    infowindow.setContent(content);
    信息窗口。打开(地图、标记);
    });
    }
    
    更新:在你的测试页面中一直放大,这样你就可以看到南极洲了。找到你丢失的记号笔了吗?:-)

    (更新2:好吧,有时我在那里看到标记,有时我看不到。但继续阅读…)

    现在检查XML下载中的纬度和经度,例如:

    <mlat>-82.753936</mlat>
    <mlon>42.675168</mlon>
    
    -82.753936
    42.675168
    
    好的,我会试试这个,但是我把信息窗口放在哪里呢?只要把这个代码放在脚本标记中,并将“map_addresses”更改为您的map div id变量arr包含这个值[[“23.0237795”,“72.5855474”,“23.0345011”,“72.5530171”,“23.0237795”,“72.5855474”,“23.0376011”,“72.6030171”],好的,我会试试这个,但是我应该把信息窗口放在哪里呢?只要把这段代码放在脚本标记中,并将“map_addresses”更改为您的map div id变量arr包含这个值[[“23.0237795”、“72.5855474”]、[“23.0345011”、“72.5530171”]、[“23.0237795”、“72.5855474”]、[“23.0376011”、“72.6030171”],所有这些都放在那里进行故障排除。我尝试了你的代码,它与我的原始代码相似,但仍然没有成功。同样的问题,没有显示任何内容,但如果我在循环外输入addMarker,它将显示标记。将代码放在小提琴中,以便人们可以尝试。如果你想要一个工作的谷歌地图提琴,你可以用我的一个:好的,Michael,这是脚本,它在那里也不工作:我仍然要在这里工作。在Chrome中加载你的提琴,打开开发者工具,然后查看错误消息。您可以单击错误右侧的文件名和行号,查看错误在代码中的位置。如果您不熟悉开发人员工具,以及。花点时间真正熟悉这些工具;这是你能做的最好的事情之一,可以更快地发现问题。此外,小提琴中的错误出现在一行代码中,而这行代码不在你最初的问题中,因此在那之后可能还有其他错误需要修复。但是有了DevTools,你会有一段轻松得多的时间。所有这些东西都放在那里进行故障排除。我尝试了你的代码,它与我的原始代码相似,但仍然没有成功。同样的问题,没有显示任何内容,但如果我在循环外输入addMarker,它将显示标记。将代码放在小提琴中,以便人们可以尝试。如果你想要一个工作的谷歌地图提琴,你可以用我的一个:好的,Michael,这是脚本,它在那里也不工作:我仍然要在这里工作。在Chrome中加载你的提琴,打开开发者工具,然后查看错误消息。您可以单击文件名