与快速捕捉相结合(GMaps v3)

时间:2012-12-19 11:28:45

标签: javascript google-maps

我在我的数据库中有一些位置(在本例中为4),我试图在地图上显示。有什么比谷歌地图更好的方式,对吧?然而有一个问题;除了位置之外,我的数据库中还保存了一个“is_snapped”,它决定了该位置是否与折线一起被捕捉。

现在我已经为我的Db中的每个位置创建了一个循环功能。给出必须放在地图上的标记(Latlng对象)和一个0或1的捕捉变量(1用于捕捉,0用于未捕捉)。

嗯,这个功能的基础工作。它不会在不需要捕捉的地方捕捉并捕捉它必须被捕捉的地方。然而;如果它被拍了下来,它会给我两条从A到B的线。一条线被拴在路上,而另一条线没有被扯到路上。所以不知何故,一个重复的对象被推入我的“路径”数组。但我似乎无法找到我职能中的故障。

任何人都可以检查一下这里出了什么问题吗?

提前致谢!

function createLines(marker, snap) {
    if (!service) {
        service = new google.maps.DirectionsService();
    }

    if (snap != 0 && snap != 1) {
        snap = 0;
    }

    if (path.length > 0 && snap != 1) {
        path.push(marker);
    }

    if (path.length == 0) {
        path.push(marker);
        poly = new google.maps.Polyline({ map: map });
        poly.setPath(path);
    } else {
        service.route({
            origin: path[path.length - 1],
            destination: marker,
            travelMode: google.maps.DirectionsTravelMode.WALKING
        }, function(result, status) {
            if (status == google.maps.DirectionsStatus.OK) {
                if(snap == 1) {
                    path = path.concat(result.routes[0].overview_path);
                }
                poly.setPath(path);
            }
        });
        distance = google.maps.geometry.spherical.computeLength(path);
    }
    return Math.round(distance);
}

注意:地图正在此功能之前创建,因此它存在,并在正确的位置向我显示标记。只是压缩的折线: - )

为了了解发生了什么,我收录了3张图片,显示了合并的快照/未绑定和分离,以便您可以看到它应该是什么样的,有点......

这是地图,其中两条捕捉线都是非捕捉的(因为代码现在是制作的) http://www.envyum.nl/stupid_map.png

这是省略了捕捉部分的地图(path = path.concat .....) http://www.envyum.nl/stupid_map_wo_snap.png

这是地图中包含已删除部分和未绑定的部分(path.push(marker)) http://www.envyum.nl/stupid_map_w_snap.png

对于那些兴趣,这是调用createLines函数的函数:

function drawMap(locations) {
    if(locations) {
        var markers = [];
        for (var i in locations) {
            loc = locations[i].latlng.split(', ');
            //Create a marker and give it a id(used later on to identify the correct inputfield)
            var markerPos = new google.maps.LatLng(loc[0], loc[1]);
            var mrkr = new google.maps.Marker({
                position: markerPos,
                map: map,
                clickable: true,
                id: locations[i].tripId
            });

            //Create the lines between te markers
            createLines(markerPos, locations[i].is_snapped);
        }
    }
}

0 个答案:

没有答案