Skip to main content

Fiona 读写空间数据文件

项目描述

Fiona 是GDAL为 Python 程序员提供的简洁灵活的矢量 API。

https://github.com/Toblerity/Fiona/workflows/Linux%20CI/badge.svg?branch=maint-1.8 https://ci.appveyor.com/api/projects/status/github/Toblerity/Fiona?svg=true https://coveralls.io/repos/Toblerity/Fiona/badge.svg

Fiona 的设计简单可靠。它专注于以标准 Python IO 样式读取和写入数据,并依赖于熟悉的 Python 类型和协议,例如文件、字典、映射和迭代器,而不是特定于 OGR 的类。Fiona 可以使用多层 GIS 格式和压缩的虚拟文件系统读取和写入真实世界的数据,并且可以轻松地与其他 Python GIS 包(例如pyprojRtreeShapely )集成。Fiona 仅在 CPython 版本 2.7 和 3.4+ 上受支持。

有关更多详细信息,请参阅:

用法

收藏品

从fiona.open ()函数返回的类文件Collection对象中读取和写入记录。记录是以 GeoJSON 格式建模的映射。他们没有自己的空间方法,所以如果你想对他们做任何花哨的事情,你可能需要 Shapely 或类似的东西。这是一个使用 Fiona 从一个数据文件中读取一些记录、更改它们的几何属性并将它们写入新数据文件的示例。

import fiona

# Open a file for reading. We'll call this the "source."

with fiona.open('tests/data/coutwildrnp.shp') as src:

    # The file we'll write to, the "destination", must be initialized
    # with a coordinate system, a format driver name, and
    # a record schema.  We can get initial values from the open
    # collection's ``meta`` property and then modify them as
    # desired.

    meta = src.meta
    meta['schema']['geometry'] = 'Point'

    # Open an output file, using the same format driver and
    # coordinate reference system as the source. The ``meta``
    # mapping fills in the keyword parameters of fiona.open().

    with fiona.open('test_write.shp', 'w', **meta) as dst:

        # Process only the records intersecting a box.
        for f in src.filter(bbox=(-107.0, 37.0, -105.0, 39.0)):

            # Get a point on the boundary of the record's
            # geometry.

            f['geometry'] = {
                'type': 'Point',
                'coordinates': f['geometry']['coordinates'][0][0]}

            # Write the record out.

            dst.write(f)

# The destination's contents are flushed to disk and the file is
# closed when its ``with`` block ends. This effectively
# executes ``dst.flush(); dst.close()``.

读取多层数据

集合也可以由多层文件或数据目录中的单层组成。目标层由名称或文件或目录中的整数索引指定。fiona.listlayers ()函数提供层名称的索引有序列表。

for layername in fiona.listlayers('tests/data'):
    with fiona.open('tests/data', layer=layername) as src:
        print(layername, len(src))

# Output:
# (u'coutwildrnp', 67)

层也可以通过索引指定。在这种情况下,layer=0layer='test_uk'指定数据文件或目录中的同一层。

for i, layername in enumerate(fiona.listlayers('tests/data')):
    with fiona.open('tests/data', layer=i) as src:
        print(i, layername, len(src))

# Output:
# (0, u'coutwildrnp', 67)

写入多层数据

也可以写入多层数据。编写时必须按名称指定层。

with open('tests/data/cowildrnp.shp') as src:
    meta = src.meta
    f = next(src)

with fiona.open('/tmp/foo', 'w', layer='bar', **meta) as dst:
    dst.write(f)

print(fiona.listlayers('/tmp/foo'))

with fiona.open('/tmp/foo', layer='bar') as src:
    print(len(src))
    f = next(src)
    print(f['geometry']['type'])
    print(f['properties'])

    # Output:
    # [u'bar']
    # 1
    # Polygon
    # OrderedDict([(u'PERIMETER', 1.22107), (u'FEATURE2', None), (u'NAME', u'Mount Naomi Wilderness'), (u'FEATURE1', u'Wilderness'), (u'URL', u'http://www.wilderness.net/index.cfm?fuse=NWPS&sec=wildView&wname=Mount%20Naomi'), (u'AGBUR', u'FS'), (u'AREA', 0.0179264), (u'STATE_FIPS', u'49'), (u'WILDRNP020', 332), (u'STATE', u'UT')])

/tmp/foo 目录的视图将确认新文件的创建。

$ ls /tmp/foo
bar.cpg bar.dbf bar.prj bar.shp bar.shx

来自档案和虚拟文件系统的集合

Zip 和 Tar 档案可以被视为虚拟文件系统,并且可以从其中的路径和层创建集合。换句话说,Fiona 允许您读取和写入压缩的 Shapefile。

for i, layername in enumerate(fiona.listlayers('zip://tests/data/coutwildrnp.zip')):
    with fiona.open('zip://tests/data/coutwildrnp.zip', layer=i) as src:
        print(i, layername, len(src))

# Output:
# (0, u'coutwildrnp', 67)

Fiona 还可以从更奇特的文件系统中读取数据。例如,可以像这样访问 S3 中的压缩形状文件:

with fiona.open('zip+s3://mapbox/rasterio/coutwildrnp.zip') as src:
    print(len(src))

# Output:
# 67

菲奥娜 CLI

Fiona 的命令行界面名为“fio”,记录在docs/cli.rst中。它的fio info漂亮地打印有关数据文件的信息。

