【问题标题】:Is it possible to read GML or KML files with Fiona?是否可以使用 Fiona 读取 GML 或 KML 文件?
【发布时间】:2019-04-14 10:19:29
【问题描述】:

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

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

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

print(fiona.supported_drivers)

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

我知道如何使用 GDAL/OGR 来做到这一点,但如果可能的话,我想使用 Fiona 来做同样的事情。

【问题讨论】:

    标签: python kml gml fiona


    【解决方案1】:

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

    【讨论】:

    • 这是否意味着我们应该使用 GDAL/OGR 来处理大多数矢量格式,并且只使用 Fiona 来处理根据 (fiona.supported_drivers? 提供的极少数格式?这种方式 Fiona 非常有限,不是吗?有什么办法可以让 Fiona 使用其他格式,如 GML 或 KML?专业人士通常会做什么?谢谢
    • 我猜Fiona的主要目的是为Shapely提供数据。由于 Shapely 无法读取多种格式,因此 Fiona 也不需要编写多种格式。如果我们想在不同的矢量格式之间转换数据,最好使用 OGC。但是,我们也可以使用 OGR 向 Shapely 提供数据,因此大多数时候使用 OGC 而不是使用 Fiona 是值得的。我会很感激对此的一些意见。谢谢
    • ...Shapely 是 GEOS C++ 的包装器。这两个项目都存在是因为原始 SWIG 生成的 OGR python 绑定不是很“pythonic”(甚至没有记录的 API,唯一可用的文档是 OGR C++ API)
    • 无论如何,尝试读/写 GML/KML 并看看会发生什么不会对您造成伤害。只是不要以为因为没有列出驱动程序,所以功能不存在……正如您所说,不同的行正在打印不同的驱动程序。此外,drivers() 列表仅与读取支持有关。
    • 哦,我不知道驱动程序()列表仅适用于阅读支持。再次感谢。
    【解决方案2】:

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

    【讨论】:

    • 能否请您添加一些说明如何在最新版本中读取和写入它们?
    • 您需要安装 Fiona 1.8.4(Fiona 1.7.10 没有提供任何驱动程序来读取或写入 GML 文件)。然后,您读取 GML 文件的方式与读取任何其他格式(shapefile、geojson 等)的方式相同。无论读取何种文件格式,Fiona 始终以相同的方式工作,因为它始终创建一个 Collections 对象(geojson 对象,如 Python 字典)。 Fiona 1.7.10 和 Fiona 1.8.4 的 Fiona 读取文件的方式没有区别,不同的是 Fiona 在每个版本中可以读取的格式数量。
    • 请考虑 GML 文件是一个多层数据集,因此如果您的 GML 存储的层不止一层,您首先必须选择使用哪一个。查看 Fiona 的文档,因为它告诉您如何非常轻松地做到这一点。如果它只有一个层,那就像读取任何单层文件(geojson、shapefile 等)一样。您可以知道图层的名称,但要编写 fiona.listlayers(path)。
    • 我有一个关于如何使用 Fiona here 读取 KML 文件的示例
    猜你喜欢
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 2022-07-11
    • 2015-05-11
    • 1970-01-01
    相关资源
    最近更新 更多