Для добавления локальной подложки необходимо сделать несколько шагов
Сначала будет краткое описание формата.
WorldImage похож на world file с небольшими отличиями. Подробнее про формат world file можно посмотреть (https://en.wikipedia.org/wiki/World_file).
Заводить подложку можно в разных системах координат.
В данном примере рекомендуется использовать wgs84 (широта/долгота).
Системы координат имеют разные единицы измерения (например для wgs84 - это градусы широты/долготы).
Эти единицы измерения в дальнейшем будут именоваться "юниты".
Worldfile состоит из шести строк, содержащих по одной величине в следующем порядке: A, D, B, E, C, F:
A: Размеры по оси x в юнитах на пиксель D: Поворот по оси y B: Поворот по оси x E: Размеры по оси y в юнитах на пиксель C: Координата x центра левого верхнего пикселя F: Координата y центра левого верхнего пикселя |
Значения D и B отвечают за поворот.
Рекомендуется загружать карту у которой нет поворота (предварительно повернуть ее самим в редакторе изображений).
Иначе будет сложно посчитать парметры A и E.
Если нам известны координаты углов карты которую мы хотим загрузить и размеры изображения в пикселях:
maxx, minx, maxy и miny - минимальные и максимальные координаты по X и Y xpix ширина в пикселях ypix высота в пикселях |
То файл выглядит:
A = (maxx-minx)/xpix D = 0 B = 0 E = -(maxy-miny)/ypix C = minx F = maxy |
Например, для загрузки следующего изображения кремля:
![]()
minx = 37.610154 maxx = 37.621650 miny = 55.749170 maxy = 55.755155 xpix = 736 ypix = 685 |
Файл будет выглядеть следующим образом:
0.000015619565217392747 0 0 -0.000008737226277376017 37.610154 55.755155 |
Название файла должно совпадать с названием изображения. Расширения файла зависит от расширения изображения. Для .png надо использовать .pgw, для .jpg надо использовать .jgw.
1. Создать папку rtls/srv/geoserver-data/custom-map.
2. Скопировать файлы custom_map.png и custom_map.pgw в эту папку.
3. Открыть https://srv.rtls/geoserver/web где srv.rtls - адрес сервера.
4. Залогинится (по умолчанию admin/geoserver).
5. Открыть Stores и выбрать Add new store.

6. В открывшемся окне выбрать WorldImage.
7. В качестве Data source name указать custom_map, в Connection Parameters нажать на Browse и выбрать загруженный файл png/jpg, затем нажать Save.

8. В открывшемся окне нажать Publish.

9. В открывшемся окне в блоке Coordinate Reference System нажать кнопку Find и найти там 4326.
10. В этом же блоке поменять SRS handling на Force declared.

11. Нажать Save.
1. Открыть CToolUI, открыть Системная конфигурация, внутри API ключи, и нажать зеленую кнопку "+".
2. В качестве названия можно ввести любое, оно используется только для того, чтобы идентифицировать ключ в таблице (чтобы ее можно было бы удалить).
3. Скопировать ключ в буфер обмена. После закрытия попапа содержимое ключа будет нельзя посомтреть.
1. Открыть rts/mapproxy/mapproxy.yaml.
2. В блок sources добавить следующее:
custom_map:
type: wms
req:
url: http://srv.rtls:8080/geoserver/wms
layers: custom_map
transparent: true
supported_srs: ['EPSG:4326']
http:
headers:
Authorization: Bearer APIKEY |
В Authorization надо заменить APIKEY на ключ полученный на предыдущем шаге.
Например строчка будет выглядеть так:
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI4aUNkOVp6VGc0TWlYR3BPa19uM182WFJTTUcyUUhaUGpybnJ1QjY0a3gwIn0.eyJleHAiOjIwNzA0NTI1NjQsImlhdCI6MTc1NTA5MjU2NCwianRpIjoiYzQ2ZjBmZDYtMDkyMS00ZDkyLTg1N2EtOTJiNjNjNDZjNGE5IiwiaXNzIjoiaHR0cDovL2tleWNsb2FrLnJ0bHM6ODA4MC9yZWFsbXMvcnRscy1hcGkiLCJzdWIiOiIzNjdmMGYzYi03ZDA4LTQ4ZjQtOWE4Ni01ZTNkMGNkYWZiNzMiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJydGxzL01hcHByb3h5IiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLXJ0bHMtYXBpIiwiYXBpIiwicnRsc19lbmdpbmVlciIsInJ0bHNfYmFfYWRtaW4iXX0sInNjb3BlIjoiZW1haWwgcnRsc19yb2xlcyBwcm9maWxlIiwiY2xpZW50SG9zdCI6IjE3Mi4yMy4wLjYiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudElkIjoicnRscy9NYXBwcm94eSIsInJvbGVzIjpbImRlZmF1bHQtcm9sZXMtcnRscy1hcGkiLCJhcGkiLCJydGxzX2VuZ2luZWVyIiwicnRsc19iYV9hZG1pbiJdLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJzZXJ2aWNlLWFjY291bnQtcnRscy9tYXBwcm94eSIsImNsaWVudEFkZHJlc3MiOiIxNzIuMjMuMC42In0.WNF8W2f_Q-uuoLLD7k29m_YfJYf1XAlWUTHEVHGMgSshMuRbw8MZHfzr5F4owTzwpzq0-tl2evoSpxNuRfVdGkW_sfKFSy9w6uY613exHEKelC0V8N-0T1b-yI3l0A-Bb8bfPoRfltORLGjxXQ8J0nSAgsEO5M7eQLyscRDaJ3hdhW1esYCGqhgd6MSkLvqaf2M1rCHBzUA1tWL6kKQZYDEeAMtrgR5pzgCuxRO7VJyYKjZmkS9mPA1iBmJc99YkuFJaB4sJnOvFz76bwyRL5G6KIxKwtbtMrZ7AVqPzU04oRwFeBbO4lGS7wSXpr29GgZeQFGHyy3_fxHrpVXkZLw |
3. Поменять satellite_cache, добавив в sources новый custom_map.
Также нужно добавить meta_size: [1, 1] и meta_buffer: 0, без этого MapProxy не сможет совмещать данные из двух разных источников.
Результат должен выглядеть вот так
caches:
satellite_cache:
grids: [webmercator]
sources: [satellite_source, custom_map]
meta_size: [1, 1]
meta_buffer: 0
cache:
type: file
directory_layout: tc |
4. Сохранить файл.
5. Старый кэш придется удалить и сгенерировать заново. Для удаления кэша можно использовать:
rm -rf rtls/mapproxy/cache_data/ |
6. Перезапустить контейнер, после чего локальная карта должна отображаться поверх спутниковых данных.