$ fio info --indent 2 tests/data/coutwildrnp.shp
{
  "count": 67,
  "crs": "EPSG:4326",
  "driver": "ESRI Shapefile",
  "bounds": [
    -113.56424713134766,
    37.0689811706543,
    -104.97087097167969,
    41.99627685546875
  ],
  "schema": {
    "geometry": "Polygon",
    "properties": {
      "PERIMETER": "float:24.15",
      "FEATURE2": "str:80",
      "NAME": "str:80",
      "FEATURE1": "str:80",
      "URL": "str:101",
      "AGBUR": "str:80",
      "AREA": "float:24.15",
      "STATE_FIPS": "str:80",
      "WILDRNP020": "int:10",
      "STATE": "str:80"
    }
  }
}

安装

Fiona 需要 Python 2.7 或 3.4+ 和 GDAL/OGR 1.8+。要从源代码发行版构建,您将需要 C 编译器以及 GDAL 和 Python 开发头文件和库(Debian/Ubuntu 为 libgdal1-dev,CentOS/Fedora 为 gdal-dev)。

要从存储库副本构建,您还需要 Cython 从项目的 .pyx 文件构建 C 源代码。请参阅项目的 requirements-dev.txt 文件以获取指导。

Kyngchaos GDAL 框架将满足 OS X 的 GDAL/OGR 依赖关系,Homebrew 的 GDAL 公式(brew install gdal)也将满足。

Python 要求

Fiona 依赖于模块enum34Sixcligjmunchargparseordereddict(后面两个模块在 Python 2.7+ 中是标准的)。Pip 将为您获取这些要求,但从 Windows 安装程序安装 Fiona 的用户必须单独获取它们。

类 Unix 系统

假设您使用的是 virtualenv(如果没有,请跳到第 4 个命令)并且 GDAL/OGR 库、头文件和gdal-config程序通过系统的包管理器安装到系统上众所周知的位置(brew install gdal using Homebrew在 OS X 上),安装就这么简单。

$ mkdir fiona_env
$ virtualenv fiona_env
$ source fiona_env/bin/activate
(fiona_env)$ pip install fiona

如果 gdal-config 不可用或者 GDAL/OGR 头文件和库未安装到众所周知的位置,则必须通过 setup.cfg 文件或 setup 命令行设置包含目录、库目录和库选项,如下所示(使用git)。您还必须使用--gdalversion参数(参见下面的示例)或GDAL_VERSION环境变量(例如export GDAL_VERSION=2.1 )在命令行上指定 GDAL API 的版本。

(fiona_env)$ git clone git://github.com/Toblerity/Fiona.git
(fiona_env)$ cd Fiona
(fiona_env)$ python setup.py build_ext -I/path/to/gdal/include -L/path/to/gdal/lib -lgdal install --gdalversion 2.1

或者指定构建选项和 GDAL API 版本应该由特定的 gdal-config 程序提供。

(fiona_env)$ GDAL_CONFIG=/path/to/gdal-config pip install fiona

视窗

二进制安装程序可在 https://www.lfd.uci.edu/~gohlke/pythonlibs/#fiona获得,并最终出现在 PyPI 中。

你可以从这里下载 GDAL 的二进制发行版。您还需要下载已编译的库和头文件(包含文件)。

在 Windows 上从源代码构建时,重要的是要知道 setup.py 不能依赖仅存在于 UNIX 系统上的 gdal-config 来发现 Fiona 编译其 C 扩展所需的头文件和库的位置。在 Windows 上,这些路径需要由用户提供。您将需要找到 gdal 的包含文件和库文件并使用 setup.py,如下所示。您还必须使用--gdalversion参数(参见下面的示例)或使用GDAL_VERSION环境变量(例如设置 GDAL_VERSION=2.1 )在命令行上指定 GDAL API 的版本。

$ python setup.py build_ext -I<path to gdal include files> -lgdal_i -L<path to gdal library> install --gdalversion 2.1

