GDAL, SXF и семантика
-
- Активный участник
- Сообщения: 175
- Зарегистрирован: 19 ноя 2012, 15:59
- Репутация: 6
GDAL, SXF и семантика
Добрый день.
Возникли проблемы во время написания конвертера из SXF в формат MapInfo. Может кто нибудь сможет проконсультировать или посоветовать что либо, буду очень благодарен.
Сравниваю то, что умеет делать мой конвертер на базе GDAL (SXF Translator, Definition of classes for OGR SXF Datasource; версия от 2014 февраль) в сравнение с экспортом из ГИС Панорама. Для примера взял Тверскую область (O-36-070.sxf) и классификатор "100t05g.rsc". Возьму для примера Layer 12_A (НП_КВАРТАЛЫ).
Проблемы следующие:
1) Панорама экспортирует таблицу с ясными названиями колонок и значений (например: "Плотность застройки": "плотно застроенные"), у меня получаются названия колонок типа как: SC_40, SC_45, SC_243. А значения для SC_45: 1, 2, 3 (привел 3 варианта значений) -- то есть у Панорамы получаются колонки с ясными названиями и значениями, а у меня только некие коды которые я не умею интерпретировать корректно.
2) Могу видеть что Панорама извлекла 6 колонок со значениями кроме базовых:
LayerName Char (32) ;
LayerNumber Integer ;
ObjectName Char (32) ;
ObjectCode Char (32) ;
ObjectNumber Integer ;
ObjectLocal Char (32) ;
ObjectKey Char (32) ;
СОБСТВЕН_НАЗВАН Char (254) ;
ОТН_ВЫСОТА Decimal (18, 1) ;
СОСТОЯНИЕ Char (32) ;
ПЛОТНОСТЬ_ЗАСТРОЙКИ Char (32) ;
НАЗНАЧЕНИЕ_ОБЪЕКТА Char (254) ;
ТИП_ДОРОГ Char (32) ;
ПРИНАДЛЕЖН_НП Char (32) ;
Моя же программа извлекла 3 колонки кроме базовых:
ogc_fid Integer ;
CLCODE Integer (10) ;
CLNAME Char (32) ;
OBJECTNUMB Integer (10) ;
TEXT Char (254) ;
SC_45 Float ;
SC_243 Float ;
SC_40 Float ;
Здесь две проблемы:
а) Панорама извлекает больше колонок со значениями
б) У Панорамы есть колонки с измерениями (ОТН_ВЫСОТА), а у меня только семантические коды.
3) Панорама извлекает корректный код объекта "ObjectKey" (к примеру, "S0043300000"), который однозначно позволяет классифицировать объект. Моя программа умеет извлекать только поле аналогичное "ObjectCode" ( к примеру "45 160 000"), которое не позволяет однозначно классифицировать объект.
Перечислил возникшие проблемы. И я изучал код относящийся к формату SXF в GDAL source (2014 февраль, и сейчас сравнил с текущей версией - принципиальных критических различий не заметил ) и мне показалось, что желаемой мне информации пока еще не присутствует в GDAL SXF source -- но весьма вероятно, что я в чем то просто не разобрался.
Может кто нибудь из Вас мне в этом сможет помочь и посоветовать, в каком направлении двигаться или на что обратить внимание, чтобы разрешить указанные мною проблемы ( без них, конечно, мой конвертер бесполезен на практике... ).
Спасибо
С уважением, Александр
Возникли проблемы во время написания конвертера из SXF в формат MapInfo. Может кто нибудь сможет проконсультировать или посоветовать что либо, буду очень благодарен.
Сравниваю то, что умеет делать мой конвертер на базе GDAL (SXF Translator, Definition of classes for OGR SXF Datasource; версия от 2014 февраль) в сравнение с экспортом из ГИС Панорама. Для примера взял Тверскую область (O-36-070.sxf) и классификатор "100t05g.rsc". Возьму для примера Layer 12_A (НП_КВАРТАЛЫ).
Проблемы следующие:
1) Панорама экспортирует таблицу с ясными названиями колонок и значений (например: "Плотность застройки": "плотно застроенные"), у меня получаются названия колонок типа как: SC_40, SC_45, SC_243. А значения для SC_45: 1, 2, 3 (привел 3 варианта значений) -- то есть у Панорамы получаются колонки с ясными названиями и значениями, а у меня только некие коды которые я не умею интерпретировать корректно.
2) Могу видеть что Панорама извлекла 6 колонок со значениями кроме базовых:
LayerName Char (32) ;
LayerNumber Integer ;
ObjectName Char (32) ;
ObjectCode Char (32) ;
ObjectNumber Integer ;
ObjectLocal Char (32) ;
ObjectKey Char (32) ;
СОБСТВЕН_НАЗВАН Char (254) ;
ОТН_ВЫСОТА Decimal (18, 1) ;
СОСТОЯНИЕ Char (32) ;
ПЛОТНОСТЬ_ЗАСТРОЙКИ Char (32) ;
НАЗНАЧЕНИЕ_ОБЪЕКТА Char (254) ;
ТИП_ДОРОГ Char (32) ;
ПРИНАДЛЕЖН_НП Char (32) ;
Моя же программа извлекла 3 колонки кроме базовых:
ogc_fid Integer ;
CLCODE Integer (10) ;
CLNAME Char (32) ;
OBJECTNUMB Integer (10) ;
TEXT Char (254) ;
SC_45 Float ;
SC_243 Float ;
SC_40 Float ;
Здесь две проблемы:
а) Панорама извлекает больше колонок со значениями
б) У Панорамы есть колонки с измерениями (ОТН_ВЫСОТА), а у меня только семантические коды.
3) Панорама извлекает корректный код объекта "ObjectKey" (к примеру, "S0043300000"), который однозначно позволяет классифицировать объект. Моя программа умеет извлекать только поле аналогичное "ObjectCode" ( к примеру "45 160 000"), которое не позволяет однозначно классифицировать объект.
Перечислил возникшие проблемы. И я изучал код относящийся к формату SXF в GDAL source (2014 февраль, и сейчас сравнил с текущей версией - принципиальных критических различий не заметил ) и мне показалось, что желаемой мне информации пока еще не присутствует в GDAL SXF source -- но весьма вероятно, что я в чем то просто не разобрался.
Может кто нибудь из Вас мне в этом сможет помочь и посоветовать, в каком направлении двигаться или на что обратить внимание, чтобы разрешить указанные мною проблемы ( без них, конечно, мой конвертер бесполезен на практике... ).
Спасибо
С уважением, Александр
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: GDAL, SXF и семантика
1) Такие названия сделаны намеренно, потому как я слабо представляю как написать sql запрос (а GDAL это позволяет) с полем которое называется "Плотность застройки". Кроме того, не все пользователи из России и с таким названием поля в другой локали пользователи просто увидят ?????? ?????
Поэтому, вопрос извлечения названий из rsc отдан на откуп разработчику - т.е. вам. Берите документацию, которая приведена на странице драйвера и разбирайтесь. В GDAL пока поддержки алиасов для полей нет.
2) У вас очень старый GDAL- как вы написали (версия от 2014 февраль). Там был ряд существенных исправлений. Так что надо брать либо последний (1.11.1 - от сентября 2014) а еще лучше собрать из транка - там как раз есть фикс для SXF (http://trac.osgeo.org/gdal/ticket/5647)
3) Вот тут не понятно, для кодов создается дополнительное поле куда из классификатора пишутся значения если такие имеются. Сам код остален - опять же для ускорения выполнения SQL запросов - по цифровому полю это быстрее. Если есть пример, когда такого нет - надо смотреть на данные.
По поводу ObjectKey - надо опять смотреть данные.
Поэтому, вопрос извлечения названий из rsc отдан на откуп разработчику - т.е. вам. Берите документацию, которая приведена на странице драйвера и разбирайтесь. В GDAL пока поддержки алиасов для полей нет.
2) У вас очень старый GDAL- как вы написали (версия от 2014 февраль). Там был ряд существенных исправлений. Так что надо брать либо последний (1.11.1 - от сентября 2014) а еще лучше собрать из транка - там как раз есть фикс для SXF (http://trac.osgeo.org/gdal/ticket/5647)
3) Вот тут не понятно, для кодов создается дополнительное поле куда из классификатора пишутся значения если такие имеются. Сам код остален - опять же для ускорения выполнения SQL запросов - по цифровому полю это быстрее. Если есть пример, когда такого нет - надо смотреть на данные.
По поводу ObjectKey - надо опять смотреть данные.
-
- Активный участник
- Сообщения: 175
- Зарегистрирован: 19 ноя 2012, 15:59
- Репутация: 6
Re: GDAL, SXF и семантика
Большое спасибо. Будем разбираться
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9128
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: GDAL, SXF и семантика
а если внутри юникод, то почему должны возникнуть проблемы с sql запросом с полем названным кириллицей?
пристегивайтесь, турбулентность прямо по курсу
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: GDAL, SXF и семантика
Я и не писал, что будут проблемы с запросом. Проблемы будут с его составлением - попробуйте написать что-то на корейском или испанском - на клаве клавиш нет, в системе шрифтов и т.п. Аналогичная проблема была, когда пути потребовалось писать в UTF8 в консоли Windows (была большая тема по этому поводу).
Для обхода таких проблем - придумали псевдонимы (aliases) - хочешь на своем языке пиши, хочешь на английском.
При этом на имена полей накладываются ограничения, но при наличии псевдонима - это не существенно.
Ну осталось это в GDAL реализовать, чем не тема на следующий GSOC?
Я даже для вывода наименований слоев сделал отдельный ключ - для вывода кратких имен слоев в SXF - они преимущественно на английскои и длинных - на русском. И это дало результат - в рассылке и тикетах писали примеры запросов, когда что-то не работало в SXF (причем иностранцы). А если бы человеку вывелисб бы непонятные буковки, он бы и не репортил вовсе.
Для обхода таких проблем - придумали псевдонимы (aliases) - хочешь на своем языке пиши, хочешь на английском.
При этом на имена полей накладываются ограничения, но при наличии псевдонима - это не существенно.
Ну осталось это в GDAL реализовать, чем не тема на следующий GSOC?
Я даже для вывода наименований слоев сделал отдельный ключ - для вывода кратких имен слоев в SXF - они преимущественно на английскои и длинных - на русском. И это дало результат - в рассылке и тикетах писали примеры запросов, когда что-то не работало в SXF (причем иностранцы). А если бы человеку вывелисб бы непонятные буковки, он бы и не репортил вовсе.
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: GDAL, SXF и семантика
Я подход, когда поле можно запросить по номеру N с фиксированным алиасом COLN, видел только в мапифно. В стандарте SQL найти такого очевидного подхода не смог, а как обстоят дела в других SQL-диалектах?
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: GDAL, SXF и семантика
Проблема не в стандарте SQL, GDAL вполне вероятно съест такой запрос, а в сложности отладки и написания таких запросов если поле в локали отличной от моей или английской.
Да, и самое интересное - в самом формате SXF нетимен полей (если я что-то пропустил - ткните носом)! Да, это есть в RSC но:
1. Он не является частью формата
2. Нет гарантии что он он не изменится без обратной совместимости
3. То что мы сейчас из него читаем название слоев и некоторых кодов атрибутов - это скорее бонус, чем требование формата. Да и без RSC записи будут раскиданы по слоям, стандартным для ОСМ.
Да, и самое интересное - в самом формате SXF нетимен полей (если я что-то пропустил - ткните носом)! Да, это есть в RSC но:
1. Он не является частью формата
2. Нет гарантии что он он не изменится без обратной совместимости
3. То что мы сейчас из него читаем название слоев и некоторых кодов атрибутов - это скорее бонус, чем требование формата. Да и без RSC записи будут раскиданы по слоям, стандартным для ОСМ.
-
- Активный участник
- Сообщения: 175
- Зарегистрирован: 19 ноя 2012, 15:59
- Репутация: 6
Re: GDAL, SXF и семантика
Добрый день, Дмитрий!Дмитрий Барышников писал(а): 3) Вот тут не понятно, для кодов создается дополнительное поле куда из классификатора пишутся значения если такие имеются. Сам код остален - опять же для ускорения выполнения SQL запросов - по цифровому полю это быстрее. Если есть пример, когда такого нет - надо смотреть на данные.
По поводу ObjectKey - надо опять смотреть данные.
Поясню проблему, которую не удается разрешить (причем я пересобрал GDAL и свою программу, взял последнюю стабильную версию, и внес fix, который посоветовали).
Итак, на примере. Работаю со слоем 16 (DIKEEXCAVATION_L, НАСЫПИ, ВЫЕМКИ, ЭСТАКАДЫ, ЛЕСТНИЦЫ, линейный).
Панорама извлекает для O36-71 (Тверь) для слоя 16 (DIKEEXCAVATION_L), к примеру, следующие объекты:
Код: Выделить всё
НАСЫПИ НА УЛУЧ.ГР.ДОР.(2стлр.) - ObjectKey = L00623500007, ObjectCode = 62350000
НАСЫПИ НА ШОССЕ (двусторонние) - ObjectKey =L00623500009, ObjectCode = 62350000
НАСЫПИ НА УСОВЕР.ШОССЕ(2стор.) - ObjectKey =L006235000010, ObjectCode = 62350000
В коде программы драйвера GDAL SXF, как мне кажется, отсутствует вычисление ObjectKey. Проблема в том, что мне не удается этот код написать самому:
Описание структуры:
Код: Выделить всё
typedef struct{
GUInt32 nID; /* Identifier of the beginning of record (0x7FFF7FFF) */
GUInt32 nFullLength; /* The overall length of record (with the title) */
GUInt32 nGeometryLength; /* Length of certificate (in bytes) */
GUInt32 nClassifyCode; /* Classification code */
GUInt16 anGroup[2]; /* 0 - group no, 1 - no in group */
GByte nRef[3]; /* Reference data */
GByte byPadding;
GUInt32 nPointCount; /* Point count */
GUInt16 nSubObjectCount; /* The sub object count */
GUInt16 nPointCountSmall; /* Point count in small geometries */
} SXFRecordHeader;
nClassifyCode - ObjectCode
где искать эту информацию мне? Искал в "anGroup", "nRef", "nSubObjectCount" -- и пока без результата...
Надеюсь кто нибудь из Вас сможет мне подсказать или посоветовать. За это заранее премного благодарен.
С уважением, Глушко Александр
(ИБРАЭ РАН)
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: GDAL, SXF и семантика
1. Для начала надо смотреть спецификацию sxf. Ссылку я приводил выше. Есть ли там такая информация?
2. Вы можете привести порядок действий что бы увидеть code и key в той же Панорама мини? Скриншот тоже бы не помешал. Я посмотрю есть ли у имеющихся у меня карт такая информация. Просто из вашего текста мне не понятно как посмотреть оба кода.
[ Сообщение с мобильного устройства ]
2. Вы можете привести порядок действий что бы увидеть code и key в той же Панорама мини? Скриншот тоже бы не помешал. Я посмотрю есть ли у имеющихся у меня карт такая информация. Просто из вашего текста мне не понятно как посмотреть оба кода.
[ Сообщение с мобильного устройства ]
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: GDAL, SXF и семантика
3. Не понятно о каком патче (fix) идет речь. Вообще что вы сделали? Я же написал, что все фиксы применены в транке.
4. Другие ошибки были исправлены в вашей новой сборке (количество полей и т.п.)?
4. Другие ошибки были исправлены в вашей новой сборке (количество полей и т.п.)?
-
- Активный участник
- Сообщения: 175
- Зарегистрирован: 19 ноя 2012, 15:59
- Репутация: 6
Re: GDAL, SXF и семантика
Добрый день!Дмитрий Барышников писал(а):1. Для начала надо смотреть спецификацию sxf. Ссылку я приводил выше. Есть ли там такая информация?
2. Вы можете привести порядок действий что бы увидеть code и key в той же Панорама мини? Скриншот тоже бы не помешал. Я посмотрю есть ли у имеющихся у меня карт такая информация. Просто из вашего текста мне не понятно как посмотреть оба кода.
[ Сообщение с мобильного устройства ]
1) Обратился к документации http://gistoolkit.ru/download/doc/sxf4bin.pdf
И там действительно есть вполне воспринимаемое для меня описание формата и теперь я явно вижу и понимаю ссылку на семантику для объекта -- буду вероятно сегодня / завтра пробовать с ней работать, надеюсь, что это то что надо.
2) Спасибо за предложение - я подумаю, как бы мог ответить на Ваше предложение - дело, в том, что в Институте другой сотрудник специалист по Панораме, а мне передает экспортные данные для моей работы и программы.
Большое спасибо!
-
- Активный участник
- Сообщения: 175
- Зарегистрирован: 19 ноя 2012, 15:59
- Репутация: 6
Re: GDAL, SXF и семантика
3. Fix взял по ссылке http://trac.osgeo.org/gdal/changeset/27686Дмитрий Барышников писал(а):3. Не понятно о каком патче (fix) идет речь. Вообще что вы сделали? Я же написал, что все фиксы применены в транке.
4. Другие ошибки были исправлены в вашей новой сборке (количество полей и т.п.)?
А ссылку взял по Вашей ссылке: http://trac.osgeo.org/gdal/ticket/5647
Может я что то не понял, но я перенес правку из Fix ( http://trac.osgeo.org/gdal/changeset/27686 ) в код драйвера SXF ?
4. По поводу других ошибок -- планирую с ними заниматься по порядку: сейчас семантика для объекта (включая ObjectKey), потом семантика для полей слоев (здесь вероятно постараюсь разобраться и с количеством полей и их соответствием с Панорамой).
Большое спасибо. С уважением, Александр
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: GDAL, SXF и семантика
По п.3 - надо просто взять код из svn или у нас нас из репозитория на github и собрать. Версию ту что в транке - сейчас там 2.0 dev. Все патчи и фиксы там уже применены.
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
- gimran
- Гуру
- Сообщения: 1902
- Зарегистрирован: 07 июл 2010, 15:43
- Репутация: 242
- Откуда: Уфа
Re: GDAL, SXF и семантика
Простите за небольшой оффтоп: можно ли стили из Панорамы переконвертировать в кугис?
Ссори за оффтоп, просто вопрос отдельной темы не заслуживает.
[ Сообщение с мобильного устройства ]
Ссори за оффтоп, просто вопрос отдельной темы не заслуживает.
[ Сообщение с мобильного устройства ]
- gimran
- Гуру
- Сообщения: 1902
- Зарегистрирован: 07 июл 2010, 15:43
- Репутация: 242
- Откуда: Уфа
Re: GDAL, SXF и семантика
Под стилями имел ввиду классификаторы.
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей