谷歌地图,阵列+ GLatLng + GPolyline

时间:2009-11-05 14:21:44

标签: javascript maps

我使用以下代码进行分组并在地图上显示船舶位置列表:

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进行调试,但一切似乎都很好。

如果我手动创建折线,我可以将它们添加到地图中,一切正常。如果我在每个点上创建标记而不是折线,则标记在正确的位置显示正常。

我对此感到有点生气,因为我几乎花了整整一天的时间试图弄清楚到底是怎么回事。有什么想法吗?

3 个答案:

答案 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]);

    }