Как я могу получить URL-адрес для открытия приложения Google Maps по настраиваемому маршруту, доступ к которому осуществPython

Программы на Python
Ответить
Anonymous
 Как я могу получить URL-адрес для открытия приложения Google Maps по настраиваемому маршруту, доступ к которому осуществ

Сообщение Anonymous »

Я создаю веб-приложение Flask, которое использует API карт Google. В настоящее время у меня есть JS-запрос к серверной части flask для получения результатов навигации, используя ссылку на библиотеку Python Googlemaps для расчета маршрута между двумя точками. Я установил альтернативы = True, чтобы получить несколько маршрутов, и теперь мне интересно, как использовать эти объекты маршрута для создания пользовательского URL-адреса карт Google, который откроет приложение Google Maps с выбранным маршрутом.
Все решения, которые я видел, используют здесь URL-адреса карт, которые выглядят примерно так: https://www.google.com/maps/dir/?api=1&parameters для запроса маршрутов, но, похоже, это отправляет новый запрос расчета маршрутов на Гугл и навигация в приложение «Карты» с запросом нового маршрута, а это не то, что мне нужно. Я хочу, чтобы он открывал карты 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»