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 信息窗口在同一标记处打开!_Javascript_Google Maps_Infowindow - Fatal编程技术网

Javascript 信息窗口在同一标记处打开!

Javascript 信息窗口在同一标记处打开!,javascript,google-maps,infowindow,Javascript,Google Maps,Infowindow,好的,我有一段代码,我从数据库中获取的每个位置都会调用它,问题是每当我点击一个标记时,信息窗口都会显示相应的标记信息,但是信息窗口的位置总是最后添加的标记,在一个螺母壳中,信息是好的,但它不会显示在应该显示的位置 这两个是在映射初始化时声明的,并且是全局的 var infowindow = new google.maps.InfoWindow(); var geocoder=new google.maps.Geocoder 这是剧本 function addRoleMarker(lat,lng

好的,我有一段代码,我从数据库中获取的每个位置都会调用它,问题是每当我点击一个标记时,信息窗口都会显示相应的标记信息,但是信息窗口的位置总是最后添加的标记,在一个螺母壳中,信息是好的,但它不会显示在应该显示的位置

这两个是在映射初始化时声明的,并且是全局的

var infowindow = new google.maps.InfoWindow();
var geocoder=new google.maps.Geocoder
这是剧本

function addRoleMarker(lat,lng,rumbo,codigo,velocidad,nE,referer,utc,fecha)
{
 var myLatLng = new google.maps.LatLng(lat, lng);
var title='No.'+nE+' '+utc;

baseMarker = new google.maps.Marker({
        position: myLatLng,
        map: map,
    title: title,
    zIndex: 1
    });

    google.maps.event.addListener(baseMarker,'click',function(){
            geocoder.geocode({'latLng': myLatLng}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                if (results[0]) {
                switch(rumbo)
                {
                case 0:
                rumbo='N';
                break;  
                case 1:
                rumbo='NE';
                break;
                case 2:
                rumbo='E';
                break;
                case 3:
                rumbo='SE';
                break;
                case 4:
                rumbo='S';
                break;
                case 5:
                rumbo='SO';
                break;
                case 6: 
                rumbo='O';
                break;
                case 7:
                rumbo='NO';
                break;
                }

            var tablaR="<table><tr><td>Fecha:</td></tr><td>"+fecha;
            tablaR+="</td><tr><td>Fecha UTC:</td></tr><td>"+utc;
            tablaR+="</td><tr><td>Velocidad:</td></tr><td>"+velocidad;
            tablaR+="</td><tr><td>Rumbo:</td></tr><td>"+rumbo;
            tablaR+="</td><tr><td>Direccion:</td></tr><td>"+results[0].formatted_address;
            infowindow.setContent(tablaR);
            infowindow.open(map,baseMarker);
                }else{
                  alert("No results found");
                }
            }else{
                alert("Geocoder failed due to: " + status);
              }});});
}
功能添加标记器(lat、lng、rumbo、codigo、velocidad、nE、referer、utc、fecha)
{
var mylatng=new google.maps.LatLng(lat,lng);
var title='No.'+nE+''+utc;
baseMarker=新的google.maps.Marker({
职位:myLatLng,
地图:地图,
标题:标题,,
zIndex:1
});
google.maps.event.addListener(baseMarker,'click',function(){
geocoder.geocode({'latLng':myLatLng},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK){
如果(结果[0]){
开关(rumbo)
{
案例0:
伦波;
打破
案例1:
伦波class='NE';
打破
案例2:
伦波class='E';
打破
案例3:
伦波class='SE';
打破
案例4:
伦波='S';
打破
案例5:
伦波class='SO';
打破
案例6:
伦波='O';
打破
案例7:
伦波说‘不’;
打破
}
var tablaR=“Fecha:”+Fecha;
tablaR+=“Fecha UTC:+UTC;
tablaR+=“Velocidad:”+Velocidad;
tablaR+=“Rumbo:”+Rumbo;
tablaR+=“目录:”+结果[0]。格式化的\u地址;
infowindow.setContent(tablaR);
打开(地图、基线标记);
}否则{
警报(“未发现结果”);
}
}否则{
警报(“地理编码器因“+状态”而失败);
}});});
}
标记的数量取决于根据sql查询获取的数据。这是php脚本

<?
$script="<script type='text/javascript'>";

    for($i=0;$i<count($losDatos);$i++)
    {
    $script.="addRoleMarker(".$losDatos[$i]['latitud'].",".$losDatos[$i]['longitud'].",".$losDatos[$i]['rumbo'].",".$losDatos[$i]['codigo'].",".$losDatos[$i]['velocidad'].",".$losDatos[$i]['numeroEconomico'].",1,'".$losDatos[$i]['utcDate']."','".$losDatos[$i]['localDate']."');";
    }

$script.='</script>';
echo $script;
?>

我需要查看完整的代码以提出建议,但似乎您只将侦听器添加到一个“baseMarker”。因此,您的infoWindow.open(map,baseMarker)在同一个标记处打开。我认为您需要为创建的每个标记添加侦听器。

听起来您有一个典型的谷歌地图范围问题。地图上有多少个标记,您能否通过示例数据输入向我们展示整个代码,以便我们可以帮助您缩小问题范围。标记取决于从sql查询获取的数据!从1到20full code ready,我的想法是一样的,但是每当我调用这个函数时,我都会创建一个不同的HTML表,该表为每个标记显示正确的信息,但是信息窗口总是位于最后一个标记的上方,因此侦听器是ok的。对吗?你现在的行为是,你可以看到所有的标记,但是当你点击任何一个标记时,你会看到关于被点击标记的信息,但是信息窗口会显示在一个特定的标记上?是的,我看到所有标记都位于正确的位置,每个信息窗口都设置了正确的信息,但没有放置到正确的标记上。我想我知道为什么。您声明的baseMarker没有“var”。这意味着baseMarker在javascript中成为全局变量。请尝试使用var声明baseMarker。这取决于为什么要保留baseMarker。您可以做的一件事是在函数外部创建标记数组,并将其传递给addRoleMarker函数。或者在函数内部,用“var”声明标记,然后使该函数返回标记。然后,您将可以访问外部标记。通常应该避免这样声明全局变量,因为这被认为是糟糕的编程实践。