【问题标题】:Google map js api version 3 polygon infowindow on wrong position谷歌地图js api版本3多边形信息窗口位置错误
【发布时间】:2012-06-22 10:57:08
【问题描述】:

我在循环中有这段代码:

      var points = [new google.maps.LatLng(lat1, lon1),
          new google.maps.LatLng(lat2, lon1),
          new google.maps.LatLng(lat2, lon2),
          new google.maps.LatLng(lat1, lon2),
          new google.maps.LatLng(lat1, lon1)
          ];
      bounds.extend(new google.maps.LatLng(lat1, lon1));
      bounds.extend(new google.maps.LatLng(lat2, lon1));
      bounds.extend(new google.maps.LatLng(lat2, lon2));
      bounds.extend(new google.maps.LatLng(lat1, lon2));
      var polygon = new google.maps.Polygon({
                        paths: points,
                        strokeColor: "#f33f00",
                        strokeOpacity: 1,
                        strokeWeight: 1,
                        fillColor: "#ff0000",
                        fillOpacity: 0.2
                    });

    var x1 = Math.min(lon1,lon2);
    var y1 = Math.min(lat1,lat2);
    var x2 = Math.max(lon1,lon2);
    var y2 = Math.max(lat1,lat2);
    var x = x1 + ((x2 - x1) / 2);
    var y = y1 + ((y2 - y1) / 2);
    var cp = new google.maps.LatLng(y,x);
    var infoWindow = new google.maps.InfoWindow();
                    infoWindow.setPosition(cp);
                    infoWindow.setContent(html);

   google.maps.event.addListener(polygon, "click", function() {
                        infoWindow.open(map);
                    });

                    polygon.setMap(map);

我的问题是,当我单击每个多边形时,信息窗口会在所有多边形的相同位置打开。

任何帮助将不胜感激!

【问题讨论】:

    标签: javascript google-maps google-maps-api-3 polygon


    【解决方案1】:

    我所做的是,全局设置地图,将代码块替换为对循环外执行相同工作的函数的调用,如下所示:

    function createPolygon(lat1, lon1, lat2, lon2, html)
    {
         var points = [new google.maps.LatLng(lat1, lon1),
          new google.maps.LatLng(lat2, lon1),
          new google.maps.LatLng(lat2, lon2),
          new google.maps.LatLng(lat1, lon2),
          new google.maps.LatLng(lat1, lon1)
          ];
      bounds.extend(new google.maps.LatLng(lat1, lon1));
      bounds.extend(new google.maps.LatLng(lat2, lon1));
      bounds.extend(new google.maps.LatLng(lat2, lon2));
      bounds.extend(new google.maps.LatLng(lat1, lon2));
      var polygon = new google.maps.Polygon({
                        paths: points,
                        strokeColor: "#f33f00",
                        strokeOpacity: 1,
                        strokeWeight: 1,
                        fillColor: "#ff0000",
                        fillOpacity: 0.2
                    });
    
    var x1 = Math.min(lon1,lon2);
    var y1 = Math.min(lat1,lat2);
    var x2 = Math.max(lon1,lon2);
    var y2 = Math.max(lat1,lat2);
    var x = x1 + ((x2 - x1) / 2);
    var y = y1 + ((y2 - y1) / 2);
    var cp = new google.maps.LatLng(y,x);
    var infoWindow = new google.maps.InfoWindow();
                    infoWindow.setPosition(cp);
                    infoWindow.setContent(html);
    
     google.maps.event.addListener(polygon, "click", function() {
                        infoWindow.open(map);
                    });
    
                    polygon.setMap(map);
    }
    

    【讨论】:

    【解决方案2】:

    您在每个循环中都覆盖了 infoWindow 对象。

    将与 infoWindow(cp,html) 相关的属性存储在多边形对象中,并使用存储的属性在点击函数中调用 setPosition()setContent()

    【讨论】:

    • 嗨!谢谢!我也尝试过这样做:` var infoWindow = new google.maps.InfoWindow({content: html, position: cp}); AND var infoWindow = new google.maps.InfoWindow(); google.maps.event.addListener(polygon, "click", function() { infoWindow.setPosition(cp); infoWindow.setContent(html); infoWindow.open(map); });多边形.setMap(地图); ` 但它们似乎不起作用。
    猜你喜欢
    • 2013-12-11
    • 2013-04-24
    • 2015-01-03
    • 1970-01-01
    • 2016-07-10
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多