Я создаю веб-приложение Flask, которое использует API карт Google. В настоящее время у меня есть JS-запрос к серверной части flask для получения результатов навигации, используя ссылку на библиотеку Python Googlemaps для расчета маршрута между двумя точками. Я установил альтернативы = True, чтобы получить несколько маршрутов, и теперь мне интересно, как использовать эти объекты маршрута для создания пользовательского URL-адреса карт Google, который откроет приложение Google Maps с выбранным маршрутом.
Все решения, которые я видел, используют здесь URL-адреса карт, которые выглядят примерно так: https://www.google.com/maps/dir/?api=1¶meters для запроса маршрутов, но, похоже, это отправляет новый запрос расчета маршрутов на Гугл и навигация в приложение «Карты» с запросом нового маршрута, а это не то, что мне нужно. Я хочу, чтобы он открывал карты Google в режиме навигации по маршруту, который я уже запросил у Google и нажал на него в своем приложении. Я знаю, что навигационные ссылки можно получить с помощью dir_action=navigate, но я хочу, чтобы ссылка работала с маршрутом, по которому я щелкнул в моем приложении.
Похоже, так и должно быть. возможно, при обычном использовании карт Google я могу запросить маршрут в режиме реального времени, щелкнуть один из вариантов маршрута, создать ссылку для этого конкретного маршрута и отправить ее куда-нибудь еще, как это, очевидно, ссылки чувствительны ко времени, но такого рода кажется, что это уже возможно. Интересно, не подхожу ли я к этой проблеме неправильным путем и следует ли мне полностью использовать разные фреймворки, но до сих пор они хорошо работали для меня в этом проекте, поэтому я хотел бы продолжать использовать их, если это возможно.
Я использую функцию decode_polyline из API Googlemaps, чтобы отправить широту и длину полилинии маршрута во внешний интерфейс, а затем добавил прослушиватель, который отображает данные маршрута в модальном режиме, когда полилиния нажата включено.
Вот соответствующий JS
async function requestRoutes(start, end, waypoints = []) {
try {
const response = await fetch('/compute-route', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ start, end, waypoints })
});
if (!response.ok) {
throw new Error('Failed to fetch route data');
}
const routeData = await response.json();
if (routeData.error) {
console.error('Error from server:', routeData.error);
alert('Error calculating route. Please check input.');
} else {
//console.log('Route data:', routeData);
curRouteData.push(routeData);
}
} catch (error) {
console.error('Error:', error);
alert('An error occurred while fetching the route.');
}
}
function displayRoutesOnMap(routeData) {
//console.log(routeData)
curRouteData[0].forEach((route, index) => {
const polyline = new google.maps.Polyline({
path: route.overview_polyline,
strokeColor: index === 0 ? '#00FF00' : index===1 ? '#0000FF' :'#FF0000',
strokeOpacity: 0.7,
strokeWeight: 4,
map: map
});
polyline.addListener('click', () => {
showRouteInfo(route);
});
});
}
function showRouteInfo(route) {
const routeDetails = document.getElementById('routeDetails');
//console.log(route)
routeDetails.innerHTML = '';
route.legs.forEach(leg => {
routeDetails.innerHTML += `${leg.start_address} to ${leg.end_address} : ${leg.steps.length} steps.`
// more route details added
});
const mapsLink = document.getElementById("googleMapsButton")
mapsLink.href = null; // I want help here if possible
const routeModal = new bootstrap.Modal(document.getElementById('routeModal'));
routeModal.show();
}
А вот Python, соответствующий маршруту вычислений:
@app.route('/compute-route', methods=['POST'])
def compute_route():
data = request.get_json()
start = data.get('start')
end = data.get('end')
directions_result = gmaps.directions(start, end, mode='driving', alternatives=True)
for item in directions_result:
item['overview_polyline'] = convert.decode_polyline(item['overview_polyline']['points'])
return directions_result
Весь мой код работает так, как я ожидал, маршрут правильно рассчитывается и отображается на карте из полилинии, а каждый прослушиватель полилиний позволяет мне видеть информацию для маршрут, на который нажали, теперь я просто не знаю, как создать ссылку на карты, которая не просто полностью повторно отправляет навигационный запрос в Google.
Я вижу старое решение, использующее DirectionsRenderer Возражайте здесь, и я пробовал это, но я Не могу заставить объект DirectionsRenderer отображать маршруты из ответов серверной части API Python, мне удается только вручную отображать ломаную линию. Я получаю сообщение об ошибке InvalidValueError: setDirections: в маршрутах свойств: не массив, когда я создаю экземпляр объекта DirectionsRenderer и передаю ему свой объект маршрута (те самые две строки кода, которые я добавляю в функцию displayRoutesOnMap, которая ошибка:
const dRenderer = new google.maps.DirectionsRenderer({
draggable: true,
map: map,
});
dRenderer.setDirections(curRouteData[0])
Подробнее здесь: https://stackoverflow.com/questions/792 ... cessed-via
Как я могу получить URL-адрес для открытия приложения Google Maps по настраиваемому маршруту, доступ к которому осуществ ⇐ Python
Программы на Python
1732983090
Anonymous
Я создаю веб-приложение Flask, которое использует API карт Google. В настоящее время у меня есть JS-запрос к серверной части flask для получения результатов навигации, используя ссылку на библиотеку Python Googlemaps для расчета маршрута между двумя точками. Я установил альтернативы = True, чтобы получить несколько маршрутов, и теперь мне интересно, как использовать эти объекты маршрута для создания пользовательского URL-адреса карт Google, который откроет приложение Google Maps с выбранным маршрутом.
Все решения, которые я видел, используют здесь URL-адреса карт, которые выглядят примерно так: https://www.google.com/maps/dir/?api=1¶meters для запроса маршрутов, но, похоже, это отправляет новый запрос расчета маршрутов на Гугл и навигация в приложение «Карты» с запросом нового маршрута, а это не то, что мне нужно. Я хочу, чтобы он открывал карты Google в режиме навигации по маршруту, который я уже запросил у Google и нажал на него в своем приложении. Я знаю, что навигационные ссылки можно получить с помощью dir_action=navigate, но я хочу, чтобы ссылка работала с маршрутом, по которому я щелкнул в моем приложении.
Похоже, так и должно быть. возможно, при обычном использовании карт Google я могу запросить маршрут в режиме реального времени, щелкнуть один из вариантов маршрута, создать ссылку для этого конкретного маршрута и отправить ее куда-нибудь еще, как это, очевидно, ссылки чувствительны ко времени, но такого рода кажется, что это уже возможно. Интересно, не подхожу ли я к этой проблеме неправильным путем и следует ли мне полностью использовать разные фреймворки, но до сих пор они хорошо работали для меня в этом проекте, поэтому я хотел бы продолжать использовать их, если это возможно.
Я использую функцию decode_polyline из API Googlemaps, чтобы отправить широту и длину полилинии маршрута во внешний интерфейс, а затем добавил прослушиватель, который отображает данные маршрута в модальном режиме, когда полилиния нажата включено.
Вот соответствующий JS
async function requestRoutes(start, end, waypoints = []) {
try {
const response = await fetch('/compute-route', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ start, end, waypoints })
});
if (!response.ok) {
throw new Error('Failed to fetch route data');
}
const routeData = await response.json();
if (routeData.error) {
console.error('Error from server:', routeData.error);
alert('Error calculating route. Please check input.');
} else {
//console.log('Route data:', routeData);
curRouteData.push(routeData);
}
} catch (error) {
console.error('Error:', error);
alert('An error occurred while fetching the route.');
}
}
function displayRoutesOnMap(routeData) {
//console.log(routeData)
curRouteData[0].forEach((route, index) => {
const polyline = new google.maps.Polyline({
path: route.overview_polyline,
strokeColor: index === 0 ? '#00FF00' : index===1 ? '#0000FF' :'#FF0000',
strokeOpacity: 0.7,
strokeWeight: 4,
map: map
});
polyline.addListener('click', () => {
showRouteInfo(route);
});
});
}
function showRouteInfo(route) {
const routeDetails = document.getElementById('routeDetails');
//console.log(route)
routeDetails.innerHTML = '';
route.legs.forEach(leg => {
routeDetails.innerHTML += `${leg.start_address} to ${leg.end_address} : ${leg.steps.length} steps.`
// more route details added
});
const mapsLink = document.getElementById("googleMapsButton")
mapsLink.href = null; // I want help here if possible
const routeModal = new bootstrap.Modal(document.getElementById('routeModal'));
routeModal.show();
}
А вот Python, соответствующий маршруту вычислений:
@app.route('/compute-route', methods=['POST'])
def compute_route():
data = request.get_json()
start = data.get('start')
end = data.get('end')
directions_result = gmaps.directions(start, end, mode='driving', alternatives=True)
for item in directions_result:
item['overview_polyline'] = convert.decode_polyline(item['overview_polyline']['points'])
return directions_result
Весь мой код работает так, как я ожидал, маршрут правильно рассчитывается и отображается на карте из полилинии, а каждый прослушиватель полилиний позволяет мне видеть информацию для маршрут, на который нажали, теперь я просто не знаю, как создать ссылку на карты, которая не просто полностью повторно отправляет навигационный запрос в Google.
Я вижу старое решение, использующее DirectionsRenderer Возражайте здесь, и я пробовал это, но я Не могу заставить объект DirectionsRenderer отображать маршруты из ответов серверной части API Python, мне удается только вручную отображать ломаную линию. Я получаю сообщение об ошибке InvalidValueError: setDirections: в маршрутах свойств: не массив, когда я создаю экземпляр объекта DirectionsRenderer и передаю ему свой объект маршрута (те самые две строки кода, которые я добавляю в функцию displayRoutesOnMap, которая ошибка:
const dRenderer = new google.maps.DirectionsRenderer({
draggable: true,
map: map,
});
dRenderer.setDirections(curRouteData[0])
Подробнее здесь: [url]https://stackoverflow.com/questions/79239982/how-can-i-get-a-url-to-open-the-google-maps-app-from-a-custom-route-accessed-via[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия