#google-maps #google-maps-api-3
#javascript #google-карты #google-maps-api-3
Вопрос:
У меня есть широта и долгота для 2 точек в базе данных, я хочу, чтобы моя карта Google отображала маршрут из точки A в точку B…
Точно так же, как мы видим здесь (направления Google Maps)
Как нарисовать эту линию направления на карте?
Ответ №1:
Используйте службу маршрутов Google Maps API v3. Это в основном то же самое, что и directions API, но красиво упакованный в Google Maps API, который также предоставляет удобный способ простого отображения маршрута на карте.
Информацию и примеры о отображении маршрута directions на карте можно найти в разделе rendering directionsдокументации Google Maps API v3.
Комментарии:
1. @Tomik возможно ли, чтобы код делал снимок изображения после того, как линия была нарисована?
2. Пожалуйста, посмотрите на второй пример: там есть код 🙂
Ответ №2:
Использование Javascript
Я создал рабочую демонстрационную версию, которая показывает, как использовать службу навигации Google Maps API на Javascript через
DirectionsService
объект для отправки и получения запросов направленияDirectionsRenderer
объект для отображения возвращаемого маршрута на карте
function initMap() {
var pointA = new google.maps.LatLng(51.7519, -1.2578),
pointB = new google.maps.LatLng(50.8429, -0.1313),
myOptions = {
zoom: 7,
center: pointA
},
map = new google.maps.Map(document.getElementById('map-canvas'), myOptions),
// Instantiate a directions service.
directionsService = new google.maps.DirectionsService,
directionsDisplay = new google.maps.DirectionsRenderer({
map: map
}),
markerA = new google.maps.Marker({
position: pointA,
title: "point A",
label: "A",
map: map
}),
markerB = new google.maps.Marker({
position: pointB,
title: "point B",
label: "B",
map: map
});
// get route from A to B
calculateAndDisplayRoute(directionsService, directionsDisplay, pointA, pointB);
}
function calculateAndDisplayRoute(directionsService, directionsDisplay, pointA, pointB) {
directionsService.route({
origin: pointA,
destination: pointB,
travelMode: google.maps.TravelMode.DRIVING
}, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
} else {
window.alert('Directions request failed due to ' status);
}
});
}
initMap();
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
#map-canvas {
height: 100%;
width: 100%;
}
<script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
<div id="map-canvas"></div>
Также в Jsfiddle: http://jsfiddle.net/user2314737/u9no8te4
Использование веб-сервисов Google Maps
Вы можете использовать веб-сервисы, используя API_KEY, выдающий запрос, подобный этому:
API_KEY можно получить в консоли разработчика Google с квотой в 2500 бесплатных запросов в день.
Запрос может возвращать результаты в формате JSON или XML, которые можно использовать для рисования пути на карте.
Официальная документация для веб-сервисов, использующих Google Maps Directions API, находится здесь
Комментарии:
1. Привет, я использую этот код, и он работает нормально, но я хочу добавить еще один маркер A в C с другим направлением, я пробую много способов, но не работает
2. Я довольно новичок в Google Maps API, он работает для меня, но как я могу определить расстояние с маршрутом?
3. @Sarz взгляните на эту другую демонстрацию, которую я сделал jsfiddle.net/user2314737/fLogwsff
Ответ №3:
В вашем случае здесь представлена реализация с использованием службы маршрутов.
function displayRoute() {
var start = new google.maps.LatLng(28.694004, 77.110291);
var end = new google.maps.LatLng(28.72082, 77.107241);
var directionsDisplay = new google.maps.DirectionsRenderer();// also, constructor can get "DirectionsRendererOptions" object
directionsDisplay.setMap(map); // map should be already initialized.
var request = {
origin : start,
destination : end,
travelMode : google.maps.TravelMode.DRIVING
};
var directionsService = new google.maps.DirectionsService();
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
}
});
}
Комментарии:
1. Для полноты добавьте это в код: var DirectionsService = new google.maps. DirectionsService();
2. Спасибо @Dabbler, я отредактировал, можете редактировать, если увидите ошибки в ответах.
3. возможно ли, чтобы код делал снимок изображения после того, как линия была нарисована?
4. Я не уверен, предоставляет ли «служба маршрутов» такую функциональность ((
5. хороший ответ! Тем не менее, при многократном нажатии на направления продукт B указывает на каждое нажатие — как вы сбрасываете маршрут / маркеры? 🙂
Ответ №4:
// First Initiate your map. Tie it to some ID in the HTML eg. 'MyMapID'
var map = new google.maps.Map(
document.getElementById('MyMapID'),
{
center: {
lat: Some.latitude,
lng: Some.longitude
}
}
);
// Create a new directionsService object.
var directionsService = new google.maps.DirectionsService;
directionsService.route({
origin: origin.latitude ',' origin.longitude,
destination: destination.latitude ',' destination.longitude,
travelMode: 'DRIVING',
}, function(response, status) {
if (status === google.maps.DirectionsStatus.OK) {
var directionsDisplay = new google.maps.DirectionsRenderer({
suppressMarkers: true,
map: map,
directions: response,
draggable: false,
suppressPolylines: true,
// IF YOU SET `suppressPolylines` TO FALSE, THE LINE WILL BE
// AUTOMATICALLY DRAWN FOR YOU.
});
// IF YOU WISH TO APPLY USER ACTIONS TO YOUR LINE YOU NEED TO CREATE A
// `polyLine` OBJECT BY LOOPING THROUGH THE RESPONSE ROUTES AND CREATING A
// LIST
pathPoints = response.routes[0].overview_path.map(function (location) {
return {lat: location.lat(), lng: location.lng()};
});
var assumedPath = new google.maps.Polyline({
path: pathPoints, //APPLY LIST TO PATH
geodesic: true,
strokeColor: '#708090',
strokeOpacity: 0.7,
strokeWeight: 2.5
});
assumedPath.setMap(map); // Set the path object to the map
Ответ №5:
Используйте directions API.
Выполните вызов ajax, т.Е.
https://maps.googleapis.com/maps/api/directions/json?parameters
а затем проанализировать ответ
Комментарии:
1. возможно ли, чтобы код делал снимок изображения после того, как линия была нарисована?
Ответ №6:
Я использую всплывающее окно, чтобы показать карту в новом окне. Я использую следующий URL
https://www.google.com/maps?z=15amp;daddr=LATITUDE,LONGITUDE
Фрагмент HTML
<a target='_blank' href='https://www.google.com/maps?z=15amp;daddr=${location.latitude},${location.longitude}'>Calculate route</a>