Я пытался найти именно то, что упомянул в вопросе, но я не смог найти такой пример кода, который может найти / сгенерировать направления от текущего местоположения к указанному месту назначения, используя только широту и долготу (обоих объектов) в качестве основных параметров.
У меня нет никаких других параметров какой-либо сущности (источника или назначения), которые могли бы помочь в создании направлений.
Я сделал этот код до сих пор, а также ранее:
<script>
function initMap() {
var directionsService = new google.maps.DirectionsService;
var directionsDisplay = new google.maps.DirectionsRenderer;
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 7,
center: {lat: 41.85, lng: -87.65}
});
directionsDisplay.setMap(map);
var onChangeHandler = function() {
calculateAndDisplayRoute(directionsService, directionsDisplay);
};
document.getElementById('start').addEventListener('change', onChangeHandler);
document.getElementById('end').addEventListener('change', onChangeHandler);
}
function calculateAndDisplayRoute(directionsService, directionsDisplay) {
directionsService.route({
origin: document.getElementById('start').value,
destination: document.getElementById('end').value,
travelMode: 'DRIVING'
}, function(response, status) {
if (status === 'OK') {
directionsDisplay.setDirections(response);
} else {
window.alert('Directions request failed due to ' + status);
}
});
}
</script>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=[API_Key]&callback=initMap">
</script>
Но для этого кода требуется имя места назначения и имя исходного местоположения, например «st louis, mo» или «oklahoma city, ok», и у меня есть только широта и долгота текущего местоположения и места назначения.
Может ли кто-нибудь руководить этим?
DirectionsRequest принять в качестве параметров в origin
а также destination
3 формата:
LatLng: var myLatLng = new google.maps.LatLng({lat: -34, lng: 151});
LatLngLiteral: {lat: -34, lng: 151}
Место как правило, в качестве запроса «Оклахома-Сити», но могут быть приняты другие форматы.
Вам следует соблюдать к этим форматам, и это будет работать. рекомендую LatLng
формат в вашем случае.
Ссылаться на документация по Google Maps Directions раздел Направления Запросы.
поля
origin
(требуется) указывает начальное местоположение, из которого рассчитываются маршруты. Это значение может быть указано какString
(например, «Чикаго, Иллинойс»), какLatLng
значение или какgoogle.maps.Place
объект. Если вы используетеgoogle.maps.Place
объект, вы можете указать идентификатор места, строка запроса илиLatLng
место нахождения. Вы можете получить идентификаторы мест из сервисов геокодирования, поиска мест и автозаполнения мест в JavaScript API Карт Google. Пример использования идентификаторов мест из автозаполнения мест см. В разделе «Автозаполнение мест и направления».destination
(обязательно) указывает конечное местоположение для расчета направлений. Параметры те же, что и для поля источника, описанного выше.…
Для того, чтобы использовать только широта и долгота (обоих объектов) в качестве основных параметров, использование LatLng ценности.
Сначала добавьте переменные с областью действия вне функций для входов над initMap
функция:
var map, startInput, endInput;
function initMap() {
startInput = document.getElementById('start');
endInput = document.getElementById('end');
Затем при добавлении направлений на карту используйте объекты latLng, как показано ниже, анализируя ввод с помощью String.split () разделить значения широты и долготы на массивы, на которые будут ссылаться при создании объектов LatLng:
var startParts = startInput.value.split(',');
var endParts = endInput.value.split(',');
if (startParts.length > 1 && endParts.length > 1) {
var origin = new google.maps.LatLng(startParts[0], startParts[1]);
var destination = new google.maps.LatLng(endParts[0], endParts[1]);
directionsService.route({
origin: origin,
destination: destination,
...}
И если браузер поддерживает геолокации, это может быть использовано для определения местоположения браузера пользователя:
window.onload = function() {
var startPos;
if (navigator.geolocation) {
var geoSuccess = function(position) {
startPos = position;
document.getElementById('startLat').innerHTML = startPos.coords.latitude;
document.getElementById('startLon').innerHTML = startPos.coords.longitude;
};
var geoError = function(error) {
console.log('Error occurred. Error code: ' + error.code);
// error.code can be:
// 0: unknown error
// 1: permission denied
// 2: position unavailable (error response from location provider)
// 3: timed out
};
navigator.geolocation.getCurrentPosition(geoSuccess, geoError);
}
};
Попробуйте этот фрагмент с пользовательским вводом:
//global variables
var map, startInput, endInput;
function initMap() {
startInput = document.getElementById('start');
endInput = document.getElementById('end');
var directionsService = new google.maps.DirectionsService;
var directionsDisplay = new google.maps.DirectionsRenderer;
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 7,
center: {
lat: 41.85,
lng: -87.65
}
});
directionsDisplay.setMap(map);
var onChangeHandler = function() {
calculateAndDisplayRoute(directionsService, directionsDisplay);
};
document.getElementById('start').addEventListener('change', onChangeHandler);
document.getElementById('end').addEventListener('change', onChangeHandler);
document.getElementById('increment').addEventListener('click', function() {
var endInputParts = endInput.value.split(',');
if (endInputParts.length > 1) {
endInputParts[1] = parseFloat(endInputParts[1]) + 1;
endInput.value = endInputParts.join(',');
onChangeHandler();
}
});
}
function calculateAndDisplayRoute(directionsService, directionsDisplay) {
var startParts = startInput.value.split(',');
var endParts = endInput.value.split(',');
if (startParts.length > 1 && endParts.length > 1) {
var origin = new google.maps.LatLng(startParts[0], startParts[1]);
var destination = new google.maps.LatLng(endParts[0], endParts[1]);
directionsService.route({
origin: origin,
destination: destination,
travelMode: 'DRIVING'
}, function(response, status) {
if (status === 'OK') {
directionsDisplay.setDirections(response);
} else {
window.alert('Directions request failed due to ' + status);
}
});
}
}
/*
* use google maps api built-in mechanism to attach dom events
*/
google.maps.event.addDomListener(window, "load", initMap);
<script src="https://maps.googleapis.com/maps/api/js?v=3"></script>
<input id="start" type="text" value="41.43206,-81.38992" />
<input id="end" type="text" value="41.43206,-88.38992" />
<button id="increment"> To Longitude += 1</button>
<div id="map" style="height: 300px;"></div>