Страница 1 из 1
Распарсить kml
Добавлено: 23 май 2013, 21:13
Slinger
Есть такая задача. Есть пример kmz, прикреплён в аттаче. Векторные объекты, а самое вкусное, то бишь семантика, лежит в тэге kml_description. Вот тут самая проблема. Задача - открыть файл таким образом в гис-системе, чтобы она считала данные из тэга description, разобрала, где наименования колонок, а где их значения и при необходимости корректно экспортировала (в шейпы, mif/mid и т.д.). Единственное, что нормально открывает kmz/kml в данном случае это Google earth. Он корректно определяет наименования полей и их значения. А вот может кто встречал, чтобы можно было распарсить kml в какой-нибудь ГИСе так же, как это делает GE.
Способ, которым я пользуюсь сейчас, это при импорте kml указать в качестве дополнительного аттрибута тэг kml_description, тогда при импорте создастся колонка, содержащая строки из тэга. Но это не вариант, так как распарсиваться оно и не должно, плюс длина строки как правило превышает допустимый лимит в 254 символа (макс. длина символьного поля) и строка отрезается.
Re: Распарсить kml
Добавлено: 23 май 2013, 21:15
Донецков
Открывал в Global Mapper, сохранял в mif/mid и руками редактировал mid в текстовом редакторе...

Re: Распарсить kml
Добавлено: 23 май 2013, 22:19
ericsson
У вас в элементе description - таблица в HTML, естественно. Превратить ее в набор записей fieldname=value с разделителем - элементарно скриптом или в текстовом редакторе с поддержкой регулярных выражений. А дальше вопрос, какой формат нужен вам на входе, потому что если там набор полей у всех объектов одинаковый, то это можно раскрыть дальше, а если разный - то не так-то просто без программирования.
Re: Распарсить kml
Добавлено: 23 май 2013, 23:09
Slinger
Поля разные. Я только пример привёл. То есть видимо всё равно придётся программить, только вот вопрос где конкретно. Перед импортом, или допустим уже после импортирования в аркгисовскую .gdb (там длина char строки 2048 символов, что впринципе полностью умещает мой дескрипшн). Можно впринципе поступать так, написав обработчик для калькулятора полей или типа того, который создаёт новые поля и помещает в них значение. Другой вопрос опять-таки "как", потому как для арки я ни разу не программил.
Re: Распарсить kml
Добавлено: 23 май 2013, 23:26
ericsson
Для начала всегда можно сэкономить длину, если убить тэги. Маркеры секции CDATA там лишние, их можно убить. Также - элементы html, body. Заголовочную первую строку - туда же. Далее - заменить пару из закрывающего и открывающего tr на разделитель, пару закрывающего и открывающего td на "=" а одиночные td на ". Экономия уже существенная. Аналогично можно превратить эту таблицу в JSON-формат, например. Пачка регулярных выражений это сделает. При импорте нужно будет найти все значения того что до знака равенства, соорудить таблицу, а дальше заполнять ее, обходя все записи..
Re: Распарсить kml
Добавлено: 23 май 2013, 23:51
Slinger
Тэги убивал да, экономия разумеется есть, но опять же, если семантики я вытащил много, дескрипшн длинный и при импорте в символьную строку (254 символа) семантика режется.
А что подразумевается под импортом таблицы в JSON ? Какой таблицы ? Можно преобразовать kml в geojson или речь о другом ?
Re: Распарсить kml
Добавлено: 24 май 2013, 08:54
ericsson
Я имел в виду то, что превратить html-таблицу в json-таблицу очень просто. А дальше, повторюсь, все зависит от возможностей того софта, в который вы это собираетесь втягивать - я их просто не знаю.
Re: Распарсить kml
Добавлено: 24 май 2013, 09:33
Slinger
Каким образом можно превратить html-таблицу в json ? И, скажем так, что с ней потом делать и куда её загонять
Софт любой практически (mapinfo, arcgis, GM, QGIS и прочее), я если что экспортну. В моём случае важны сами векторные данные и семантика. Стилистика не интересна.
Re: Распарсить kml
Добавлено: 24 май 2013, 09:47
trir
Кодить можно на чём угодно, конвертировать в gml или загружать в БД, тут даже ГИС не нужна...