限制和已知问题
支持空值
某些数据源支持空或以其他方式未设置的字段值。对于某些类型,这些无法正确存储到ndray中。如果遇到空或未设置的值,则会发生以下情况:
如果该字段是字符串类型,则空值表示为无
如果字段是布尔型或整型(np.int32、np.int64),则字段数据将重新转换为np.float64值,而空值将表示为np.nan
如果该字段是日期或日期时间类型,则该字段设置为np.datetime64(' NaT ')
注:对空或其他未设置字段值的检测仅限于从数据层读取的记录子集,这意味着读取不同的记录子集可能会为相同列产生不同的数据类型。您可以使用 read_info()
确定每列的原始数据类型。
不支持测量几何形状
不支持读取或写入测量的几何类型。这些不受GEOS库支持,并且无法转换为GeoDataFrames中的几何对象。
这些会自动降级为其3D(x,y,z)等效版本并发出警告。
要忽略此警告:
>>> import warnings
>>> warnings.filterwarnings("ignore", message=".*Measured \(M\) geometry types are not supported.*")
不支持曲线、三角形、TIN和表面几何
Pyogrio不支持曲线、三角形、TIN和表面几何形状。从数据层读取几何图形时,这些会自动转换为线性逼近。
字符编码
Pyogrio支持使用定义的编码读取/写入数据层。如果可能, encoding
未指定选项,GDAL将尝试自动从原生编码解码到 UTF-8
,pyogrio会报告编码是 UTF-8
在这种情况下,而不是原生编码。为 [ESRI Shapefiles] (https://gdal.org/Drivers/vector/Shapefile.html#encoding),GDAL将使用相关的 .cpg
中指定的文件或代码页 .dbf
文件来推断原生编码,但可能错误地假设原生编码是 ISO-8859-1
,导致编码错误。假设大多数其他司机都在 UTF-8
,但(理论上)可以指定 encoding
手动参数强制转换使用指定的编码值。
字段名称和值被读取到Python中 UTF-8
弦乐。
不验证几何或字段类型
Pyogrio目前在尝试写入输出文件之前不会验证属性值或几何类型。无效类型可能会在写入期间崩溃,并出现模糊的错误消息。
支持OpenStreetMap(OSM)数据
由于内部数据结构的原因,OpenStreetMap数据本身不支持按数据层计算要素计数。为了解决这个问题,Pyogrio首先迭代所有功能以计算用于分配包含从数据层读取的几何和属性的数组的功能计数,然后再次迭代所有功能以填充这些数组。此外,文件中的数据没有在顶层进行结构化,以支持逐层快速读取,这意味着逐层读取数据可能需要读取数据源内的所有记录,而不仅仅是属于特定层的记录。这种情况效率低下且速度缓慢,并且当同步从远程托管的数据源而不是本地文件读取时会加剧这种情况。
当您尝试在没有插入的情况下读取大文件时,GDAL还可能会指示您通过错误消息启用交错读取模式,您可以通过两种方法之一实现这一点:
设置用于所有操作的配置选项
from pyogrio import set_gdal_config_options
set_gdal_config_options({"OGR_INTERLEAVED_READING": True})
设置数据集打开选项
from pyogrio import read_dataframe
df = read_dataframe(path, INTERLEAVED_READING=True)
我们建议采取以下措施来避免性能问题:
在尝试读取之前,将远程OSM数据源下载到本地文件
这个
use_arrow=True
选项可能会加快OSM文件的读取速度如果可能的话,请使用不同的工具,例如
ogr2ogr
将OSM数据源转换为更性能的格式,以便逐层读取,例如GPKG
使用空间过滤器和箭头界面时结果不正确
由于 [a bug in GDAL] (https://github.com/OSGo/gdal/issues/8347),使用Arrow界面时(例如,经由 use_arrow
在……上面 read_dataframe
)某些司机(例如,GPPKG、FlatGeobuf、Arrow、Parquet)返回的边界框与由指定的边界框重叠的要素 bbox
或 mask
几何而不是那些几何形状使 bbox
或 mask
。
GDAL 3.8.0中预计会进行修复。