Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Для добавления локальной подложки необходимо сделать несколько шагов

Создание информации о координатах подложки - файла WordImage

...

Info

Инструкция позволяет заменить участок глобальной карты кастомным изображением. В качестве источника могут использоваться растровые изображения с GEO  данными в формате World file (описание формата

https://en.wikipedia.org/wiki/World_file). 

Потребуется растровое изображение и файл с описанием GEO данных, название которого будет совпадать с названием изображения, расширение зависит от расширения изображения.

Поддерживаемые форматы изображений и файлов с GEO данными:

GIFmymap.gifmymap.gfw
JPEGmymap.jpgmymap.jgw
JPEG 2000mymap.jp2mymap.j2w
PNGmymap.pngmymap.pgw
TIFFmymap.

...

Заводить подложку можно в разных системах координат.
В данном примере рекомендуется использовать wgs84 (широта/долгота).
Системы координат имеют разные единицы измерения (например для wgs84 - это градусы широты/долготы).
Эти единицы измерения в дальнейшем будут именоваться "юниты".

Worldfile состоит из шести строк, содержащих по одной величине в следующем порядке: A, D, B, E, C, F:

Code Block
languageyaml
A: Размеры по оси x в юнитах на пиксель
D: Поворот по оси y
B: Поворот по оси x
E: Размеры по оси y в юнитах на пиксель
C: Координата x центра левого верхнего пикселя
F: Координата y центра левого верхнего пикселя

Значения D и B отвечают за поворот.
Рекомендуется загружать карту у которой нет поворота (предварительно повернуть ее самим в редакторе изображений).
Иначе будет сложно посчитать парметры A и E.

Если нам известны координаты углов карты которую мы хотим загрузить и размеры изображения в пикселях:

Code Block
languagetext
maxx, minx, maxy и miny - минимальные и максимальные координаты по X и Y
xpix ширина в пикселях
ypix высота в пикселях

То файл выглядит:

Code Block
languagetext
A = (maxx-minx)/xpix
D = 0
B = 0
E = -(maxy-miny)/ypix
C = minx
F = maxy

Например, для загрузки следующего изображения кремля:

Image Removed

Code Block
languagetext
minx = 37.610154
maxx = 37.621650
miny = 55.749170
maxy = 55.755155
xpix = 736
ypix = 685

Файл будет выглядеть следующим образом:

...

languagetext

...

tifmymap.tfw

Подготовка изображения

Info

Процедура изменения файла с GEO данными вручную не рекомендуется при необходимости поворота изображения. Для загрузки Рекомендуется использовать уже повернутое изображение относительно положения на север. 

Так же надо учитывать, что разные источники глобальной карты могут иметь несовпадающую координатную сетку, поэтому определение рабочего диапазона координат рекомендуется определять на базе источника глобальной карты, поверх которого будет накладываться изображение

  1. Подготовить растровое изображение (rotated.png для примера).  Если объект требует дополнительного поворота  для совмещения границ на глобальной карте, привести изображение к правильному расположению относительно направления на север в графическом редакторе.
  2. На глобальной карте определить прямоугольник в котором будет размещаться изображение. Рекомендуется определять координаты точек на подложке, которая будет в качестве глобальной карты. Получить координаты точек
    1. min lat min lon (точка А)
    2. max lat max lon (точка B)
    3. левая верхняя точка прямоугольника изображения (min lon max lat)
  3. Создать файл rotated.pgw и заполнить строки значениями 
    Code Block
    Line 1: x-dimension of a pixel in map units 			// (maxLon - minLon) / widthPx
    Line 2: rotation parameter  							// 0
    Line 3: rotation parameter  							// 0
    Line 4: NEGATIVE of y-dimension of a pixel in map units // (maxLat - minLat) / heightPx
    Line 5: x-coordinate of center of upper left pixel 		// (minLon)
    Line 6: y-coordinate of center of upper left pixel 		// (maxLat)

Image Added  Image Added

Code Block
titlerotated.pgw
0.000000798
0
0
-0.

...

0000005
37.610154
55.755155

Название файла должно совпадать с названием изображения. Расширения файла зависит от расширения изображения. Для .png надо использовать .pgw, для .jpg надо использовать .jgw.

Загрузка файлов на сервер

...



Импорт изображения в картографический модуль

  1. Скопировать изображение и файл с GEO данными  на сервер внутрь директории rtls/srv/geoserver

...

  1. _data, рекомендуется создать предварительно директорию custom-map

...

2. Скопировать файлы custom_map.png и custom_map.pgw в эту папку.

...

  1. и скопировать в нее файлы
  2. Открыть веб интерфейс модуля картографии 

...

  1. , где srv.rtls

...

  1. адрес сервера

...

  1. Авторизоваться в модуль картографии (логин admin pass geoserver)
  2. В левой выбрать раздел Data / Workspaces
  3. Создать новое рабочее пространство ресурсов (например test)
  4. В левой выбрать раздел Data / Stores
  5. Кликнуть Add new Store для создания хранилища
    1. выбрать WorldImage
    2. выбрать Workspace созданный ранее
    3. в разделе  Connection Parameters указать путь до изображения (поиск по Data directory, найти папку из п.1)
    4.  указать имя источника данных по названию изображения (rotated)

    5. сохранить

  6. После сохранения будет автоматический переход в режим создания нового слоя. 
  7. * Альтернативный вариант через раздел Data / Layers.
    1. кликнуть Add a new layer
    2. выбрать test:rotated , где  test - название созданного рабочего пространства 
  8. Нажать на кнопку Publish для конфигурации слоя
    1. проверить название слоя (rotated)
    2. найти поле Declared SRS и с помощью кнопки Find поменять SRS на значение с кодом 4326 (WGS 84) , поле изменит значение на EPSG:4326
    3. изменить SRS handling на Force declared
    4. проверить на соответствие указанным в файле GEO данных значения Native Bounding Box и Lat/Lon Bounding Box
    5. сохранить
  9. Проверить результат в разделе Data /Layer Preview
    1. найти созданный слой (test:rotated)
    2. открыть OpenLayers  и проверить сопоставление изображения с ожидаемым диапазоном координат

Настройка отображения изображения при работе с глобальными координатами

  1. Открыть на сервере файл rtls/mapproxy/mapproxy.yaml
  2. Добавить новый источник в блок sources, в layers указать название слоя, созданного в картографическом модуле (с учетом префикса с названием рабочего пространства)
    1. * параметр coverage опционален и ограничивает диапазон координат при котором будет запрашиваться слой, bbox соответвует диапазону координат, определенному для изображения [minLon ,minLat, maxLon, maxLat] (сначала горизонтальная составляющая потом вертикальная при ориентации на север) 
        
      Code Block
      sources:
      
      ...
      
        custom_map:
          type: wms
          wms_opts:
            version: 1.1.1
            tiled: true
          req:
            

4. Залогинится (по умолчанию admin/geoserver).

5. Открыть Stores и выбрать Add new store.

Image Removed

6. В открывшемся окне выбрать WorldImage.

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

Image Removed

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

Image Removed

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

10. В этом же блоке поменять SRS handling на Force declared.

Image Removed

11. Нажать Save.

Создание API ключа

1. Открыть CToolUI, открыть Системная конфигурация, внутри API ключи, и нажать зеленую кнопку "+".

2. В качестве названия можно ввести любое, оно используется только для того, чтобы идентифицировать ключ в таблице (чтобы ее можно было бы удалить).

3. Скопировать ключ в буфер обмена. После закрытия попапа содержимое ключа будет нельзя посомтреть.

Настройки MapProxy

1. Открыть rts/mapproxy/mapproxy.yaml.

2. В блок sources добавить следующее:

...

languageyaml

...

    1. url: http://srv.rtls:8080/geoserver/wms
          

...

    1.   

...

    1. layers: 

...

    1. test:rotated
            transparent: true
          supported_srs: ['EPSG:4326']
          

...

    1. coverage:
            

...

    1. bbox:

...

    1.  [37.636411, 55.829521, 37.636727,55.829798 ]
          

...

    1.  

...

В Authorization надо заменить APIKEY на ключ полученный на предыдущем шаге.

Например строчка будет выглядеть так:

Code Block
languagetext
        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 не сможет совмещать данные из двух разных источников.

Результат должен выглядеть вот так

    1.  srs: 'EPSG:4326'
  1. Указать новый слой в качестве источния для кешируемого слоя в блоке caches и параметры для работы с новым источником  (meta_size, meta_buffer)
    Code Block

...

  1. 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. Старый кэш придется удалить и сгенерировать заново. Для удаления кэша можно использовать:

Code Block
languageshell
rm -rf rtls/mapproxy/cache_data/

6. Перезапустить контейнер, после чего локальная карта должна отображаться поверх спутниковых данных.

...

  1. Добавить в блок  layers новый слой с указанием источника или источников данных, если требуется проверка совмещения нескольких слоев. (warning) Для тестирования работы слоя может использоваться любой источник (custom_map в примере), для использования слоя в качестве источника данных в клиентском приложении источником должен быть кешированный слой  из блока caches
    Code Block
    layers:
    ...
      - name: custom_map
        title: custom map
        sources: [custom_map]
  2. Перезапустить модуль 
    Code Block
    docker compose restart mapproxy
  3. Проверить результат можно через веб интерфейс модуля http://srv.rtls:18081/mapproxy/demo/, в списке должен появиться новый слой custom_map
    1. проверить отображение нового слоя в нужном месте карты
    2. проверить отображение совмещенного результата на слое ( в примере custom_map)
  4. Настроить работу BA-UI со слоем, указанным  в поле name при настройке layers

Image Added Image Added


Отображение слоя на глобальной карте

  1. авторизоваться в CToolUI
  2. перейти в раздел Системная конфигурация
  3. в разделе Настройки глобальной карты указать ссылку на сконфигурированный ресурс https://srv.rtls:8443/mapproxy/tiles/satellite/webmercator/{z}/{x}/{y}.png, где srv.rtls адрес сервера
  4. в полях широта, долгота указать точку в пределах диапазона , заданного для кеширования в разделе Настройка кеширования
  5. указать уровень масштаба в пределах диапазона, заданного для кеширования в разделе Настройка кеширования
  6. сохранить изменения
  7. перейти в раздел Конфигурация на глобальную карту 
  8. в левом верхнем углу нажать кнопку отображения альтернативного слоя Image Added
  9. проверить, что карта открывается в нужном месте с ожидаемым уровнем масштаба

Добавление авторизации для доступа к слою

  1. Открыть веб интерфейс модуля картографии https://srv.rtls/geoserver , где srv.rtls адрес сервера
  2. Авторизоваться в модуль картографии (логин admin pass geoserver)
    1. в левой выбрать раздел Data / Workspaces
    2. перейти в настройки слоя с названием rotated 
    3. изменить Workspace на rtls
    4. сохранить
  3. Открыть на сервере файл rtls/mapproxy/mapproxy.yaml
    1. в блоке layers для слоя custom_map изменить параметр layers (префикс rtls) и добавить параметры авторизации, где <TOKEN> заменить на API ключ Получение данных через API#Выдача API токена
       
      Code Block
      sources:
      
      ...
      
        custom_map:
          type: wms
          wms_opts:
            version: 1.1.1
            tiled: true
          req:
            url: http://srv.rtls:8080/geoserver/wms
            layers: rtls:rotated
            transparent: true
          supported_srs: ['EPSG:4326']
          coverage:
            bbox: [37.636411, 55.829521, 37.636727,55.829798 ]
            srs: 'EPSG:4326'
          http:
            headers:
              Authorization: Bearer <TOKEN>
    2. сохранить
    3. перезапустить модуль
      Code Block
      docker compose restart mapproxy
       

Table of Contents
maxLevel7
minLevel1
stylenone
printablefalse