【发布时间】: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