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

Использование GMLAPI

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Использование GMLAPI, Импорт карт из формата GML во внутренний формат MAPAPI
 
Необходимо обеспечить работу программного обеспечения с данными формата GML. В ПО "Панорама" есть импорт данных из формата GML, при котором создается новая карта формата SIT.
В GisToolKit есть GMLAPI. Однако, подробного описания его использования нет. По описанным методам в файле gmlapi.h получилось прочитать данные из файла формата  GML:

Код
// Cоздание объектов из файла gml/xml
 // hMap, hSite - идентификатор карты
 // xmlname - имя входного файла gml/xml или файла gml OGC WFS
 // protocol   - признак ведения протокола ошибок в формате JSON (запрашивается gmlGetGmlReport)
 // squareCode - код создаваемых площадей
 // pointCode  - код создаваемых точечных объектов
 // lineCode - код создаваемых линий
 // textCode - код создаваемых подписей
 // hwnd - идентификатор окна для приема сообщений или ноль, посылаются сообщения WM_PROGRESSBAR
 // Возвращает идентификатор данных HGMLCLASS, который
 // должен быть освобожден функцией mapFreeGmlClassHandle
 // При ошибке возвращает 0

_MAPIMP HGMLCLASS _MAPAPI gmlCreateObjectsFromXml(HMAP hMap, HSITE hSite, const WCHAR* xmlname,
               long int squareCode, long int pointCode,  long int lineCode, long int textCode);
 
Следующий метод вернул правильное значение объектов записанных в  файле GML:
Код
// Запросить количество созданных объектов
 // hGmlClass - идентификатор данных
 // Возвращает количество созданных объектов
 // При ошибке возвращает 0

_MAPIMP long int _MAPAPI gmlGetGmlCreateObjectsCount(HGMLCLASS hGmlClass);

Как прочитанные объекты нанести на карту?
 
Функция gmlCreateObjectsFromXml сразу наносит объекты на карту. Карта не создается. Она передается входными параметрами HMAP\HSITE.
gmlGetGmlCreateObjectsCount возвращает число уже обработанных объектов.
Вопрос в том, какие метаданные содержит GML для идентификации вида объекта. Это решение не стандартизовано.
Дополнительную информацию по варианту организации данных в GML можно посмотреть здесь - http://gistoolkit.ru/download/doc/specgml4topo.pdf
Как  и для конверторов из SHP, MIF\MID и других в классификаторе RSC должны  быть настроены ключи семантик на имена атрибутов (узлов GML в данном  случае).
 
При попытке загрузить GML созданный из SHP функция gmlCreateObjectsFromXml не создает объектов.
Так же объекты не грузятся при импорте через ПанорамаМини. Хотя исходный SHP загружается без проблем.
В чем может быть проблема?

Приложение:
GML: https://cloud.mail.ru/public/FCbh/CYjN8KNFN
SHP: https://cloud.mail.ru/public/EPRf/fkYWVEGgx

Диалог загрузки GML в ПанорамаМини:
https://cloud.mail.ru/public/GMhM/DF7knWwKr
 
Получаем GML с помощью утилиты ogr2ogr:
Код
ogr2ogr -f GML out.gml in.shp
Изменено: Андрей Водилов - 10.11.2017 11:57:24
 
GML, который Вы передали, сформирован по стандарту версии 2.
У нас реализована версия 3. Ищется рекомендуемый атрибут gml:id у главного узла объекта.
Для полигонов применяются узлы <gml:exterior> а не <gml:outerBoundaryIs>.
И у нас есть ошибка, которая проявляется, если после имени узла идет перенос строки.
Изменения в программу для повышения совместимости с разными версиями добавим,но пока так.
 
Сгенерировали GML версии 3 с атрибутами gml:id и <gml:exterior>:
https://cloud.mail.ru/public/BmH4/unTtigTTt

Теперь при загрузке пишет, что в GML ноль объектов.
Попытки удалить переносы строк и пробелы между тэгами не помогли.
Что конкретно исправить в файле, чтобы он загрузился?
 
В библиотеках для Windows оба файла загрузились корректно.
В понедельник обновим библиотеки и выложим на сайт. Спасибо за информацию!
В файле версии 3 проблемой было отсутствие кода EPSG и узел <ogr:featureMember> - ожидался <gml:featureMember>
Код EPSG нужен для определения порядка осей в описании координат.
Для 4326 (WGS-84) порядок Lat\Lon - (http://spatialreference.org/ref/epsg/4326/gml/) - Широта\Долгота.
В Вашем примере обратный порядок Lon\Lat. Добавили проверку по габаритам, но это сработает только для областей за +\- 90 градусов по долготе..
Страницы: 1
Читают тему (гостей: 1)



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

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