注意:需要设置以下环境变量才能使 Fiona 正常工作:

  • 包含 GDAL DLL 的目录(gdal304.dll或类似的)需要在您的 Windows PATH中(例如C:\gdal\bin)。

  • gdal-data 目录需要在您的 Windows PATH中,或者必须设置环境变量 GDAL_DATA (例如C:\gdal\bin\gdal-data)。

  • 环境变量PROJ_LIB必须设置为 proj 库目录(例如 C:\gdal\bin\proj6\share

Appveyor CI 构建 使用 GISInternals GDAL 二进制文件来构建 Fiona。这会为想要尝试不稳定开发版本的用户生成一个用于成功构建的二进制轮,其中包括 GDAL 和其他依赖项。Appveyor配置文件可能是用户在 Windows 上从源代码构建的有用示例。

开发和测试

从源头构建需要 Cython。测试需要pytest。如果 GDAL/OGR 库、头文件和gdal-config程序安装到系统上众所周知的位置(通过系统的包管理器),您可以这样做:

(fiona_env)$ git clone git://github.com/Toblerity/Fiona.git
(fiona_env)$ cd Fiona
(fiona_env)$ pip install cython
(fiona_env)$ pip install -e .[test]
(fiona_env)$ py.test

或者您可以使用pep-518-install脚本:

(fiona_env)$ git clone git://github.com/Toblerity/Fiona.git
(fiona_env)$ cd Fiona
(fiona_env)$ ./pep-518-install

如果你有一个非标准环境,你需要在命令行上指定包含和 lib 目录和 GDAL 库:

(fiona_env)$ python setup.py build_ext -I/path/to/gdal/include -L/path/to/gdal/lib -lgdal --gdalversion 2 develop
(fiona_env)$ py.test

变化

所有问题编号都与https://github.com/Toblerity/Fiona/issues相关。

1.8.21 (2022-02-07)

变化:

  • 驱动程序模式支持测试变得更加通用,并且不太容易受到涉及特征字段和坐标值的驱动程序怪癖的影响 (#1060)。

  • OSError 在尝试以“a”模式打开 Python 文件对象中的数据集时引发(参见 #1027)。

  • 升级 attrs、cython 等以打开 Python 3.10 支持 (#1049)。

Bug修复:

  • 允许 FieldSkipLogFilter 处理异常消息和字符串(在 #1035 中报告)。

  • 清理 MemoryFileBase 留下的 VSI 文件,解决 #1041。

  • 在 #423 中添加的硬编码“utf-8”集合编码已被删除 (#1057)。

1.8.20 (2021-05-31)

打包:

  • 轮子包括 GDAL 3.3.0 和 GEOS 3.9.1。

Bug修复:

  • 允许与 click 8 及更高版本一起使用 (#1015)。

1.8.19 (2021-04-07)

打包:

  • 车轮包括 GDAL 3.2.1 和 PROJ 7.2.1。

Bug修复:

  • 在 fiona/env.py 中,现在使用 set_gdal_config 配置 GDAL 数据路径,而不是通过设置 GDAL_DATA 环境变量(#1007)。

  • 消除了虚假的迭代器重置警告 (#987)。

1.8.18 (2020-11-17)

  • 对于 GeometryCollections (#971, #972),transform 的精度选项已修复。

  • 向 fio-load (#390) 添加了缺失的 –co (creation) 选项。

  • 如果可以导入证书包,则其证书存储位置将在导入 fiona._env 期间传递给 GDAL,除非 CURL_CA_BUNDLE 已设置。

  • 发现名为“”的特征字段时发出警告 (#955)。

1.8.17 (2020-09-09)

  • 要修复问题 #952,默认情况下,fio-cat 命令不再在反子午线处切割特征几何图形。添加了一个 –cut-at-antimeridian 选项,以允许在地理目的地坐标参考系统中切割几何图形。

1.8.16 (2020-09-04)

  • 更多在调用 GDAL C API 函数时出现的 OGR 错误和警告浮出水面(#946)。

  • 修复了 1.8.15 中某些情况下引入的循环导入 (#945)。

1.8.15 (2020-09-03)

  • 将 shim 函数更改为不返回元组 (#942) 作为 #941 中报告的打包问题的解决方案。

  • 当 VSIFOpenL 失败时引发 Python 异常 (#937)。

1.8.14 (2020-08-31)

  • 在具有默认(随机)名称的 MemoryFile 中创建新集合时,Fiona 将尝试使用格式驱动程序支持的文件扩展名 (#934)。当使用为需要特定文件名或扩展名的矢量驱动程序格式化的数据字节初始化 MemoryFile 时,用户应继续传递适当的文件名和/或扩展名。

  • 在 drvsupport 模块中启用了对 FlatGeobuf 的读取支持。

  • MemoryFile 实现已得到改进,因此它可以支持多部分 S3 下载 (#906)。这主要是来自 rasterio 的代码端口。

  • 当 CRS 以“EPSG:dddd”形式 (#919) 传递时,fiona.transform 结果的轴排序错误。这已由 (#926) 修复。

  • 允许隐式访问 ZipMemoryFile 中的唯一数据集。ZipMemoryFile.open() 的路径参数现在是可选的 (#928)。

  • 改进对日期时间类型的支持:支持毫秒 (#744)、时区 (#914) 并在驱动程序不支持类型时改进警告 (#572)。

  • 修复 FileGDB 驱动程序的“提交事务失败”TransactionError。

  • 使用 add_dll_directory() (#851) 在 Python 3.8+ / Windows 上加载 GDAL DLL 依赖项。

  • 不需要可选属性 (#848)。

  • 确保切片不会溢出可用数据 (#884)。

  • 解决“错误 4:无法打开 EPSG 支持文件 gcs.csv”时的问题。在导入 fiona (#897) 时提出。

  • 解决导致可能混淆的字段名称的问题(仅影响 DXF、GPX、GPSTrackMacker 和 DGN 驱动程序)(#916)。

  • 确保在写入 MemoryFile (#907) 时传递 crs_wkt。

1.8.13.post1 (2020-02-21)

  • 此版本旨在提高与 shapely 1.7.0 的二进制轮兼容性。自 1.8.13 以来,fiona 包代码没有任何变化。

1.8.13 (2019-12-05)

  • 1.8.12 中 argparse 和 ordereddict 的 Python 版本规范是错误的,并已更正 (#843)。

1.8.12 (2019-12-04)

  • 为 argparse、enum34 和 ordereddict 要求指定 Python 版本 (#842)。

1.8.11 (2019-11-07)

  • 修复 Windows 上的访问冲突 (#826)。

1.8.10 (2019-11-07)

弃用:

  • 以前已将 vfs 关键字参数与 open 或 listlayers 一起使用已弃用,但现在会触发弃用警告。

Bug修复:

  • fiona.open() 现在可以使用 CRS URN (#823) 创建新数据集。

  • listlayers() 现在接受文件和路径对象,例如 open() (#825)。

  • 使用新的 set_proj_search_path() 函数设置 PROJ 数据搜索路径。对于 3.0 之前的 GDAL 版本,这将设置 PROJ_LIB 环境变量。对于 GDAL 3.0 版,这会调用 OSRSetPROJSearchPaths(),它会覆盖 PROJ_LIB。

  • 删除旧的和未使用的 _drivers 扩展模块。

  • 查找已安装的 GDAL 数据时,检查 header.dxf 文件而不是 pcs.csv。后者在 GDAL 3.0 中消失了,但前者仍然存在(#818)。

1.8.9.post2 (2019-10-22)

  • 1.8.9.post1 版本引入了一个错误,该错误会影响使用 GDAL 2.x 的源代码分发包的构建。此错误已在提交 960568d 中修复。

1.8.9.post1 (2019-10-22)

  • 对包设置脚本进行了更改,以便在从源分发构建包时使用 GDAL 3 的 shim 模块。包没有其他变化。

1.8.9 (2019-10-21)

  • 添加了 shim 模块和对 GDAL 3.0 的支持。该软件包现在可以与 GDAL 3.0 和 PROJ 6.1 或 6.2 一起构建和使用。请注意,我们将上传到 PyPI 的 1.8.9 轮子将包含 GDAL 2.4.2 和 PROJ 4.9.3,就像 1.8.8 轮子一样。

1.8.8 (2019-09-25)

  • 使用 Fiona 1.8.7 无法报告几何类型代码为 3000 的地理包文件的架构。此错误已修复。

1.8.7 (2019-09-24)

Bug修复:

  • 在下面的版本 1.8.5 中提到的处理具有 M 值的多边形的回归实际上当时并没有修复(参见新报告 #789),但在版本 1.8.7 中已修复。

  • 包含“!”的 Windows 文件名 现在已正确解析,修复了问题 #742。

即将发生的变化:

  • 在 1.9.0 版本中,迭代 Collection 时产生的对象将是可变映射,但不再是 Python dict 的实例。1.9 版旨在向后兼容 1.8,除非用户代码测试是instance(feature, dict)。在 2.0 版中,新的 Feature、Geometry 和 Properties 类将成为不可变映射。有关 2.0 版即将发生的更改的更多讨论,请参阅 https://github.com/Toblerity/fiona-rfc/blob/master/rfc/0001-fiona-2-0-changes.md

1.8.6 (2019-03-18)

  • 1.8.5 中启用 JSON 驱动程序的广告是错误的 (#176),但在此版本中它们已准备好使用。

1.8.5 (2019-03-15)

  • 如果 GDAL_DATA 尽早设置,GDAL 似乎效果最好。理想情况下,它是在构建库时或在导入 Fiona 之前的环境中设置的,但是对于轮子,我们在导入 fiona.env 时将 GDAL_DATA 修补到 os.environ 中。这解决了 #731。

  • 允许忽略 .cpg 文件的错误组合已得到修复 (#726)。

  • 在进入集合上下文(Collection.__enter__)时,如果需要并输入一个新的匿名 GDAL 环境。这使得with fiona.open(...) as collection:大致相当于with fiona.open(...) as collection, Env():。这有助于防止在创建集合然后在以后或在不同范围内使用时出现错误。

  • 缺少对 TopoJSON、GeoJSONSeq 和 ESRIJSON 的 GDAL 支持已启用 (#721)。

  • 修复了处理具有 M 值的多边形(#724)的回归。

  • 已消除 OGRFeatureBuilder 方法中的每个功能调试日志记录调用,以提高功能编写性能 (#718)。

  • 已添加对由“gs”资源名称标识的 Google Cloud Storage 中的数据集的本机支持 (#709)。

  • 添加了对三角形、多面体表面和 TIN 几何类型的支持 (#679)。

  • 有关使用 MemoryFile 和 ZipMemoryFile 类的说明已添加到手册 (#674)。

1.8.4 (2018-12-10)

  • 现在可以以指定的精度转换 3D 几何图形 (#523)。

  • 修复了带有“时间”字段 (#692) 的 Shapefile 产生虚假 DriverSupportError 的错误。

  • GDAL_DATA 环境变量的修补程序在 1.8.3 中意外保留,现在已被删除。

1.8.3 (2018-11-30)

  • 该项目从 Rasterio 获取的 RASTERIO_ENV 配置环境标记已重命名为 FIONA_ENV (#665)。

  • 选项 –gdal-data 和 –proj-data 已添加到 fio-env 命令中,以便 Rasterio 轮的用户可以获得设置 GDAL_DATA 和 PROJ_LIB 环境变量的路径。

  • 恢复了在集合的 crs 和 crs_wkt 属性中使 GDAL 和 PROJ 支持文件发现和配置自动的失败尝试。用户必须在with Env()块内执行此类代码或设置 GDAL 所需的 GDAL_DATA 和 PROJ_LIB 环境变量。

1.8.2 (2018-11-19)

Bug修复:

  • 当调用迭代器的 __next__ 并且发现会话丢失或不活动时引发 FionaValueError 而不是将空指针传递给 OGR_L_GetNextFeature (#687)。

1.8.1 (2018-11-15)

Bug修复:

  • 添加围绕 OSRGetAuthorityName 和 OSRGetAuthorityCode 调用的检查,这些调用将记录查找这些项目的问题。

  • 在 WritingSession.start (#676) 中引发异常之前,已打开的数据源现已发布。这解决了 Windows 上锁定文件的问题。

  • 我们现在确保在获取 Collection 的 crs 或 crs_wkt 属性时存在 Env 实例(#673、#690)。否则,无法找到包含在 Fiona 车轮中的所需 GDAL 和 PROJ 数据文件。

  • GDAL 和 PROJ 数据搜索已被重构以提高可测试性 (#678)。

  • 在项目的 Cython 代码中,void* 指针已替换为正确的 GDAL 类型 (#672)。

  • 关于 ENCODING 创建选项 (#668) 的普遍警告级别日志消息已被消除。

1.8.0 (2018-10-31)

这是最终的 1.8.0 版本。感谢大家!

Bug修复:

  • 我们 cpdef Session.stop 使其具有可以从 __dealloc__ 安全调用的 C 版本,修复了 PyPy 问题(#659、#553)。

1.8rc1 (2018-10-26)

除了更多的测试标准化和引入临时 test_collection_legacy.py 模块以支持在 Travis-CI 上构建经过全面测试的 Python 2.7 macosx 轮子外,1.8rc1 没有任何变化。

1.8b2 (2018-10-23)

Bug修复:

  • ensure_env_with_credentials 装饰器将不再破坏外部环境的凭据。这修复了报告给 Rasterio 项目的错误,该错误也存在于 Fiona 中。

  • 已删除未使用的打包模块导入和依赖项 (#653)。

  • Env 类记录到“rasterio”层次结构而不是“fiona”。此错误已得到纠正 (#646)。

  • 可能时从 collections.abc 导入 Mapping 抽象基类 (#647)。

重构:

  • pytest 函数和夹具测试的标准化仍在继续,并且接近完成(#648、#649、#650、#651、#652)。

1.8b1 (2018-10-15)

弃用:

  • 集合切片已被弃用,并将在未来的版本中被禁止。

Bug修复:

  • 传递给转换模块方法的 Rasterio CRS 对象将根据需要转换为 dicts (#590)。

  • 将曲线几何图形隐式转换为其线性近似值,而不是失败(#617)。

  • 将 test_collection.py 和 test_layer.py 中的 unittest 测试用例迁移到使用标准 data_dir 和 path_coutwildrnp_shp 固定装置(#616)。

  • 根记录器配置已从所有测试脚本中删除 (#615)。

  • 仅当明确请求时才会为 CLI 上下文 Env 创建 AWS 会话,与 Rasterio 的 CLI (#635) 的行为相匹配。

  • 对 attrs 的依赖是明确的。

  • 其他依赖项被固定到需求文件中的已知良好版本。

  • 未使用的参数已从 Env 构造函数中删除 (#637)。

重构:

  • 添加了一个 with_context_env 装饰器,用于为 CLI 命令设置 GDAL 环境。现在简化了命令功能本身。

1.8a3 (2018-10-01)

弃用:

  • fiona.drivers ()上下文管理器已正式弃用。所有用户都应该切换到fiona.Env(),它注册格式驱动程序并以可逆方式管理 GDAL 配置。

Bug修复:

  • Collection 类现在将有关跳过字段的日志消息过滤为每个字段最多一条警告消息 (#627)。

  • boto3 模块仅在需要时导入(#507、#629)。

  • 实现了与 Click 7.0 的兼容性 (#633)。

  • 在 debug() 调用中使用 %r 而不是 %s 可以防止 UnicodeDecodeErrors (#620)。

1.8a2 (2018-07-24)

新的功能:

  • 64 位整数现在是 int 类型字段的默认值(#562、#564)。

  • 现在支持数据集的“http”、“s3”、“zip+http”和“zip+s3”URI 方案(#425、#426)。

  • 我们添加了一个MemoryFile类,它支持格式化的内存功能集合 (#501)。

  • 添加了对 GDAL 2.x 布尔字段子类型的支持(#531)。

  • 一个新的fio rm命令可以干净地删除多文件数据集 (#538)。

  • 要素集合中的几何类型更加灵活。我们现在不仅可以指定单个几何类型,还可以指定一系列允许的类型,或者“任何”以允许任何几何类型 (#539)。

  • 添加了对 GDAL 2.2+ 空字段的支持 (#554)。

  • 我们内部 API的新gdal_open_vector()函数提供了大大改进的错误处理 (#557)。

Bug修复:

  • Python 2.7 上涉及 OrderedDict 导入的错误已修复 (#533)。

  • 当 fio-cat 的--bbox选项与多个输入文件一起使用时引发的AttributeError已修复(#543、#544)。

  • 已删除过时和废弃的 fiona.tool 模块。

  • 当报告集合的模式时,恢复 0a2bc7c 中丢弃几何类型中的 Z 的更改 (#541)。

  • 需要六个 1.7 或更高版本 (#550)。

  • 修复了与“zip+s3”URI 相关的回归问题。

  • 现在默认搜索 Debian 的 GDAL 数据位置 (#583)。

1.8a1 (2017-11-06)

新的功能:

  • 每次调用writerecords()都涉及一个或多个事务,每个事务最多包含 20,000 个特征。这提高了编写 GeoPackage 文件时的性能,因为之前的事务大小只有 200 个特征(#476、#491)。

打包:

  • Fiona 的 Cython 源文件已经过重构,因此 GDAL 1.x 和 GDAL 2.x 不再有单独的扩展模块。相反,有一个基于 GDAL 2.x 的基本扩展模块和用于使用 GDAL 1.x 的安装的 shim 模块。

1.7.11.post1 (2018-01-08)

  • 这个发布后的版本为包含的 GDAL 库(仍然是 2.2.2 版)添加了缺少的 expat(以及 GPX 格式)支持。

1.7.11 (2017-12-14)

  • fiona.open()encoding关键字参数,旨在允许调用者覆盖数据源自己的可能错误的编码,但它没有工作(#510,#512)。问题是我们并不总是在打开数据源之前设置 GDAL 打开或配置选项。此错误已通过 maint-1.7 分支中的许多提交解决,该修复在 tests/test_encoding.py 中进行了演示。

  • 一个--encoding选项已添加到 fio-load 以启用使用随附的 .cpg 文件(#499、#517)创建编码的 shapefile。

1.7.10.post1 (2017-10-30)

  • 发布后修复了上传到 PyPI 的 macosx 轮子的问题。

1.7.10 (2017-10-26)

Bug修复:

  • 来自rio cat --layers验证器的无关打印行已被删除 (#478)。

打包:

  • 此版本的官方 OS X 和 Manylinux1 轮子(在 PyPI 上)将与 Shapely 1.6.2 和 Rasterio 1.0a10 轮子兼容。

1.7.9.post1 (2017-08-21)

此版本未对 Fiona 包进行任何更改。它将 GDAL 从 2.2.0 升级到 2.2.1 在我们发布到 Python 包索引的轮子中。

1.7.9 (2017-08-17)

Bug修复:

  • 获取 GIL for GDAL 错误回调函数,以防止在 GIL 已被用户代码释放时发生 GDAL 错误时崩溃。

  • 即使特征数量不准确(#467),在关闭时也同步和刷新层。

1.7.8 (2017-06-20)

Bug修复:

  • 提供基于 CPLError 的异常所需的所有参数 (#456)。

1.7.7 (2017-06-05)

Bug修复:

  • 将记录器warn()(已弃用)调用切换到warning()

  • 将 Cython 模块中的所有相对导入和 cimports 替换为绝对导入 (#450)。

  • 避免将PROJ_LIB设置为不存在的目录 (#439)。

1.7.6 (2017-04-26)

Bug修复:

  • 回退到 PROJ_LIB (#440) 的share/proj

  • 用 OSRRelease()替换对OSRDestroySpatialReference()每个调用,修复 #441 (#443) 中报告的 GPKG 驱动程序崩溃。

  • 添加从IOError派生的DriverIOError以用于特定于驱动程序的错误,例如 GeoJSON 驱动程序拒绝覆盖现有文件。此外,我们现在确保当fiona.open()引发此错误时,删除任何已创建的读取或写入会话,这消除了拆卸损坏的Collection对象时的虚假异常(#437、#444)。

1.7.5 (2017-03-20)

Bug修复:

  • 使用驱动程序驱动程序关键字参数(以指定某些格式驱动程序)使用fiona.open()以读取(默认)模式打开数据文件有时会由于字符串列表不正确终止而导致 Windows 崩溃 (#428) . 修复:Fiona 的错误string_list() 已被 GDAL 的CSLAddString()取代。

1.7.4 (2017-02-20)

Bug修复:

  • 当在传递给BytesCollection (#422)的前 6000 字节数据中找不到某些键时,OGR 的 EsriJSON 检测失败。当给出driver='GeoJSON'关键字参数时, .json文件扩展名现在显式地赋予BytesCollection后面的内存文件(#423)。

1.7.3 (2017-02-14)

玫瑰是红色的。谭是一只哈巴狗。软件回归是最令人尴尬的错误。

Bug修复:

  • 在 Windows 上使用 __stdcall 进行 GDAL 错误处理回调,就像在 Rasterio 中一样。

  • 在 rio-cat 和 rio-info (#421) 中开启对 zip:// URL 的潜在支持。

  • 1.7.2 版本打破了对具有绝对路径的 zip 文件的支持 (#418)。此回归已通过测试进行确认。

1.7.2 (2017-01-27)

未来弃用:

  • Collection.__next__()是错误的,因为当与Collection.filter()Collection.__iter__()结合使用时,它可能导致功能重复。它将在 Fiona 2.0 中删除。请通过使用PYTHONWARNINGS=”always:::fiona”-W”always:::fiona”运行测试或程序并从 next(collection)切换到next(iter(collection))来检查此已弃用功能的使用情况 ( #301)。

错误修复:

  • BytesCollection (#318)可以访问压缩的字节流。

1.7.1.post1 (2016-12-23)

1.7.1 (2016-11-16)

Bug修复:

  • 防止 Fiona 绊倒在 GDAL 2.1 (#384) 中引入的“Z”、“M”和“ZM”几何类型。Fiona 1.7.1 没有添加对这些类型的显式支持,它们被强制转换为几何类型 1-7('Point'、'LineString' 等)

  • 当在新集合的架构或其他地方遇到虚假或不受支持的几何类型时,引发 UnsupportedGeometryTypeError (#340 )

  • 为 fio-cat启用–precision 0 (#370)。

  • 通过产生None (#385)防止 datetime 异常不必要地停止集合迭代

  • 将 log.warn 调用替换为 log.warning 调用 (#379)。

  • 如果在运行setup.py (#364)时 gdal-config 或–gdalversion 均未指示 GDAL C API 版本,则打印错误消息。

  • 通过 CRS 类型检查让类 dict 子类 (#367)。

1.7.0post2 (2016-06-15)

打包:为 'clean' 和 'config' 目标定义扩展模块(#363)。

1.7.0post1 (2016-06-15)

打包:没有为“干净”设置目标(#361、#362)复制任何文件。

1.7.0 (2016-06-14)

这个库中的 C 扩展模块现在可以与 GDAL 库的 1.x 或 2.x 版本一起构建和使用。非常感谢 René Buffat 领导了这项工作。

重构:

  • ogrext1.pyx和ogrex2.pyx文件现在使用在ogrex1.pxdogrex2.pxd定义的单独的 C API 。其他扩展模块已被重构,因此它们不依赖于这些模块中的任何一个,并使用与 GDAL 1.x 和 2.x (#359) 兼容的 GDAL/OGR API 的子集。

打包:

  • 源代码分发现在包含 ogrext扩展模块的两个不同源。ogrext1.c文件将与 GDAL 1.x 一起使用,ogrext2.c文件将与 GDAL 2.x 一起使用。

1.7b2 (2016-06-13)

  • 新功能:增强了 fio-cat 和 fio-dump 的–layer选项,以允许选择一个或多个多层输入文件的单独层 (#349)。

1.7b1 (2016-06-10)

  • 新功能:支持 GDAL 版本 2+ (#259)。

  • 新功能:新的 fio-calc CLI 命令 (#273)。

  • 新功能: fio-info (#316) 和 fio-load (#299) 的选项。

  • 新功能:fio-collect 的–no-parse选项让细心的用户避免额外的 JSON 序列化和反序列化 (#306)。

  • 错误修复:现在在将 CRS 从 WKT 序列化为 PROJ.4 dicts 时保留+wktext (#352)。

  • 错误修复:修复了打开集合时的小内存泄漏 (#337)。

  • 错误修复:内部 unicode 错误现在会导致日志消息和 UnicodeError异常,而不是TypeError (#356)。

1.6.4 (2016-05-06)

  • 如果活动的 GDAL 库版本 >= 2.0 而不是不可预测地失败(#338,#341),则引发 ImportError。对 GDAL>=2.0 的支持将在 Fiona 1.7 中提供。

1.6.3.post1 (2016-03-27)

  • 在这个发布后的版本中,库没有变化,但是 PyPI 上的发行版有一个重大变化:为了帮助 Fiona 与 OS X 上的 Shapely 更兼容,现在包含在 macosx(仅限)二进制轮子中的 GDAL 共享库静态链接 GEOS 库。请参阅 https://github.com/sgillies/frs-wheel-builds/issues/5

1.6.3 (2015-12-22)

  • 北半球的白天一直在减少,但现在又在增加。

  • 在某些情况下,非 UTF 字符串被传递到 OGR 函数中,在 Windows 上,这有时会导致 Python 进程崩溃 (#303)。现在,当字段名称或字段值无法编码时,Fiona 会引发从 UnicodeError 派生的错误。

1.6.2 (2015-09-22)

  • 当使用fiona.open(..., **src.meta) 作为 dst 模式 (#265)时,在数据集元属性中仅提供 PROJ4 表示会导致 CRS 信息丢失。此错误已通过向元属性添加 crs_wkt 项并扩展fiona.open()和集合构造函数以查找并优先考虑此关键字参数来解决。

1.6.1 (2015-08-12)

  • 错误修复:Fiona 现在反序列化由 OGR GeoJSON 驱动程序提供的 JSON 编码字符串属性(#244、#245、#246)。

  • 错误修复:由于拼写错误(#254),proj4 数据未正确复制到二进制发行版中。

特别感谢 WFMU DJ Liz Berg 为我的发布冲刺提供了很棒的播放列表。在http://wfmu.org/playlists/shows/62083 查看。你不能听不见爱棺材。

1.6.0 (2015-07-21)

  • 将 Cython 要求升级到 0.22 (#214)。

  • 新的 BytesCollection 类 (#215)。

  • 将 GDAL 的 OpenFileGDB 驱动程序添加到已注册的驱动程序 (#221)。

  • 将 CLI 命令实现为插件 (#228)。

  • 提高 click.abort 而不是调用 sys.exit,防止意外退出 (#236)。

1.5.1 (2015-03-19)

  • 通过修复 MANIFEST.in (#216) 将测试数据恢复到 sdists。

1.5.0 (2015-02-02)

  • 完成 GeoJSON 特征序列选项 (#174)。

  • 修复了读取不支持特征计数的数据集 (#190)。

  • 新的测试数据集(#188)。

  • 修复编码错误(#191)。

  • 删除令人困惑的警告 (#195)。

  • 添加二进制轮子的数据文件(#196)。

  • 添加对读取数据集时启用的驱动程序的控制(#203)。

  • 将 cligj 用于涉及 GeoJSON (#204) 的 CLI 选项。

  • 修复 fio-info –bounds 帮助 (#206)。

1.4.8 (2014-11-02)

  • 添加缺少的 crs_wkt 属性,如 Rasterio (#182)。

1.4.7 (2014-10-28)

  • 修复 EPSG 代码中的 CRS 设置 (#149)。

1.4.6 (2014-10-21)

  • 在 bounds() #178 中处理 3D 坐标。

1.4.5 (2014-10-18)

  • 将 –bbox 选项添加到 fio-cat (#163)。

  • 如果从 sdist (#167) 运行,则跳过 geopackage 测试。

  • 添加 fio-bounds 和 fio-distrib。

  • 将 fio-dump 恢复到工作状态。

1.4.4 (2014-10-13)

  • 修复 1.4.3 (#164) 中引入的 GDAL 1.11 的意外要求。

1.4.3 (2014-10-10)

  • 添加对 geopackage 格式的支持 (#160)。

  • 在 CLI (#162) 中为 -driver 添加 -f 和 -format 别名。

  • 将 –version 选项和 env 命令添加到 CLI。

1.4.2 (2014-10-03)

  • -dst-crs 和 -src-crs 选项用于 fio cat 和 collect (#159)。

1.4.1 (2014-09-30)

  • 修复集合的 __getitem__ (#153) 中的编码错误。

1.4.0 (2014-09-22)

  • 添加 fio cat 和 fio collect 命令 (#150)。

  • 返回 Python 2.6 兼容性 (#148)。

  • 改进的 CRS 支持 (#149)。

1.3.0 (2014-09-17)

  • 将单个元数据项访问器添加到 fio inf (#142)。

  • 将 fio 移动到 setuptools 入口点 (#142)。

  • 添加 fio 转储和加载命令 (#143)。

  • 删除 fio translate 命令。

1.2.0 (2014-09-02)

  • 始终在模式中显示属性宽度和精度 (#123)。

  • 编写特征的日期时间属性(#125)。

  • 在 filter() (#129) 中重置空间过滤。

  • 接受 datetime.date 对象作为特征属性 (#130)。

  • 向集合迭代器添加切片 (#132)。

  • 将几何对象掩码添加到集合迭代器 (#136)。

  • 更改源布局以匹配 Shapely 和 Rasterio (#138)。

1.1.6 (2014-07-23)

  • 实现集合 __getitem__() (#112)。

  • 将 GDAL 最终确定留给 DLL 的析构函数 (#113)。

  • 添加集合键(),值(),项目(),__contains__()(#114)。

  • CRS 错误修复 (#116)。

  • 添加 fio CLI 程序。

1.1.5 (2014-05-21)

  • 添加 cpl_errs 上下文管理器 (#108)。

  • 使用 '==' 测试而不是 'is' (#109) 检查 NULL。

  • 在 Python 3 (#110) 的设置中打开带有 encoding='utf-8' 的辅助文件。

1.1.4 (2014-04-03)

  • 将模式中的“long”转换为“int”(#101)。

  • 小心地将 Python 模式映射到可能经过修改的内部模式 (#105)。

  • 允许使用几何写入特征:无 (#71)。

1.1.3 (2014-03-23)

  • 进入 DriverManager 上下文(#80、#92)时,始终注册所有 GDAL 和 OGR 驱动程序。

  • 跳过不支持的字段类型并发出警告 (#91)。

  • 允许将 OGR 配置选项传递给 fiona.drivers() (#90, #93)。

  • 添加一个 bounds() 函数(#100)。

  • 打开 GPX 驱动程序。

1.1.2 (2014-02-14)

  • 删除 dumpgj (#88) 中留下的集合切片。

1.1.1 (2014-02-02)

  • 添加一个交互式文件检查器,如 rasterio 中的文件检查器。

  • CRS to_string 错误修复 (#83)。

1.1 (2014-01-22)

  • 使用上下文管理器来管理驱动程序 (#78),这是一个向后兼容但很大的变化。Fiona 现在与 rasterio 兼容,并且与 osgeo 包配合得更好。

1.0.3 (2014-01-21)

  • 修复 +init 投影的序列化 (#69)。

1.0.2 (2013-09-09)

  • 更智能、更好的测试设置(#65、#66、#67)。

  • 将 type='Feature' 添加到从集合中读取的记录 (#68)。

  • 使用 GeoJSON 驱动程序时跳过几何验证 (#61)。

  • Dumpgj 文件描述将记录属性报告为列表(如在 dict.items() 中)而不是 dict。

1.0.1 (2013-08-16)

  • 允许对写入字段进行排序并在读取时保留字段顺序 (#57)。

1.0 (2013-07-30)

  • 添加 prop_type() 函数。

  • 允许 Python 2 (#51) 的 UTF-8 编码路径。对于 Python 3,路径必须始终是 str,而不是字节。

  • 从 collection.meta 中删除编码,它只是一个文件创建选项。

  • 支持链接 GDAL 框架 (#54)。

0.16.1 (2013-07-02)

  • 将 listlayers、open、prop_width 添加到 __init__py:__all__。

  • 每当我们请求集合迭代器时,重置 OGR 层的读取 (#49)。

0.16 (2013-06-24)

  • 添加对将图层写入多层文件的支持。

  • 添加测试以达到 100% 的 Python 代码覆盖率。

0.15 (2013-06-06)

  • 获取和设置数字字段宽度(#42)。

  • 添加对多层数据源的支持(#17)。

  • 添加对 zip 和 tar 虚拟文件系统的支持 (#45)。

  • 添加 listlayers() 函数。

  • 将 GeoJSON 添加到支持的格式列表 (#47)。

  • 允许按索引或名称选择图层。

0.14 (2013-05-04)

  • 添加选项以在 dumpgj 程序中添加 JSON-LD。

  • 将值与 Collection 构造函数中的 Six.string_types 进行比较。

  • 将编码添加到 Collection.meta。

  • README 中的文档 dumpgj。

0.13 (2013-04-30)

  • 单个包中的 Python 2/3 兼容性。现在支持 Python 2.6、2.7、3.3。

0.12.1 (2013-04-16)

  • 修复 sdist 中的 README 链接混乱(#39)。

0.12 (2013-04-15)

  • 修复扩展模块的损坏安装(#35)。

  • 在匹配的 Python 日志级别记录 CPL 错误。

  • 在 OGR 中使用大写来编码名称,在 Python 中使用小写。

0.11 (2013-04-14)

  • Cythonize .pyx 文件(#34)。

  • 使用或围绕 OGR 对记录数据的内部重新编码 (#35)。

  • 修复 int/float PROJ.4 参数序列化中的错误。

0.10 (2013-03-23)

  • 添加函数以获取 str 类型属性的宽度。

  • 处理 3D 几何类型的验证和模式表示 (#29)。

  • 在 NULL 几何 (#31) 的情况下返回 {'geometry': None}。

0.9.1 (2013-03-07)

  • 使 ogrext.so 中的记录器静音(可以被覆盖)。