【问题标题】:GoogleMaps V3 Only Displays 1 PolygonGoogleMaps V3 仅显示 1 个多边形
【发布时间】:2012-08-18 12:03:52
【问题描述】:

有一个网页,显示来自许多来源的天气图。你选择你的来源,图表的轮廓出现在谷歌地图上。 (请参阅http://www.geoffschultz.org/weather_map.php Weather Charts/GMDSS/Forecasts - 应该绘制 3 个多边形)到目前为止,所有图表都是矩形的,但我只是遇到了对非矩形图表的需求。我在编写 js 时考虑到了这一点,但我感到很困惑,因为只显示了最后绘制的多边形。关于多个多边形,我有什么遗漏吗?

代码很简单。它得到一个边界框坐标数组。对于简单的矩形,数组元素看起来像“-31,-32|2,25”,而对于多边形,它只有更多的坐标,用“|”分隔。如果有 2 个坐标,我画一个矩形,否则我画一个多边形,用第一个点关闭它。

我做错了什么,因为它适用于矩形?

-- 杰夫

for (i in bb[selValue])
    {
    bb_lat_long = bb[selValue][i]["bb_lat_long"].split("|");
    if (bb_lat_long.length == 2) //Rectangle
        {
        lat_long = bb_lat_long[0].split(",");
        sw = new google.maps.LatLng(lat_long[0], lat_long[1]);
        lat_long = bb_lat_long[1].split(",");
        ne = new google.maps.LatLng(lat_long[0], lat_long[1]);
        bounds = new google.maps.LatLngBounds(sw, ne);
        bounding_box = new google.maps.Rectangle({map: map, bounds: bounds, fillOpacity: 0.05, strokeWeight: 1});
        }
    else // polygon
        {   
        poly_lat_long.length = 0;
        for (j = 0; j < bb_lat_long.length; j++)
            {
            lat_long = bb_lat_long[j].split(",");
            poly_lat_long.push(new google.maps.LatLng(lat_long[0], lat_long[1]));
            }
        lat_long = bb_lat_long[0].split(","); 
        poly_lat_long.push(new google.maps.LatLng(lat_long[0], lat_long[1])); // close polygon with 1st point
        bounding_box = new google.maps.Polygon({map: map, paths: poly_lat_long, fillOpacity: 0.05, strokeWeight: 1});
        }

    }

【问题讨论】:

  • 可能需要说一下bb[]sel_value是什么。顺便说一句,拆分字符串会产生字符串,您应该在使用LatLng() 等中的值之前先parseFloat,因为它们应该是数字。如果您使用指定数字的字符串,可能会发生奇怪的事情。
  • bb[] 是一个边界框数组。 [selvalue] 选择边界框的类型。 bb[selValue][i]["bb_lat_long"] 包含一个如上所述的字符串,如“-31,-32|2,25”,对于多边形,它只有更多的坐标,由“|”分隔。所有这些都有效。我可以通过 firebug 单步执行代码并查看 LatLng 和 Polygon 的正确值。我看到它创建了多个(在本例中为 3 个)多边形,但只显示了最后一个。如果我从 bb 数组中删除最后一个多边形,则会显示新的最后一个多边形,等等。
  • 哦,我添加了 parseFloat 没有任何变化。
  • 你有多边形的 bb[] 例子吗?还是指向显示问题的地图的链接或显示问题的 jsfiddle?

标签: javascript maps polygon


【解决方案1】:

我的怀疑是它与重新使用新多边形中的路径有关(您最终会得到多个多边形,只是所有的都是相同的,也许如果您在本地声明 poly_lat_long(使用 var),或者一个 createPolygon 函数,它将在路径上获得函数闭包。

我之前在使用poly_lat_long.length = 0; 清除路径数组时看到过这种行为 而不是creating a new array (poly_lat_long = [])

Thread from the Google Maps API v3 group discussing similar problem

【讨论】:

  • 叮...叮...叮...我们赢了!我从来不知道这可能是个问题。非常感谢你!我永远不会找到这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
  • 2016-01-07
  • 1970-01-01
  • 2013-12-07
  • 1970-01-01
相关资源
最近更新 更多