Я делаю приложение с API карт google, у которого есть JSON с координатами маркера. Затем я рисую полилинии между маркерами. Я также реализовал функцию с событием onclick, которое создает новый маркер внутри полилинии. Этот маркер должен отображать информацию о предыдущем маркере в полилинии (один из них был включен JSON, а не щелчок). Но я не знаю, как взять предыдущую вершину (маркер) выбранной полилинии.Карты Google: выберите предыдущий маркер на полилинии
Код:
(function() {
window.onload = function() {
var options = {
zoom: 3,
center: new google.maps.LatLng(37.09, -95.71),
mapTypeId: google.maps.MapTypeId.HYBRID,
noClear: true,
panControl: true,
scaleControl: false,
streetViewControl:false,
overviewMapControl:false,
rotateControl:false,
mapTypeControl: true,
zoomControl: false,
};
var map = new google.maps.Map(document.getElementById('map'), options);
// JSON
$.getJSON("loc.js", function(json) {
console.log(json);
});
//Marker type
var markers = [];
var arr = [];
var pinColor = "FE7569";
var pinImage = new google.maps.MarkerImage("http://labs.google.com/ridefinder/images/mm_20_red.png" + pinColor,
new google.maps.Size(21, 34),
new google.maps.Point(0,0),
new google.maps.Point(10, 34));
// JSON loop
for (var i = 0, length = json.length; i < length; i++) {
var data = json[i],
latLng = new google.maps.LatLng(data.lat, data.lng);
arr.push(latLng);
// Create markers
var marker = new google.maps.Marker({
position: latLng,
map: map,
icon: pinImage,
});
infoBox(map, marker, data);
//Polylines
var flightPath = new google.maps.Polyline({
path: json,
geodesic: true,
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWeight: 2,
map:map
});
infoPoly(map, flightPath, data);
//Calculate polylines distance
google.maps.LatLng.prototype.kmTo = function(a){
var e = Math, ra = e.PI/180;
var b = this.lat() * ra, c = a.lat() * ra, d = b - c;
var g = this.lng() * ra - a.lng() * ra;
var f = 2 * e.asin(e.sqrt(e.pow(e.sin(d/2), 2) + e.cos(b) * e.cos
(c) * e.pow(e.sin(g/2), 2)));
return f * 6378.137;
}
google.maps.Polyline.prototype.inKm = function(n){
var a = this.getPath(n), len = a.getLength(), dist = 0;
for (var i=0; i < len-1; i++) {
dist += a.getAt(i).kmTo(a.getAt(i+1));
}
return dist;
}
}
function infoBox(map, marker, data) {
var infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(marker, "click", function(e) {
salta(data.tm);
});
(function(marker, data) {
google.maps.event.addListener(marker, "click", function(e) {
salta(data.tm);
});
})(marker, data);
}
//Create onclick marker on the polyline
function infoPoly(map, flightPath, data){
google.maps.event.addListener(flightPath, 'click', function(event) {
mk = new google.maps.Marker({
map: map,
position: event.latLng,
});
markers.push(mk);
map.setZoom(17);
map.setCenter(mk.getPosition());
});
}
function drawPath() {
var coords = [];
for (var i = 0; i < markers.length; i++) {
coords.push(markers[i].getPosition());
}
flightPath.setPath(coords);
}
// Fit these bounds to the map
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < arr.length; i++) {
bounds.extend(arr[i]);
}
map.fitBounds(bounds);
//dist polylines
distpoly = flightPath.inKm();
distpolyround = Math.round(distpoly);
};
})();
Если я нажимаю на синюю стрелку, создать маркер на этой точке полилинии. Я, что маркер, принимает значения предыдущего.
Это немного трудно понять концепцию. Не могли бы вы предоставить несколько скриншотов и, возможно, разместить больше своего кода ?! Вещи, которые я не получаю - вы создаете полилинию между двумя маркерами - одна находится в позиции щелчка. Где второй? А также - что это значит? - кто-то взял JSON_. Кроме того, вы должны просто создать глобальную переменную, которая будет отслеживать последнюю. Вы просто сохраните последнюю ссылку. –
Если вы дали больше кода, я мог бы объяснить, как это сделать –
Отредактировано: код сейчас, он завершен. Я пытаюсь лучше объяснить свою проблему. У меня есть JSON с latLng coodains. С этими координатами я создаю маркеры, а между ними - полилинии. Затем я создаю новый маркер (onclick) в некоторой точке внутри полилинии (между двумя маркерами, которые содержат координаты и другие данные). И проблема: мне нужен этот новый маркер (маркер onclick), берет содержащуюся информацию о предыдущем маркере. Это потому, что на карте не хватает путевых точек. – Andrew