Fiona 可以读取 GML 或 KML 文件吗?

3

我想知道是否可以使用Fiona读写GML文件(甚至是KML文件)。

Fiona文档没有指定我们可以使用哪些驱动程序。我阅读了一些有关可用驱动程序的答案,但我仍然没有找到正确的答案。

这两个不同的句子打印出不同数量的驱动程序。第一个句子不包括GML或KML(实际上支持的格式很少)。

print(fiona.supported_drivers)

vs

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

我知道如何使用GDAL/OGR进行操作,但如果可能的话,我想使用Fiona来完成相同的操作。

2个回答

1
为了读取KML和GML文件格式,您使用的Fiona实现需要编译支持libexpat或Xerces(XML解析器)的OGR二进制文件。如果这些库存在于安装了ogr.dll(Windows)、ogr.so(Linux)的同一位置,则很可能可以进行读取支持。否则,只有写入支持可用。

这是否意味着我们应该使用GDAL/OGR来处理大多数矢量格式,只有在(fiona.supported_drivers)中可用的非常少数格式才使用Fiona?这样,Fiona的功能非常有限,不是吗?我能否让Fiona与其他格式(如GML或KML)一起使用?专业人士通常怎么做?谢谢。 - Daniel
我猜Fiona的主要目的是为Shapely提供数据。由于Shapely无法读取许多格式,因此Fiona也不需要写入许多格式。如果我们想在不同的矢量格式之间转换数据,最好使用OGC。但是,我们也可以使用OGR向Shapely提供数据,因此大多数情况下,与其使用Fiona而不是OGC工作,还不如使用OGC。我希望能听到一些意见。谢谢。 - Daniel
...而Shapely是围绕GEOS C++的一个包装器。这两个项目的存在是因为原始的SWIG生成的OGR Python绑定不太“Pythonic”(甚至没有文档API可用,唯一可用的文档是OGR C++ API)。 - LuisTavares
无论如何,尝试阅读/编写GML/KML并查看发生了什么是没有坏处的。只是不要认为因为驱动程序没有列出来,就意味着功能不存在...正如你所说,不同的行打印了不同的驱动程序。此外,drivers()列表仅适用于读取支持。 - LuisTavares
哦,我不知道drivers()列表只适用于读取支持。再次感谢。 - Daniel

0

我刚刚发现Fiona的最新版本增加了读写GML文件的支持。


1
请问您能否添加一些关于如何在最新版本中读写它们的说明? - sanyassh
1
你需要安装Fiona 1.8.4版本(Fiona 1.7.10版本没有提供任何读写GML文件的驱动)。然后,你可以像读取其他格式(shapefile、geojson等)一样读取GML文件。无论它正在读取哪种文件格式, Fiona总是以相同的方式工作,因为它始终创建Collections对象(geojson对象,就像Python字典)。Fiona在读取文件时,在Fiona 1.7.10和Fiona 1.8.4之间没有区别,不同之处在于Fiona每个版本可以读取的格式数量。 - Daniel
请注意,GML文件是一个多层数据集,因此如果您的GML存储了多个图层,则首先需要选择要处理哪一个。查看Fiona的文档,因为它告诉您如何轻松实现这一点。如果它只有一个图层,那么就像读取任何单层文件(geojson、shapefile等)一样。您可以通过编写fiona.listlayers(path)来了解各个图层的名称。 - Daniel
1
我有一个使用Fiona读取KML文件的示例在这里 - MCMZL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接