На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Работа с картами в формате S57 в ГИС Конструкторе (Astra Linux Смоленск)

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1 2 3 След.
RSS
Работа с картами в формате S57 в ГИС Конструкторе (Astra Linux Смоленск)
 
Добрый день,

Обратился в службу поддержки (panaroma@gisinfo.ru) по вопросам работы с картами в формате S57, откуда был перенаправлен сюда.

Установил последнюю версию ГИС Конструктора для QT Designer, и возникли следующие вопросы:
  1. Из примера s57example следует, что для того, чтобы преобразовать карту S57 во внутренний формат, нужно задействовать диалоговое окно преобразования, но меня это не устраивает. Возможно ли открыть карты S57 без использования лишних диалоговых окон?
  2. Возможно ли использование функционала без задействования библиотечных виджетов?
  3. Возможно ли позиционирование карты в формате S57 по географическим координатам, задание масштаба, смещения или поворота?

Был бы очень признателен, если бы вы мне сообщили, как именно решаются эти вопросы, или указали конкретные примеры, в которых можно посмотреть решение.

Кроме того, для работы s57example требуется валидная карта, которая не выдавала бы ошибку: "Нелегальная копия модуля – libqdmapaccess.so". Иначе не предоставляется возможности посмотреть отображение карт в формате S57 и понять годится ли данное ПО для решения поставленной передо мной задачи.

С уважением, Андрей

 
vecexapi.h :
Код
 // Импорт из формата S57 в формат MAP или SIT (без вызова диалога)
 // handle  - идентификатор окна диалога, которому посылаются уведомительные
 //           сообщения WM_OBJECT и WM_ERROR (HWND для Windows, CALLBACK-Функция для Linux) или 0
 // s57name - полный путь к файлу формата S57 (*.000 или *.030)
 // mapname - полный путь к файлу создаваемой карты
 // size    - размер буфера имени создаваемой карты, если имя может быть изменено в функции
 // rscname - полное имя файла классификатора (s57navy.rsc)
 // regionname - условное название создаваемой карты ("Море Лаптевых" и т.п.)
 // safelystate - флаг создания границ зон безопасности (длительный процесс оверлейного анализа данных)
 // При ошибке в параметрах возвращает ноль

_VECIMP long int _VECAPI vecLoadS57ToMapUn(HMESSAGE handle, const WCHAR * s57name,  WCHAR * mapname, long int size,
                                           const WCHAR * rscname, const WCHAR * regionname, long int safelystate);

Общие сведения по применению MAPAPI-интерфейса есть здесь -
http://gistoolkit.ru/download/doc/mapapi.pdf

в частности, п.4.2.6, 4.2.7 и т.д.
Изменено: Oleg Belenkov - 03.03.2020 11:02:06
 
Спасибо за оперативный ответ.

Остался не закрытым вопрос, с какой картой можно протестировать этот функционал на триальной версии, чтобы не получать ошибку  "Нелегальная копия модуля – libqdmapaccess.so"

С уважением, Андрей
 
Мы обновим через некоторое время инструментарий ГИС Конструктор и проверим, чтобы тестовая карта открывалась без ключа.
Кроме того, Вы можете приобрести продукт, проверить и в течении месяца вернуть обратно с возвратом денег.
 
Здравствуйте!

Обновленная версия доступна для скачивания на сайте.
 
Добрый день,

Спасибо! Опробую


С уважением, Андрей
 
Добрый день,

При работе с демо-версией возникли следующие вопросы:
  1. В работе с тестовой картой мне не понятно, кто отвечает за выбор набора карт для отображения и как это происходит? Если, например, у меня есть несколько перекрывающих друг друга карт различного масштаба, то для отображения некоторой области следует выбрать те карты, которые максимально подходят под выбранный масштаб и при этом максимально покрывают выбранную область. Мне следует это делать самостоятельно или есть встроенные методы для решения подобных задач?
  2. Предложенный вами вариант масштабирования через mapChangeViewScale не подходит, поскольку он масштабирует так же и навигационные символы. Имеются ли другие варианты получения изображения карты требуемого масштаба, не влияющие на наносимые символы? Тут же встаёт ещё вопрос (непосредственно связанный с первым), при наличии нескольких карт будет ли отображаться соседняя, если на неё при масштабировании попадет область видимости?
  3. Часто при просмотре примеров возникает проблема с кодировкой, приходится её каждый раз выставлять заново, причём не всегда одну и ту же (то KOI8-R, то KOI8-U, то cp-1251). И иногда даже не удается подобрать нужную. Какие кодировки используются в принципе в ваших примерах?
  4. Правильно ли я понимаю, что, чтобы работать с географическими координатами, необходимо знать самим географический центр карты (п. 3.6.5) и задать его при инициализации. Т.е. нет возможности сразу задать смещение в точку по каким-нибудь географическим координатам?
