Руководство по отображению направлений маршрутов с помощью службы маршрутов Azure Карты и управления картами
В этом руководстве показано, как применить API службы "Построение маршрутов" Azure Maps и элемент управления картой для отображения направлений маршрута от начальной до конечной точки. В этом руководстве показано, как:
- создание и отображение элемента управления картой на веб-странице;
- определение отрисовки маршрута через слои символов и слои линий;
- создание и добавление на карту объектов GeoJSON, которые будут представлять начальную и конечную точки;
- получение направлений маршрута от начальной до конечной точки, используя API "Получение направлений маршрута".
Исходный код см. в руководстве route на GitHub. Пример см. в статье Прокладывание маршрута до точки интереса в службе "Карты Azure".
Необходимые компоненты
- Учетная запись Azure Карты
- Ключ подписки
Создание и отображение элемента управления картой
В следующих шагах описаны создание и отображение элемента управления картой на веб-странице.
На локальном компьютере создайте файл MapRoute.html.
Добавьте в файл следующий код HTML:
<!DOCTYPE html> <html> <head> <title>Map Route</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Add references to the Azure Maps Map control JavaScript and CSS files. --> <link rel="stylesheet" href="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.css" type="text/css"> <script src="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.js"></script> <!-- Add a reference to the Azure Maps Services Module JavaScript file. --> <script src="https://atlas.microsoft.com/sdk/javascript/service/2/atlas-service.min.js"></script> <script> var map, datasource, client; function GetMap() { //Add Map Control JavaScript code here. } </script> <style> html, body { width: 100%; height: 100%; padding: 0; margin: 0; } #myMap { width: 100%; height: 100%; } </style> </head> <body onload="GetMap()"> <div id="myMap"></div> </body> </html>
Важная информация о приведенном выше HTML-коде:
- Заголовок HTML включает файлы ресурсов CSS и JavaScript, размещенные в библиотеке управления картой Azure.
- Событие
onload
в тексте страницы вызывает функциюGetMap
, когда завершается загрузка текста страницы. - Функция
GetMap
содержит встроенный код JavaScript, используемый для доступа к API Карты Azure. Он добавлен на следующем шаге.
Затем добавьте следующий код JavaScript в функцию
GetMap
сразу после кода, добавленного на предыдущем шаге. Этот код создает элемент управления картой и инициализирует его с помощью предоставленных ключей подписки Azure Карты. Обязательно замените строку<Your Azure Maps Key>
первичным ключом Azure Maps, скопированным из учетной записи службы Maps.//Instantiate a map object var map = new atlas.Map('myMap', { // Replace <Your Azure Maps Key> with your Azure Maps subscription key. https://aka.ms/am-primaryKey authOptions: { authType: 'subscriptionKey', subscriptionKey: '<Your Azure Maps Key>' } });
Важная информация о приведенном выше коде Javacript.
Сохраните изменения в файл и откройте HTML-страницу в браузере. Показанная карта — это самая базовая карта, которую можно сделать, вызвав
atlas.Map
ключ подписки azure Карты учетной записи.
Определение отрисовки для отображения маршрута
В этом руководстве маршрут отрисовывается с помощью слоя линий. Начальные и конечные точки отрисовываются с помощью слоя символов. Дополнительные сведения о добавлении слоев линий см. в статье Добавление слоя линий на карту. Дополнительные сведения о слоях символов см. в статье Добавление слоя символов на карту.
В функции
GetMap
после инициализации карты добавьте следующий код JavaScript.//Wait until the map resources are ready. map.events.add('ready', function() { //Create a data source and add it to the map. datasource = new atlas.source.DataSource(); map.sources.add(datasource); //Add a layer for rendering the route lines and have it render under the map labels. map.layers.add(new atlas.layer.LineLayer(datasource, null, { strokeColor: '#2272B9', strokeWidth: 5, lineJoin: 'round', lineCap: 'round' }), 'labels'); //Add a layer for rendering point data. map.layers.add(new atlas.layer.SymbolLayer(datasource, null, { iconOptions: { image: ['get', 'icon'], allowOverlap: true }, textOptions: { textField: ['get', 'title'], offset: [0, 1.2] }, filter: ['any', ['==', ['geometry-type'], 'Point'], ['==', ['geometry-type'], 'MultiPoint']] //Only render Point or MultiPoints in this layer. })); });
Важная информация о приведенном выше коде Javacript.
- Этот код реализует обработчик событий
ready
для элемента управления картой. Остальная часть кода в этом руководстве помещается вready
обработчик событий. - В обработчике событий
ready
элемента управления картой создается источник данных для хранения маршрута от начальной до конечной точки. - Чтобы определить способ отрисовки линии маршрута, создается и присоединяется слой линий к источнику данных. Чтобы убедиться, что линия маршрута не охватывает метки дороги, передайте второй параметр со значением
'labels'
.
Теперь создаем слой символов и привязываем его к источнику данных. Этот слой определяет, как отображаются начальная и конечная точки. Выражения добавлены для извлечения изображения значка и текстовых подписей из свойств в каждом объекте точки. Чтобы узнать больше о выражениях, ознакомьтесь со стилистическими выражениями на основе данных.
- Этот код реализует обработчик событий
Задайте в качестве начальной точки офис корпорации Майкрософт, а в качестве конечной — заправку в Сиэтле. Начальные и точки создаются путем добавления следующего кода в обработчик событий элемента управления
ready
Map://Create the GeoJSON objects which represent the start and end points of the route. var startPoint = new atlas.data.Feature(new atlas.data.Point([-122.130137, 47.644702]), { title: "Redmond", icon: "pin-blue" }); var endPoint = new atlas.data.Feature(new atlas.data.Point([-122.3352, 47.61397]), { title: "Seattle", icon: "pin-round-blue" }); //Add the data to the data source. datasource.add([startPoint, endPoint]); map.setCamera({ bounds: atlas.data.BoundingBox.fromData([startPoint, endPoint]), padding: 80 });
Важная информация о приведенном выше коде Javacript.
- Этот код создает два объекта Point в формате GeoJSON, которые будут представлять начальную и конечную точки, и добавляет эти объекты в источник данных.
- Последний блок кода задает позицию камеры, используя данные о широте и долготе начальной и конечной точек.
- Начальная и конечная точки добавляются в источник данных.
- Ограничивающий прямоугольник для начальной и конечной точек вычисляется с использованием функции
atlas.data.BoundingBox.fromData
. Этот ограничивающий прямоугольник используется для формирования вида с камер карты по всему пути с помощью функцииmap.setCamera
. - Для компенсации размеров пикселей значков символов добавляется заполнение.
Дополнительные сведения о наборе элемента управления Map Камера см. в наборе Камера(Камера Options | Камера BoundsOptions и AnimationOptions) Свойство.
Сохраните файл MapRoute.html и обновите страницу в браузере. Карта сместится так, что в центре окажется Сиэтл. Синий маркер в форме капли обозначает начальную точку. Круглый синий маркер обозначает конечную точку маршрута.
Получение направлений маршрута
Из этого раздела вы узнаете, как использовать API направлений маршрута Azure Maps, чтобы получить направление маршрута и предполагаемое время прибытия от одной точки к другой.
Совет
API-интерфейсы предлагают службы "Построение маршрутов" Azure Maps для планирования маршрутов на основе различных типов, таких как самые быстрые, кратчайшие, экономичные или захватывающие маршруты на основе расстояния, плотности трафика и способа перемещения. Кроме того, с помощью этой службы пользователи могут планировать маршруты с учетом исторических данных о плотности трафика. Пользователь может получить прогноз продолжительности поездки для любого заданного времени. Дополнительные сведения см. в статье Route — Get Route Directions (Маршрут. Получение направления маршрута).
В функции
GetMap
внутри обработчика событийready
элемента управления добавьте в код JavaScript следующее://Use MapControlCredential to share authentication between a map control and the service module. var pipeline = atlas.service.MapsURL.newPipeline(new atlas.service.MapControlCredential(map)); //Construct the RouteURL object var routeURL = new atlas.service.RouteURL(pipeline);
Используйте MapControlCredential для совместной проверки подлинности в элементе управления картой и в модуле службы при создании нового объекта конвейера.
RouteURL представляет URL-адрес API службы маршрутизации Azure Карты маршрутизации.
Указав учетные данные и URL-адрес, добавьте следующий код в конец обработчика событий
ready
элемента управления.//Start and end point input to the routeURL var coordinates= [[startPoint.geometry.coordinates[0], startPoint.geometry.coordinates[1]], [endPoint.geometry.coordinates[0], endPoint.geometry.coordinates[1]]]; //Make a search route request routeURL.calculateRouteDirections(atlas.service.Aborter.timeout(10000), coordinates).then((directions) => { //Get data features from response var data = directions.geojson.getFeatures(); datasource.add(data); });
Важная информация о приведенном выше коде Javacript.
- Этот код создает маршрут от начальной точки к конечной точке.
routeURL
обращается к службе "Построение маршрутов" Azure Maps, чтобы рассчитать направления маршрута.- Коллекция компонентов GeoJSON из ответа извлекается с помощью метода
geojson.getFeatures()
и добавляется в источник данных.
Сохраните файл MapRoute.html и обновите страницу в браузере. Теперь на карте появится маршрут от начальной до конечной точки.
- Полный код для этого руководства представлен в руководстве route на GitHub.
- Чтобы просмотреть этот пример в реальном времени, см. статью Маршрутизация к назначению на веб-сайте Azure Maps Code Samples.
Следующие шаги
В следующем руководстве показано, как создать запрос маршрута с ограничениями, например по типу транспорта или характеристикам груза. Затем вы попробуете отобразить несколько маршрутов на одной карте.