在 Google 地图中绘制多条折线 JavaScript API
Drawing Multiple Polylines in Google Maps JavaScript API
我发布这个问题是因为我发现的大部分问题都没有真正回答我的问题,我终于弄明白了。希望这对其他人有所帮助,以便更快地解决问题。
-编辑-
我已经编辑了这个问题,希望它对遇到这个问题的人更有用。
-问题-
我无法将多条折线加载到 google 地图中。我已尝试将数组传递给新的 google.maps.Polyline 函数,如下所示;
var flightPlanCoordinates = [
{ lat: 41.7171899900261, lng: -85.002969973285587 },
{ lat: 41.716339720601695, lng: -85.00356011920411 },
];
var flightPlanCoordinates2 = [
{ lat: 44, lng: -89 },
{ lat: 49, lng: -89 },
];
var arrayOfFlightPlans = [flightPlanCoordinates, flightPlanCoordinates2];
var flightPath = new google.maps.Polyline({
path: arrayOfFlightPlans,
geodesic: true,
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWeight: 4,
});
flightPath.setMap(map);
那没有用,导致了错误 "InvalidValueError: at index 0: not a LatLng or LatLngLiteral: in property lat: not a number"
我的下一次尝试包括尝试如下的 for 循环(注意 lat lng 数组没有从上面的代码片段中改变);
for (let i = 0; i < 2; i++) {
var flightPath = new google.maps.Polyline({
path: arrayOfFlightPlans,
geodesic: true,
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWeight: 4,
id: segID
});
}
flightPath.setMap(map);
这有效但没有提供我希望的结果。 lat lng 输出是我数组中的最后一组坐标。我究竟做错了什么?循环不应该在 for 循环的每次迭代中建立一条新的折线吗?
var map;
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: 41.713, lng: -85.003},
zoom: 16
});
var flightPlanCoordinates = [
{ lat: 41.7171899900261, lng: -85.002969973285587 },
{ lat: 41.716339720601695, lng: -85.00356011920411 },
{ lat: 41.715420123340095, lng: -85.003969783778473 },
{ lat: 41.713850219112373, lng: -85.0043800221203 },
{ lat: 41.709869880890324, lng: -85.004809740676933 },
{ lat: 41.709570224086633, lng: -85.004860160268152 },
];
var flightPlanCoordinates2 = [
{ lat: 42, lng: -86 },
{ lat: 42, lng: -87},
{ lat: 42, lng: -88 },
{ lat: 43, lng: -88 },
{ lat: 44, lng: -89 },
{ lat: 49, lng: -89 },
];
var arrayOfFlightPlans = [flightPlanCoordinates, flightPlanCoordinates2];
//Loops through all polyline paths and draws each on the map.
for (let i = 0; i < 2; i++) {
var flightPath = new google.maps.Polyline({
path: arrayOfFlightPlans[i],
geodesic: true,
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWeight: 4,
});
flightPath.setMap(map);
}
}
建立你的坐标并将它们放入一个数组中。使用 for 循环,我们可以在每个循环上建立一个新的折线路径。我遗漏的部分是在 for 循环的末尾,每次都需要绘制路径,如下所示(一个公认的愚蠢错误,但直到今天早上我上班才注意到)。
flightPath.setMap(map);
-编辑-
为了提供进一步的解释,我的想法是在 for 循环的每次迭代中,一个新的 google.maps.Polyline 对象被实例化,我是正确的,但这并不意味着在地图上绘制了一条新的折线。只有当您发出上面代码中所示的 setMap(map) 命令时,折线才会添加到地图中。这意味着,如果我们想要从数组中的每个元素创建一条新的多段线,我们需要在循环的每次迭代中将每条多段线添加到地图中。
我发布这个问题是因为我发现的大部分问题都没有真正回答我的问题,我终于弄明白了。希望这对其他人有所帮助,以便更快地解决问题。
-编辑- 我已经编辑了这个问题,希望它对遇到这个问题的人更有用。
-问题- 我无法将多条折线加载到 google 地图中。我已尝试将数组传递给新的 google.maps.Polyline 函数,如下所示;
var flightPlanCoordinates = [
{ lat: 41.7171899900261, lng: -85.002969973285587 },
{ lat: 41.716339720601695, lng: -85.00356011920411 },
];
var flightPlanCoordinates2 = [
{ lat: 44, lng: -89 },
{ lat: 49, lng: -89 },
];
var arrayOfFlightPlans = [flightPlanCoordinates, flightPlanCoordinates2];
var flightPath = new google.maps.Polyline({
path: arrayOfFlightPlans,
geodesic: true,
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWeight: 4,
});
flightPath.setMap(map);
那没有用,导致了错误 "InvalidValueError: at index 0: not a LatLng or LatLngLiteral: in property lat: not a number"
我的下一次尝试包括尝试如下的 for 循环(注意 lat lng 数组没有从上面的代码片段中改变);
for (let i = 0; i < 2; i++) {
var flightPath = new google.maps.Polyline({
path: arrayOfFlightPlans,
geodesic: true,
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWeight: 4,
id: segID
});
}
flightPath.setMap(map);
这有效但没有提供我希望的结果。 lat lng 输出是我数组中的最后一组坐标。我究竟做错了什么?循环不应该在 for 循环的每次迭代中建立一条新的折线吗?
var map;
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: 41.713, lng: -85.003},
zoom: 16
});
var flightPlanCoordinates = [
{ lat: 41.7171899900261, lng: -85.002969973285587 },
{ lat: 41.716339720601695, lng: -85.00356011920411 },
{ lat: 41.715420123340095, lng: -85.003969783778473 },
{ lat: 41.713850219112373, lng: -85.0043800221203 },
{ lat: 41.709869880890324, lng: -85.004809740676933 },
{ lat: 41.709570224086633, lng: -85.004860160268152 },
];
var flightPlanCoordinates2 = [
{ lat: 42, lng: -86 },
{ lat: 42, lng: -87},
{ lat: 42, lng: -88 },
{ lat: 43, lng: -88 },
{ lat: 44, lng: -89 },
{ lat: 49, lng: -89 },
];
var arrayOfFlightPlans = [flightPlanCoordinates, flightPlanCoordinates2];
//Loops through all polyline paths and draws each on the map.
for (let i = 0; i < 2; i++) {
var flightPath = new google.maps.Polyline({
path: arrayOfFlightPlans[i],
geodesic: true,
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWeight: 4,
});
flightPath.setMap(map);
}
}
建立你的坐标并将它们放入一个数组中。使用 for 循环,我们可以在每个循环上建立一个新的折线路径。我遗漏的部分是在 for 循环的末尾,每次都需要绘制路径,如下所示(一个公认的愚蠢错误,但直到今天早上我上班才注意到)。
flightPath.setMap(map);
-编辑- 为了提供进一步的解释,我的想法是在 for 循环的每次迭代中,一个新的 google.maps.Polyline 对象被实例化,我是正确的,但这并不意味着在地图上绘制了一条新的折线。只有当您发出上面代码中所示的 setMap(map) 命令时,折线才会添加到地图中。这意味着,如果我们想要从数组中的每个元素创建一条新的多段线,我们需要在循环的每次迭代中将每条多段线添加到地图中。