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_Google Maps Api 3 - Fatal编程技术网

Javascript 如何在谷歌地图的多段线上方显示信息窗口?

Javascript 如何在谷歌地图的多段线上方显示信息窗口?,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,这里的问题是,我从数据库中获取纬度和经度信息,并使用“信息窗口”在谷歌地图上绘制多段线,它可以很好地处理标记。然而,“信息窗口”显示在谷歌地图的顶部,尽管我已经设置了它的位置。 我使用的代码如下:- <script type="text/javascript"> function initialize() { var map; var markers = JSON.parse('<%=ConvertDataTa

这里的问题是,我从数据库中获取纬度和经度信息,并使用“信息窗口”在谷歌地图上绘制多段线,它可以很好地处理标记。然而,“信息窗口”显示在谷歌地图的顶部,尽管我已经设置了它的位置。 我使用的代码如下:-

 <script type="text/javascript">


 function initialize()
        {
          var map;

           var markers = JSON.parse('<%=ConvertDataTabletoString() %>');
     var infoWindow = new google.maps.InfoWindow({maxWidth:200,minWidth:200});
           var marker;

           var x=new google.maps.LatLng(16.697000,74.244000);
       var stavanger=new google.maps.LatLng(markers[0].lat1, markers[0].lng1);

         var london=new google.maps.LatLng(markers[0].lat, markers[0].lng);
           var j=0;

           var i=0;
           var points=new Array();
           var points2=new Array();

           var mapProp = {
           center:new google.maps.LatLng(markers[0].lat, markers[0].lng),
           zoom:14,
           mapTypeId:google.maps.MapTypeId.ROADMAP

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

             google.maps.event.addListener(map, "click", function(event)
        {

                var marker = new google.maps.Marker({
                position: event.latLng, 
                 animation: google.maps.Animation.DROP,
                map: map

                });


              document.getElementById("txttolat").value = event.latLng.lat();
             document.getElementById("txttolong").value = event.latLng.lng();

               var pt=event.latLng.lat();
             points[j]=event.latLng.lat();

             points2[j]=event.latLng.lng();
             j=j+1;

              document.getElementById("txtlat").value = points[0];
             document.getElementById("txtlong").value = points2[0];
             //            });

              });

             for (i = 0; i < markers.length; i++) {
             var data = markers[i]

    var stavanger2=new google.maps.LatLng(markers[i].lat1, markers[i].lng1);

         var london2=new google.maps.LatLng(markers[i].lat, markers[i].lng);

              var myTrip=[stavanger2,london2];
               var flightPath=new google.maps.Polyline({




                path:myTrip,
            strokeColor:"#0000FF",
             strokeOpacity:0.8,
             strokeWeight:10,
               map: map,
               title: data.title
                    });
                  // }
                  (function(flightPath, data) {

           google.maps.event.addListener(flightPath, 'click', function(e) {
                 // alert('you clicked polyline');

               infoWindow.setContent(data.description);

                 infoWindow.open(map,flightPath);
                 infoWindow.setPosition(e.latLng);
                 document.getElementById("txtname").value = data.title;

                  document.getElementById("txtlat").value = e.latLng.lat();
                  document.getElementById("txtlong").value = e.latLng.lng();
                     });

                      })(flightPath, data);


                       }
                       }



               google.maps.event.addDomListener(window, 'load', initialize);
                    </script>

函数初始化()
{
var映射;
var markers=JSON.parse(“”);
var infoWindow=new google.maps.infoWindow({maxWidth:200,minWidth:200});
var标记;
var x=新的google.maps.LatLng(16.697000,74.244000);
var stavanger=new google.maps.LatLng(markers[0].lat1,markers[0].lng1);
var london=new google.maps.LatLng(markers[0].lat,markers[0].lng);
var j=0;
var i=0;
var points=新数组();
var points2=新数组();
var mapProp={
中心:新建google.maps.LatLng(标记[0].lat,标记[0].lng),
缩放:14,
mapTypeId:google.maps.mapTypeId.ROADMAP
}; 
var map=new google.maps.map(document.getElementById(“map_canvas”),mapProp);
google.maps.event.addListener(映射,“单击”,函数(事件)
{
var marker=new google.maps.marker({
位置:event.latLng,
动画:google.maps.animation.DROP,
地图:地图
});
document.getElementById(“txttolat”).value=event.latLng.lat();
document.getElementById(“txttolong”).value=event.latLng.lng();
var pt=event.latLng.lat();
点[j]=event.latLng.lat();
points2[j]=event.latLng.lng();
j=j+1;
document.getElementById(“txtlat”).value=points[0];
document.getElementById(“txtlong”).value=points2[0];
//            });
});
对于(i=0;i
您必须更改
单击
飞行路径的事件侦听器

从google api引用中,方法
open()
被定义为

打开(地图?:地图|街景全景,锚?:MVCObject)
在给定地图上打开此信息窗口。或者,信息窗口可以与锚关联。在核心API中,唯一的锚点是Marker类。但是,定位点可以是任何MVCObject,该MVCObject公开了LatLng position特性和用于计算像素偏移的点定位点特性(可选)(请参见InfoWindowOptions)。锚点是从锚点位置到信息窗口顶端的偏移

您使用了
flightPath
(多段线)作为不提供位置属性的锚点

所以,首先,你得到点击的位置,然后打开地图上的信息窗口:

infoWindow.setPosition(e.latLng);
infoWindow.open(map);

// infoWindow.open(map,flightPath);
// infoWindow.setPosition(e.latLng);

检查。注意:我不得不伪造JSON.parse()方法来获取一些数据。

嘿,谢谢,但它仍然显示相同的结果,而且信息窗口上也没有显示“关闭”按钮,我真的不明白该怎么办?嘿,非常感谢你,我真的很感谢你抽出时间来做这个示例。谢谢:)