我的数据库中有一些位置(在本例中为 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.concat .....) http://www.envyum.nl/stupid_map_wo_snap.png
这是带有捕捉部分和未捕捉部分的地图(路径.push(标记)) 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);
}
}
}