Versions Compared

Key

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

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

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

...

Info

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

...

Заводить подложку можно в разных системах координат.
В данном примере рекомендуется использовать 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

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

Code Block
languagetext
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 в эту папку

...

. 

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

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

GIFmymap.gifmymap.gfw
JPEGmymap.jpgmymap.jgw
JPEG 2000mymap.jp2mymap.j2w
PNGmymap.pngmymap.pgw
TIFFmymap.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



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

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

    5. сохранить

  8. После сохранения будет автоматический переход в режим создания нового слоя. 
  9. * Альтернативный вариант через раздел Data / Layers.
    1. кликнуть Add a new layer
    2. выбрать test:rotated , где  test - название созданного рабочего пространства 
  10. Нажать на кнопку 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. сохранить
  11. Проверить результат в разделе 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:
            url: http://srv.rtls:8080/geoserver/wms
            layers: test:rotated
            transparent: true
          supported_srs: ['EPSG:4326']
          coverage:
            bbox: [37.636411, 55.829521, 37.636727,55.829798 ]
            srs: 'EPSG:4326'
  3. Указать новый слой в качестве источния для кешируемого слоя в блоке caches и параметры для работы с новым источником  (meta_size, meta_buffer)
    Code Block
    caches:
      satellite_cache:
        grids: [webmercator]
        sources: [satellite_source, custom_map]
        meta_size: [1, 1]
        meta_buffer: 0
        cache:
          type: file
          directory_layout: tc
  4. Добавить в блок  layers новый слой с указанием источника или источников данных, если требуется проверка совмещения нескольких слоев. (warning) Для тестирования работы слоя может использоваться любой источник (custom_map в примере), для использования слоя в качестве источника данных в клиентском приложении источником должен быть кешированный слой  из блока caches
    Code Block
    layers:
    ...
      - name: custom_map
        title: custom map
        sources: [custom_map]
  5. Перезапустить модуль 
    Code Block
    docker compose restart mapproxy
  6. Проверить результат можно через веб интерфейс модуля http://srv.rtls:18081/mapproxy/demo/, в списке должен появиться новый слой custom_map
    1. проверить отображение нового слоя в нужном месте карты
    2. проверить отображение совмещенного результата на слое ( в примере custom_map)
  7. Настроить работу 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

...

  1. , где srv.rtls

...

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

...

  1. Авторизоваться в модуль картографии (логин admin pass 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

    ...

      1. в левой выбрать раздел Data / Workspaces
      2. перейти в настройки слоя с названием rotated 
      3. изменить Workspace на rtls
      4. сохранить
    1. Открыть на сервере файл 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