QMapShack умеет работать с сетевыми картами, которые представлены в виде тайлов с определённым соглашением о вызове. Что бы работать с подобными сервисами нужно создать файл-описание с расширением .tms
. Описание формата можно
почитать здесь.
До недавнего времени я обходился в основном картами OpenCycleMap, TMS файл для которых идёт вместе с QMS. А для нужных районов уже искал/скачивал листы карт ГГЦ (в народе: “новый” генштаб) и делал им обвязку в виде .vrt
файла (такие карты содержать описание нужных преобразований, не затрагивая самих исходников карты, тем самым можно делать “обрезку карт” и они понимаются всем, что использует GDAL).
Но это дело малость меня достало и захотелось быстро под рукой иметь и ГГЦ карты. Естественно, при условии наличия доступа к сети и доступности сервисов.
С чего начать?
Первым делом нужно найти сервисы, которые предоставляют доступ к картам ГГЦ по спецификации TMS. Поиск в интернете дал несколько ресурсов:
-
https://melda.ru/locus/maps/
- это первый найденный ресурс. Адаптируется просто но доступ крайне медленный. Подробно рассматривать не буду.
-
https://anygis.ru
- TMS агрегатор, предоставляет как доступ к локальным картам, так и может вернуть ссылку на другой TMS ресурс. Собственно его и взял за основу, он же навёл на:
-
https://nakarte.me
- помимо доступа через TMS позволяет ещё и просто удобно смотреть карту, плюс экспорт выбранной области в JNX, и загрузку GPX с отображением на карте, а помимо этого:
- https://about.nakarte.me/ - новости и попадается полезная информация
- https://tiles.nakarte.me/files/ - тайлы для скачивания в формате MBTiles. С ними я повоюю после.
- помимо доступа через TMS позволяет ещё и просто удобно смотреть карту, плюс экспорт выбранной области в JNX, и загрузку GPX с отображением на карте, а помимо этого:
AnyGIS.ru
Сначала смотрим на API:
Обращаем внимание на обозначения X, Y, Z, что это:
X ,Y - это номера тайлов в стандартной проекции Web Mercator. Z - уровень приближения для нее же. Иными словами, это - те же самые значения, что используются для получения карт OpenStreetMaps. Так же, вместо номеров тайлов можно указать координаты в десятичном формате:
Host / MapName / Longitude / Latitude / Z https://anygis.ru/api/v1/Wikimapia/56.062293/37.708244/10
Потом смотрим на список карт:
Таблица нам даёт такие полезные данные, как:
- Пример ссылки на тайл, там легко достаточно понять, где
X
, гдеY
, а гдеZ
. - Имя самой карты (часть URL).
- Название, ну чисто так, что бы было.
- И, конечно, Max zoom level - максимальный уровень приближения на котором отдаётся карта.
Карты которые нам интересны:
-
Combo_Best_GGC
- автоматически выбирает масштаб карты для выбранного уровня приближения. Имхо - не всегда удобно. - И все
Locals_Ggc_XXXXX
, кроме суффикса_jpg
, а вариант с суффиксом_fast
или без— на собственный выбор. Нам более интересен этот вариант, так как можем поиграться с уровнями приближения, если нужно.
Сведём в табличку URL и максимальный уровень приближения (минимальный всегда 0):
Scale | URL | Max zoom level |
---|---|---|
1:25000 | https://anygis.ru/api/v1/Locals_Ggc_00250/X/Y/Z | 15 |
1:50000 | https://anygis.ru/api/v1/Locals_Ggc_00500/X/Y/Z | 14 |
1:100000 | https://anygis.ru/api/v1/Locals_Ggc_01000/X/Y/Z | 13 |
1:200000 | https://anygis.ru/api/v1/Locals_Ggc_02000/Y/X/Z | 12 |
Сам TMS имеет вид:
<TMS>
<Title>OSM D-Land TK 50</Title>
<MinZoomLevel>3</MinZoomLevel>
<MaxZoomLevel>18</MaxZoomLevel>
<Layer idx="0">
<Title>Open Topo Map</Title>
<ServerUrl>http://a.tile.opentopomap.org/%1/%2/%3.png</ServerUrl>
<MinZoomLevel>3</MinZoomLevel>
<MaxZoomLevel>11</MaxZoomLevel>
</Layer>
<Layer idx="1">
<Title>Trails</Title>
<ServerUrl>http://tile.waymarkedtrails.org/hiking/%1/%2/%3.png</ServerUrl>
<MinZoomLevel>3</MinZoomLevel>
<MaxZoomLevel>9</MaxZoomLevel>
</Layer>
<RawHeader>
<Value name="User-Agent">Whatever</Value>
</RawHeader>
<Copyright>Map data: (c) OpenStreetMap contributors, ODbL | Rendering: (c) OpenTopoMap, CC-BY-SA | Trails by tile.waymarkedtrails.org </Copyright>
</TMS>
Здесь:
%1
→Z
%2
→X
%3
→Y
Слои (Layers) позволяют задать разные источники данных и уровни масштабирования, на которых они отображаются. Порядок имеет значение, точнее не совсем порядок, а значение idx=XXX
: чем оно выше тем более приоритетна карта и если она присутствует на данном уровне масштабирования, именно она будет отображена. Почему более мелкие масштабы приоритетны? А что бы не мельчить на малых значениях Zoom Level. Более того, в интерфейсе QMS вы сможете включать/выключать отдельные слои. Здесь оказывается полезен и перехлёст слоёв:
Собираем всё вместе и получаем файл GGC_AnyGIS.ru.tms
с содержимым:
<TMS>
<Title>ГосГисЦентр: AnyGIS.ru/NaKarte.me, все масштабы (частичное покрытие)</Title>
<MinZoomLevel>0</MinZoomLevel>
<MaxZoomLevel>15</MaxZoomLevel>
<Layer idx="0">
<Title>ГосГисЦентр 250 м</Title>
<ServerUrl>https://anygis.ru/api/v1/Locals_Ggc_00250/%2/%3/%1</ServerUrl>
<MinZoomLevel>0</MinZoomLevel>
<MaxZoomLevel>15</MaxZoomLevel>
</Layer>
<Layer idx="1">
<Title>ГосГисЦентр 500 м</Title>
<ServerUrl>https://anygis.ru/api/v1/Locals_Ggc_00500/%2/%3/%1</ServerUrl>
<MinZoomLevel>0</MinZoomLevel>
<MaxZoomLevel>14</MaxZoomLevel>
</Layer>
<Layer idx="2">
<Title>ГосГисЦентр 1000 м</Title>
<ServerUrl>https://anygis.ru/api/v1/Locals_Ggc_01000/%2/%3/%1</ServerUrl>
<MinZoomLevel>0</MinZoomLevel>
<MaxZoomLevel>13</MaxZoomLevel>
</Layer>
<Layer idx="3">
<Title>ГосГисЦентр 2000 м</Title>
<ServerUrl>https://anygis.ru/api/v1/Locals_Ggc_02000/%2/%3/%1</ServerUrl>
<MinZoomLevel>0</MinZoomLevel>
<MaxZoomLevel>12</MaxZoomLevel>
</Layer>
<Copyright>(c) AnyGIS, (c) NaKarte.me, (C) ГГЦ</Copyright>
</TMS>
Помещаем этот файл в любой удобной директории и прописываем путь к ней в настройках QMS (Файл → Настройка пути к картам). После чего карту в списке включаем и… Profit!
Что ещё?
Если вдруг что-то недогружается: правой кнопкой мыши по карте и выбрать пункт “Перезагрузить карты”.
Кроме того, в настройках карты можно поиграться с размером кеша и временем его жизни. Кеш лучше вынести на быстрый диск.
Ещё, из замеченных минусов: много где нет километровок, поэтому переход от 500м к 2км не такой гладкий.
Ну и меня не оставляет идея воспользоваться файлами NaKarte.me для создания локального TMS сервера.