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
Google maps 谷歌地图标记显示相同的信息_Google Maps_Google Maps Markers - Fatal编程技术网

Google maps 谷歌地图标记显示相同的信息

Google maps 谷歌地图标记显示相同的信息,google-maps,google-maps-markers,Google Maps,Google Maps Markers,我知道以前也有人问过类似的问题,但提供的答案并不能解决我的问题。我有一个循环,在这个循环中我遍历各个地方,创建标记并添加EventListener。之后,当我单击任何标记时,它们都显示相同的信息 var geocoder; var map; function initialize() { // Load places from xml file if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera,

我知道以前也有人问过类似的问题,但提供的答案并不能解决我的问题。我有一个循环,在这个循环中我遍历各个地方,创建标记并添加EventListener。之后,当我单击任何标记时,它们都显示相同的信息

  var geocoder;
 var map;
function initialize() {

// Load places from xml file
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.open("GET","person_city_clause.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;

var text =
xmlDoc.getElementsByTagName("text");

var places = [];
var descriptions = [];

for (var i=3; i<text.length; i++)
{
    places.push(text[i].childNodes[0].nodeValue); // place
    descriptions[places[i]] = descriptions.push(text[i-2].childNodes[0].nodeValue); // person
    i=i+3;
}

// Create inital Google Map
var latlng = new google.maps.LatLng(-34.397, 150.644);
var myOptions = {
  zoom: 2,
  center: latlng,
  mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);



// fill map with place markers
geocoder = new google.maps.Geocoder();
var infowindow = new google.maps.InfoWindow();
var marker = [];

for (var i=0; i<places.length; i++)
{
    geocoder.geocode( { 'address': places[i]}, function(results, status) 
    {

        if (status == google.maps.GeocoderStatus.OK) 
        {
            marker[i] = new google.maps.Marker({
            map: map,
            position: results[0].geometry.location});

            listenMarker(marker[i], results[0].formatted_address );
        }

    })  
}

function listenMarker(marker, place)
{
    google.maps.event.addListener(marker, 'click', function(){
            infowindow.setContent("" + place);
            infowindow.open(map, this);});
            }
var地理编码器;
var映射;
函数初始化(){
//从xml文件加载位置
if(window.XMLHttpRequest)
{//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}
其他的
{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
open(“GET”,“person\u city\u clause.xml”,false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
变量文本=
xmlDoc.getElementsByTagName(“文本”);
var位置=[];
var描述=[];

对于(var i=3;i您还需要一个infowindows数组,如果不这样做,infowindow变量将被下一个标记覆盖

它们的内容都是一样的

编辑:只需创建另一个全局数组:

    var locations = [];

    ..code blabla
    if(status == google.maps.GeocoderStatus.OK)
    {
        for(int k = 0; k<results.length;k++{
            locations.push = results[k].geometry.location;
        }
    }
var位置=[];
…代码布拉布拉
if(status==google.maps.GeocoderStatus.OK)
{

对于(int k=0;k尝试在创建事件函数的函数上下文中设置局部变量:

...

var index = i;

if (status == google.maps.GeocoderStatus.OK) {

  ...

  infowindow.setContent("" + index);

这只给了我更多的信息窗口,但并不能解决显示相同内容的问题。显然这与回调函数有关,但我对此没有经验。嗯,所以如果您使用infowindows[I].setContent(“+I”)它不能正常工作?我以前在信息窗口上遇到过问题,当时我自己找不到初始化它们的正确方法。结果把整个信息窗口都扔掉了,在地图外用标签和文本框控件创建了相同的效果:所有我能找到的问题在地理定位时处理这个问题已经存储在一个数组中。一旦我尝试在地理编码中完成整个工作,它就不起作用了。我尝试将标记和信息窗口的创建置于地理编码之外,但我也无法使其起作用。如何从一个位置数组到一个坐标数组?这也会解决我的问题!!对不起,我意思是将一个位置数组(字符串)地理编码为一个坐标数组。Np,试试我的新版本,犯了一些愚蠢的错误。我没有传递位置,而是传递了整个地理信息。。
...

var index = i;

if (status == google.maps.GeocoderStatus.OK) {

  ...

  infowindow.setContent("" + index);