我使用以下代码进行分组并在地图上显示船舶位置列表:
function configure_ship_polylines() {
var shipPoints = new Array();
// Group positions by ship
for (var ScenarioPositionID in __data['scenarioPositions']) {
var scenarioPosition = __data['scenarioPositions'][ScenarioPositionID];
var key = "ShipID_" + scenarioPosition.ShipID;
// Initialize if necessary
if (shipPoints[key] == null) {
shipPoints[key] = new Array();
}
var latLong = new GLatLng(scenarioPosition.Latitude, scenarioPosition.Longitude);
// Append coordinates
shipPoints[key].push(latLong);
}
// Loop through the grouped coordinates and add to map
for (var key in shipPoints) {
var points = shipPoints[key];
var ShipID = key.substring(7);
// Only add polygons with points.length > 1
if (points.length > 1) {
var shipPolyline = new GPolyline(points);
//alert("Adding polyline: " + shipPolyline + " for ship: " + ShipID + " " + points + " " + typeof points);
__mapItems['shipPolylines'][key] = shipPolyline;
__map.addOverlay(shipPolyline);
}
}
}
在地图上只显示一条折线。其余的是不可见的或根本没有添加(我不太确定如何调试谷歌地图找出)。我一遍又一遍地使用firebug进行调试,但一切似乎都很好。
如果我手动创建折线,我可以将它们添加到地图中,一切正常。如果我在每个点上创建标记而不是折线,则标记在正确的位置显示正常。
我对此感到有点生气,因为我几乎花了整整一天的时间试图弄清楚到底是怎么回事。有什么想法吗?
答案 0 :(得分:1)
从您的代码中,您看起来每个shipPoints [key]添加一个GLatLng,因此您永远不会创建足够的点来创建一条线。在第一个循环中,您可以:
shipPoints[key].push(latLong);
在你的第二个循环中你做
// points is a latlong
var points = shipPoints[key];
// create a polyline using one latlng
var shipPolyline = new GPolyline(points);
// add polyline to map
__map.addOverlay(shipPolyline);
但是,如果您的目标是从所有点中制作单个折线,则需要创建一个包含多个GLatLng的数组,然后在循环结束后创建一个GPolyline。然后将该单一折线添加到地图中。
顺便说一句,你可以在一个循环中完成整个事情。
答案 1 :(得分:0)
您是否尝试过查看javascript错误控制台(在Firefox中使用ctrl + shift + j)? 我注意到的一件事是你使用for-in循环迭代数组,这通常不是在javascript中完成的。如果您使用的是更改Array.prototype的javascript库,则for-in循环将中断(使用索引进行迭代)。
您是否还尝试在添加叠加后调用polyline.show()方法?
答案 2 :(得分:0)
它可能与基于变量shipPolyline的所有折线有关,并且由于某种原因所有都引用相同的初始数据。试试这个第二个循环:
// Loop through the grouped coordinates and add to map
for (var key in shipPoints) {
var points = shipPoints[key];
var ShipID = key.substring(7);
// Only add polygons with points.length > 1
if (points.length > 1) {
//alert("Adding polyline: " + shipPolyline + " for ship: " + ShipID + " " + points + " " + typeof points);
__mapItems['shipPolylines'][key] = new GPolyline(points);
__map.addOverlay(__mapItems['shipPolylines'][key]);
}