Здесь у меня есть функция route();
function route() {
// Clear any previous route boxes from the map
clearBoxes();
// Convert the distance to box around the route from miles to km
distance = parseFloat(document.getElementById("distance").value) * 1.609344;
var request = {
origin: document.getElementById("from").value,
destination: document.getElementById("to").value,
travelMode: google.maps.DirectionsTravelMode.DRIVING
}
if (status == google.maps.DirectionsStatus.OK) {
directionsRenderer.setDirections(result);
var route = response.routes[0];
startLocation = new Object();
endLocation = new Object();
var path = response.routes[0].overview_path;
var legs = response.routes[0].legs;
for (i=0;i<legs.length;i++) {
if (i == 0) {
startLocation.latlng = legs[i].start_location;
startLocation.address = legs[i].start_address;
}
endLocation.latlng = legs[i].end_location;
endLocation.address = legs[i].end_address;
}
}
// Make the directions request
directionService.route(request, function(result, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsRenderer.setDirections(result);
// Box around the overview path of the first route
var path = result.routes[0].overview_path;
var boxes = routeBoxer.box(path, distance);
drawBoxes(boxes);
} else {
alert("Directions query failed: " + status);
}
});
}
эта функция создает направление маршрута между двумя местами и помещает 2 маркера на карту (маркер начальной точки и маркер конечной точки)
Теперь я хочу использовать эту позицию маркера в другой функции и показать в console.log, чтобы узнать, что происходит с моим кодом.
Я попробую:
console.log(startLocation.latlng);
но затем я получаю консоль:
ReferenceError: startLocation is not defined
get stack: function () { [native code] }
message: "startLocation is not defined"
set stack: function () { [native code] }
__proto__: Error
Как я могу показать эту начальную и конечную широту, данные о долготе в глобальной переменной для использования в других функциях?
ОБНОВЛЕНИЕ: ЧТО Я ТОЧНО НУЖДАЮТСЯ, ЧТОБЫ ПОЛУЧИТЬ ПОЛОЖЕНИЕ УЖЕ СОЗДАННЫХ МАРКЕРОВ С ФУНКЦИОНАЛЬНЫМ МАРШРУТОМ() КАК ДЕЛАТЬ:
function route() {
// Clear any previous route boxes from the map
clearBoxes();
// Convert the distance to box around the route from miles to km
distance = parseFloat(document.getElementById("distance").value) * 1.609344;
var request = {
origin: document.getElementById("from").value,
destination: document.getElementById("to").value,
travelMode: google.maps.DirectionsTravelMode.DRIVING
}
// Make the directions request
directionService.route(request, function(result, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsRenderer.setDirections(result);
// Box around the overview path of the first route
var path = result.routes[0].overview_path;
var boxes = routeBoxer.box(path, distance);
drawBoxes(boxes);
} else {
alert("Directions query failed: " + status);
}
});
}
Обычно это не очень хорошая идея использовать глобальные переменные на любом языке программирования, включая javascript. В идеале вы должны объявить переменные, которые хотите получить доступ как внутри вашей функции, так и в других функциях внешней области.
Например, скажем, ваш код выглядит так.
var valueOne;
function setValue(){
valueOne = 3;
}
function readValue(){
console.log(valueOne);
}
setValue();
readValue();
Будет записывать "3", только если setValue вызывается перед readValue. В этом случае вы должны быть на 100% уверены, что переменная объявлена в области, содержащей обе функции, и что они вызываются в этом порядке.
Другим способом, адаптирующим ваш собственный код, было бы использовать window.startLocation, window.endLocation и т.д., И это приложит ваши переменные к объекту window, сделав их доступными по всему миру. По умолчанию в javascript с использованием переменной без добавления var
(var startLocation
) следует сделать ее глобальной, но если она не работает, вы можете попробовать напрямую подключить ее к объекту окна. В любом случае, вы должны убедиться, что функция, которая устанавливает значения, которые вы хотите использовать для использования в другой функции, вызывается перед другой, если это не значение, очевидно, не будет установлено.
startLocation - это локальная переменная для этой функции. Вам нужно вернуть его здесь, чтобы получить доступ к другой функции. Или используйте класс. Прочтите любую стандартную книгу на javascript. Вы также можете сделать его глобальным, но я не рекомендую его.