С уважением, Андрей
Изменено: Андрей Ловлин - 13.03.2020 11:28:01
 
1) Можно подготовить набор карт интерактивно, например, в ГИС Оператор. Открываете все, что есть. Проставляете картам границы видимости и сохраняете настройки в файл mpt.
Можно установить границы видимости программно.
Код
  // Запросить значения масштаба нижней и верхней границ видимости карты
  // hMap  - идентификатор открытой карты
  // number - номер пользовательской карты в цепочке(если number == 0, базовая карта)
  // По адресу bottomScale записывается знаменатель масштаба нижней границы видимости карты
  // По адресу topScale записывается знаменатель масштаба верхней границы видимости карты
  // При ошибке возвращает 0

_MAPIMP long int _MAPAPI mapGetSiteRangeScaleVisible(HMAP hMap, long int number, long int *bottomScale, long int *topScale);

  // Установить значения масштаба нижней и верхней границ видимости карты
  // hMap  - идентификатор открытой карты
  // number - номер пользовательской карты в цепочке(если number == 0, базовая карта)
  // bottomScale   - знаменатель масштаба нижней границы видимости карты
  // topScale   - знаменатель масштаба верхней границы видимости карты
  //              bottomScale <= topScale, иначе возвращает 0
  // При ошибке возвращает 0

_MAPIMP long int _MAPAPI mapSetSiteRangeScaleVisible(HMAP hMap, long int number, long int bottomScale, long int topScale);

Далее в каждом масштабе будут видны карты, включающие текущий масштаб в свой диапазон видимости.


2) При отображении карты в своем масштабе символы имеют тот размер, что задан в классификаторе.

Масштабирование символов в других масштабах может быть отключено или ограничено настройками в классификаторе.

3) В Linux функции с параметрами char * работают в KOI8-R. Функции WCHAR * - в UTF-16. Весь функционал имеет реализацию для  UTF-16.

4) После открыти карты можно сразу работать с геодезическими координатами.
Изменено: Oleg Belenkov - 13.03.2020 16:40:18
 
Добрый день,

Спасибо, за предоставленные ответы.

Предложенный Вами вариант однократно подготовить карты и потом отображать их в нужном масштабе и с нужным смещением наталкивает на мысль, что данная система заточена под неподвижные источники накладываемой на карту информации.
В моём случае это не так, мне требуется встроить картографию на подвижное судно. Через это, процесс выбора карт для отображения и их подготовки должен осуществляться перманентно.
Здесь же хочется уточнить, я правильно понимаю, что для того чтобы получить изображение в какой-то области, в каком-то масштабе, для начала требуется указать общий географический центр и общий масштаб всех карт, которые имеются в наличии?
После чего уже можно будет переходить по координатам и масштабам этих карт?

По поводу пункта 2, был бы очень признателен, если бы Вы указали пример или метод, которым можно настроить классификатор.

P.S. Признаться, задавая эти вопросы, я искренне надеялся, что окажется примерно так:  для решения моих задач потребуется указать ядру ГИС Конструктора путь к папке, в которой хранятся карты некоторого района.
После чего через координаты центра, масштаб, размеры окна отображения, физический размер пикселя и прочие необходимые параметры (возможно, указание на буфер памяти, куда сохранить карту) можно будет получить изображения, с которым я и буду работать.

С уважением, Андрей
Изменено: Андрей Ловлин - 16.03.2020 11:05:03
 
Реализовать движение объекта со сменой детальности отображения ничто не мешает.


Программа не сканирует постоянно диск (указанную папку), а перебирает карты в памяти.
Нужно открыть все, что есть. А отображаться будет то, что будет попадать в окно.

Если карты одного масштаба объединить в многолистовую карту (map), то будет работать и оптимизация по
используемой памяти (неиспользуемые листы будут выгружаться автоматически для соблюдения заданного ограничения
по доступной оперативной памяти).
Изменено: Oleg Belenkov - 16.03.2020 15:36:47
Страницы: 1 2 3 След.
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности