Добавление слоя фрагментов на карту (пакет SDK для Android)
Примечание.
Прекращение использования пакета SDK для Android для Azure Maps
Пакет SDK для машинного кода Azure Maps для Android теперь не рекомендуется и будет снят с 3.31.25. Чтобы избежать сбоев в работе служб, перейдите в веб-пакет SDK Azure Maps на 3/31/25. Дополнительные сведения см . в руководстве по миграции пакета SDK для Android для Azure Maps.
Из этой статьи вы узнаете, как наложить слой фрагментов на карту с помощью пакета SDK для Android Azure Maps. Слои фрагментов позволяют накладывать изображения поверх фрагментов карты в Azure Maps. Дополнительные сведения о системе фрагментов Azure Maps см. в статье Уровни увеличения и параметры сетки.
Слой фрагментов загружается в виде фрагментов с сервера. Эти изображения можно предварительно создать и сохранить, как и любой другой образ на сервере, используя соглашение об именовании, которое понимает слой плиток. Либо вы можете преобразовать эти изображения для просмотра с помощью динамической службы, которая создает изображения практически реальном времени. Класс TileLayer в Azure Maps поддерживает три разных соглашения об именовании службы фрагментов:
- X, Y, нотация увеличения. В зависимости от уровня увеличения, x — это столбец, а y — позиция строки фрагмента в сетке фрагментов.
- Нотация Quadkey. Сочетание данных x, y и увеличения в одном строковом значении, которое является уникальным идентификатором для фрагмента.
- Ограничивающий прямоугольник. Координаты ограничивающего прямоугольника позволяют указать образ в формате
{west},{south},{east},{north}
. Часто используется веб-службами сопоставления (WMS).
Совет
Класс TileLayer — отличный способ визуализировать большие объемы данных на карте. С его помощью можно не только создать слой фрагментов из образа, но и отобразить векторные данные в виде слоя фрагментов. Отображение векторных данных в виде слоя фрагментов позволяет элементу управления картой загрузить фрагменты, размер файлов которых может быть значительно меньше, чем у векторных данных, которые они представляют. Эта техника часто используется, когда нужно преобразовать для просмотра огромное количество строк данных на карте.
URL-адрес фрагмента, передаваемый в слой фрагментов, должен быть URL-адресом с http/https к ресурсу TileJSON или шаблоном URL-адреса фрагмента, который использует следующие параметры:
{x}
— позиция X фрагмента. Также нужны{y}
и{z}
.{y}
— позиция Y фрагмента. Также нужны{x}
и{z}
.{z}
— уровень увеличения фрагмента. Также нужны{x}
и{y}
.{quadkey}
— идентификатор quadkey на основе соглашения об именовании системы фрагментов Bing Maps.{bbox-epsg-3857}
— строка ограничивающего прямоугольника в формате{west},{south},{east},{north}
в системе пространственных ссылок 3857 EPSG.{subdomain}
— заполнитель для значений поддомена, если указано значение поддомена.azmapsdomain.invalid
— заполнитель для согласования домена и проверки подлинности запросов фрагментов со значениями, которые используются картой. Используйте его при вызове службы фрагментов, размещенной в Azure Maps.
Необходимые компоненты
Чтобы выполнить описанные здесь задачи, вам понадобится установить пакет SDK для Android Azure Maps для загрузки карты.
Добавление слоя фрагментов на карту
В этом примере показано, как создать слой фрагментов, указывающий на набор фрагментов. В этом примере используется система мозаичного размещения окон с элементами "x, y, увеличение". Источником этого слоя фрагментов является проект OpenSeaMap, который содержит навигационные карты, полученные с помощью краудсорсинга. Часто при просмотре слоев плиток желательно четко видеть метки городов на карте. Для этого можно добавить слой фрагментов под слои меток на карте.
TileLayer layer = new TileLayer(
tileUrl("https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png"),
opacity(0.8f),
tileSize(256),
minSourceZoom(7),
maxSourceZoom(17)
);
map.layers.add(layer, "labels");
val layer = TileLayer(
tileUrl("https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png"),
opacity(0.8f),
tileSize(256),
minSourceZoom(7),
maxSourceZoom(17)
)
map.layers.add(layer, "labels")
На следующем снимке экрана представлен приведенный выше код, позволяющий отобразить слой фрагментов с морской навигацией на карте в темно-сером стиле.
Добавление службы веб-карт (WMS) OGC
Служба веб-карт (WMTS) — это стандарт Открытого геопространственного консорциума (OGC) для деятельности по обслуживанию изображений в сфере данных карт. Существует множество открытых наборов данных в этом формате, которые можно использовать с Azure Maps. Этот тип службы можно использовать со слоем фрагментов, если служба поддерживает систему координат (CRS) EPSG:3857
. При использовании службы WMS задайте для параметра значение ширины и высоты, поддерживаемое службой, обязательно задайте это же значение в параметре tileSize
. В отформатированном URL-адресе задайте параметр BBOX
службы с заполнителем {bbox-epsg-3857}
.
TileLayer layer = new TileLayer(
tileUrl("https://mrdata.usgs.gov/services/gscworld?FORMAT=image/png&HEIGHT=1024&LAYERS=geology&REQUEST=GetMap&STYLES=default&TILED=true&TRANSPARENT=true&WIDTH=1024&VERSION=1.3.0&SERVICE=WMS&CRS=EPSG:3857&BBOX={bbox-epsg-3857}"),
tileSize(1024)
);
map.layers.add(layer, "labels");
val layer = TileLayer(
tileUrl("https://mrdata.usgs.gov/services/gscworld?FORMAT=image/png&HEIGHT=1024&LAYERS=geology&REQUEST=GetMap&STYLES=default&TILED=true&TRANSPARENT=true&WIDTH=1024&VERSION=1.3.0&SERVICE=WMS&CRS=EPSG:3857&BBOX={bbox-epsg-3857}"),
tileSize(1024)
)
map.layers.add(layer, "labels")
На следующем снимке экрана представлено наложение приведенным выше кодом верхней части карты службы веб-карт геологическими данными Геологической службы США (USGS) (под метками).
Добавление службы фрагментов веб-карт (WMTS) OGC
Служба фрагментов веб-карт (WMTS) — это стандарт Открытого геопространственного консорциума (OGC), для деятельности по обслуживанию наложений на основе фрагментов для карт. Существует множество открытых наборов данных в этом формате, которые можно использовать с Azure Maps. Этот тип службы можно использовать со слоем фрагментов, если служба поддерживает систему координат (CRS) EPSG:3857
или GoogleMapsCompatible
. При использовании службы WMTS задайте для параметра значение ширины и высоты, поддерживаемое службой, обязательно задайте это же значение в параметре tileSize
. В форматированном URL-адресе замените следующие заполнители соответствующим образом:
{TileMatrix}
=>{z}
{TileRow}
=>{y}
{TileCol}
=>{x}
TileLayer layer = new TileLayer(
tileUrl("https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/WMTS/tile/1.0.0/USGSImageryOnly/default/GoogleMapsCompatible/{z}/{y}/{x}"),
tileSize(256),
bounds(-173.25000107492872, 0.0005794121990209753, 146.12527718104752, 71.506811402077),
maxSourceZoom(18)
);
map.layers.add(layer, "transit");
val layer = TileLayer(
tileUrl("https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/WMTS/tile/1.0.0/USGSImageryOnly/default/GoogleMapsCompatible/{z}/{y}/{x}"),
tileSize(256),
bounds(-173.25000107492872, 0.0005794121990209753, 146.12527718104752, 71.506811402077),
maxSourceZoom(18)
)
map.layers.add(layer, "transit")
На следующем снимке экрана представлен приведенный выше код для создания наложения карты со службой фрагментов веб-карт для изображений национальной карты Геологической службы США (USGS) под метками и дорогами.
Следующие шаги
В следующей статье вы узнаете о других способах накладывать изображения на карту.