Можно ли читать файлы GML или KML с помощью Fiona?

Я хотел бы знать, возможно ли читать/записывать файлы GML (или даже файлы KML) с помощью Fiona.

В документах Фионы не указано, какие драйверы мы можем использовать. Я прочитал несколько ответов о доступных драйверах, но до сих пор не нашел правильного ответа.

Эти два разных предложения выводят разное количество драйверов. Первый не включает GML или KML (на самом деле поддерживается очень мало форматов).

print(fiona.supported_drivers)

vs

print('\n'.join(sorted(fiona.drivers().drivers())))

Я знаю, как это сделать с помощью GDAL/OGR, но я хочу сделать то же самое с помощью Fiona, если это возможно.


person Daniel    schedule 11.11.2018    source источник


Ответы (2)


Для чтения форматов файлов KML и GML двоичные файлы OGR, распространяемые с используемой вами реализацией Fiona, должны быть скомпилированы с помощью libexpat или Xerces (парсеры XML). Если эти библиотеки существуют в той же установке, что и ogr.dll (Windows), ogr.so (Linux), используемые Фионой, то, скорее всего, доступна поддержка чтения. Если нет, то будет доступна только поддержка по записи.

person LuisTavares    schedule 14.11.2018
comment
Означает ли это, что мы должны использовать GDAL/OGR для работы с большинством векторных форматов и использовать Fiona только для работы с очень немногими форматами, доступными в соответствии с (fiona.supported_drivers? Таким образом, Fiona очень ограничена, не так ли? есть ли способ заставить Фиона работать с другими форматами, такими как GML или KML?Что обычно делают профессионалы?Спасибо - person Daniel; 15.11.2018
comment
Я думаю, главная цель Фионы - предоставить данные Шейпли. Поскольку Shapely не может читать многие форматы, Фионе также не нужно писать во многих форматах. Если мы хотим преобразовать данные между различными векторными форматами, лучше использовать OGC. Однако мы также можем использовать OGR для предоставления данных Shapely, поэтому в большинстве случаев стоит работать с OGC, а не с Фионой. Буду признателен за некоторые мнения по этому поводу. Спасибо - person Daniel; 15.11.2018
comment
...а Shapely — это оболочка для GEOS C++. Оба проекта существуют, потому что исходные привязки Python OGR, сгенерированные SWIG, не очень питонические (нет даже документированного API, единственная доступная документация - API OGR C++) - person LuisTavares; 16.11.2018
comment
В любом случае, вам не помешает попытаться прочитать/записать GML/KML и посмотреть, что произойдет. Только не думайте, что, поскольку драйверы не указаны в списке, функциональности там нет ... как вы сказали, разные строки печатают разные драйверы. Кроме того, списки драйверов() относятся только к поддержке чтения. - person LuisTavares; 16.11.2018
comment
О, я не знал, что списки драйверов () относятся только к поддержке чтения. Спасибо еще раз. - person Daniel; 16.11.2018

Я только что узнал, что в новейшей версии Fiona добавлена ​​поддержка чтения и записи файлов GML.

person Daniel    schedule 27.05.2019
comment
Не могли бы вы добавить объяснение, как читать и писать их в новейшей версии? - person sanyassh; 27.05.2019
comment
Вам необходимо установить Fiona 1.8.4 (Fiona 1.7.10 не предлагала никаких драйверов для чтения или записи файлов GML). Затем вы читаете файл GML так же, как и любой другой формат (shapefile, geojson и т. д.). Fiona всегда работает одинаково, независимо от формата файла, который она читает, потому что она всегда создает объект Collections (объект geojson, например словарь Python). Нет никакой разницы в том, как Фиона читает файлы между Фионой 1.7.10 и Фионой 1.8.4, разница заключается в количестве форматов, которые Фиона может читать в каждой версии. - person Daniel; 28.05.2019
comment
Просто примите во внимание, что файл GML представляет собой многослойный набор данных, поэтому, если ваш GML хранит больше, чем слой, вам сначала нужно будет выбрать, с каким из них работать. Посмотрите документацию Fiona, потому что там очень легко объясняется, как это сделать. Если у него есть только слой, это будет похоже на чтение любого файла с одним слоем (geojson, shape-файл и т. д.). Вы можете узнать название слоев, но напишите fiona.listlayers(путь). - person Daniel; 28.05.2019
comment
У меня есть пример того, как читать файл KML с Фионой здесь - person MCMZL; 08.11.2019