Это продолжение по сравнению с post Я сделал несколько дней назад, пытаясь пойти на вызов в новом направлении. Моя цель - когда я нажимаю на маркер, я бы хотел, чтобы источник lat/lng моей полилинии был тем же lat/lng, что и этот маркер. Трюк, с которым я сталкиваюсь, заключается в том, где положить создание строки в мой цикл for моих маркеров, где существует клик, чтобы линия использовала координаты маркера, стих объявленного. Поскольку я объявляю переменные lat/lng вне этой функции, по умолчанию значения по умолчанию следующие: var oLat = 10.1 var oLng = 22.1
, а не значения внутри цикла for. Вот мой текущий цикл:Нарисуйте полилинию с маркера по клику API Google Карт v3
for (var i in points) {
var p = points[i];
var latlng = new google.maps.LatLng(p[1], p[2]);
var marker = new google.maps.Marker({
position: latlng,
icon: points[i][3],
zIndex: p[5],
title: p[0]
});
overviewMarkers.push(marker);
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infowindow.setContent(points[i][6] + '<div id="infopanel">'+
'<input onclick="addLine();" type=button value="Show Routes">'+
'<input onclick="removeLine();" type=button value="Remove Routes"></div>');
infowindow.open(map, marker)
oLat = parseFloat(this.position.lat().toFixed(4))
oLng = parseFloat(this.position.lng().toFixed(4))
}
})(marker, i));
}//end for loop
Я пытался размещения моего кода линии (ниже) после oLng = parseFloat(this.position.lng().toFixed(4))
но моя линия обыкновение рисовать. Если я сохраню свой код линии вне всей функции, он будет рисовать со значениями по умолчанию. Код создания линии (я добавил предупреждение только, чтобы подтвердить, что мой вар будет захватить на клик значение):
var arrayLine=[]
var originPoint = [new google.maps.LatLng(oLat,oLng)];
var destPoint = [new google.maps.LatLng(51.9279723,4.4904063),
new google.maps.LatLng(40.136482, -73.831299),
new google.maps.LatLng(34.0204989,-118.4117325)
];
var lineSymbol = {
path: google.maps.SymbolPath.FORWARD_OPEN_ARROW
};
for (var d in destPoint) {
var t = destPoint[d];
var linePath = new google.maps.Polyline({
path: [originPoint[0],[t][0]],
strokeColor: '#4A484D',
strokeOpacity: 1.0,
strokeWeight: 2,
geodesic: true,
icons: [{
icon: lineSymbol,
offset: '100%',
repeat: '60px'
}]
});
arrayLine.push(linePath)
function setLines(map) {
for (var i = 0; i < arrayLine.length; i++) {
arrayLine[i].setMap(map);
}
}
}
function addLine() {
setLines(map);
alert(parseFloat(oLat));
}
Я попытался посмотреть на complex polyine example что Google предоставляет, но это кажется немного более упрощенным, то что я пытаюсь сделать.
исправить ошибки javascript [рабочая скрипка] (http://jsfiddle.net/x5fajLgn/2/) – geocodezip