Как управлять асинхронными функциями API Карт Google?Javascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Гость
 Как управлять асинхронными функциями API Карт Google?

Сообщение Гость »


Я разработал веб-сайт для частной компании, предоставляющей услуги трансфера, которая работает в Венеции, Италия. Я разработал калькулятор трансфера, в котором вы можете ввести «от» и «куда», некоторые другие факторы, такие как тип транспортного средства и пассажиров, и получить цену. Каждый раз, когда пользователь запускает калькулятор, API Карт Google используется для отображения маршрута на карте и определения количества километров пути, чтобы умножить это значение на стоимость километра.

Проблема в том, что в Венеции полно мест, окруженных водой, и я хочу, чтобы калькулятор распознавал, нельзя ли добраться до начальной точки или пункта назначения только на машине и нужна ли пользователю лодка. И здесь все становится сложнее.

На данный момент я могу успешно узнать, невозможно ли добраться до адреса на машине:
[*]Преобразуйте адрес, взятый из формы, в объект LatLng с помощью геокодирования. [*]Проверьте, находится ли новый LatLng внутри многоугольника, который я ранее создал с помощью google.maps.Polygon (многоугольник включает в себя область Венеции, которую я хочу включить как не -достижимо), [*]Если это правда, то измените адрес внутри переменной запроса, которая будет использоваться в качестве параметра в directionsService.route(), на конкретный адрес, по которому клиент найдет лодку.
Это работает отлично, проблема в том, что я не могу заставить две функции, выполняющие такую ​​проверку (одну для отправления и одну для пункта назначения), возвращать исправленный адрес до того, как будут активированы службы маршрутизации.

Я также пробовал использовать обратный вызов и обещания Javascript, но безуспешно. Что касается промисов, я написал все функции, чтобы их можно было объединить с основным промисом и контролировать порядок их выполнения, но похоже, что DirectionsServices.route() будет запущен первым, несмотря ни на что.

Вот код, который я сейчас использую:
var направленияService = новый google.maps.DirectionsService(); вар направленияDisplay = новый google.maps.DirectionsRenderer(); функция CalcRoute() { направленияDisplay.setOptions({ полилинияПараметры: { Цвет штриха: '#1267ff' } }); направленияDisplay.setMap(theMap); функция checkDeparture(startingPoint) { console.log('1. Вызов CheckDeparture'); вар newDeparture = startPoint; вар геокодер = новый google.maps.Geocoder(); geocoder.geocode({'адрес': newDeparture}, (результаты, статус) => { console.log('2. Вызывается геокодер CheckDeparture'); if(status == google.maps.GeocoderStatus.OK) { coordPoint = new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng()); if(google.maps.geometry.poly.containsLocation(coordPoint, window.venicePolygon)) { console.log('3. CheckDeparture containsLocation вызван'); newDeparture = 'Пьяццале Рома, Венеция, ВЕ, Италия'; console.log('первая проверка переменной: ' + newDeparture); вернуть новыйОтъезд; } еще { вернуть новыйОтъезд; } console.log('вторая проверка переменной: ' + newDeparture); } }); } функция checkDestination(endingPoint) { console.log('1. Вызов CheckDestination'); вар newDestination = endPoint; вар геокодер = новый google.maps.Geocoder(); geocoder.geocode({'адрес': newDestination}, (результаты, статус) => { console.log('2. Вызывается геокодер CheckDestination'); if(status == google.maps.GeocoderStatus.OK) { coordPoint = new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng()); if(google.maps.geometry.poly.containsLocation(coordPoint, window.venicePolygon)) { console.log('3. CheckDestination containsLocation вызывается'); newDestination = 'Пьяццале Рома, Венеция, ВЕ, Италия'; вернуть новое место назначения; } еще { вернуть новое место назначения; } } }); } вар запрос = { происхождение: checkDeparture($('#startTransfer').val()), пункт назначения: проверкаDestination($('#endTransfer').val()), travelMode: google.maps.TravelMode.DRIVING, unitSystem: google.maps.UnitSystem.METRIC }; направленияService.route(запрос, (результат, статус) => { console.log('4. проверка значения источника: ' + request.origin); console.log('5. проверка значения пункта назначения:' + request.destination); console.log('6. НаправленияСервис вызывается'); если (статус == google.maps.DirectionsStatus.OK) { //заниматься вещами } еще { направленияDisplay.setDirections({routes: []}); theMap.setCenter(window.globalCenter); } }); }
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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