后续从使用pysftp从SFTP读取SHP文件获得更多的上下文。
我正在尝试使用pyshp和pysftp读取一个shapefile并转换为一个GeoPandas geodataframe。在发生以下错误之前,这已成功地用于测试的所有文件。
代码:
from shapely.geometry import shape
r = shapefile.Reader(shp=shp, shx=shx, dbf=dbf)
fields = [field[0] for field in r.fields[1:]]
attributes = []
geometry = []
for row in r.shapeRecords():
geometry.append(shape(row.shape.__geo_interface__))
attributes.append(dict(zip(fields, row.record)))错误:
~\miniconda3\lib\site-packages\shapefile.py in __shape(self)
1039 record = Shape()
1040 nParts = nPoints = zmin = zmax = mmin = mmax = None
-> 1041 (recNum, recLength) = unpack(">2i", f.read(8))
1042 # Determine the start of the next record
1043 next = f.tell() + (2 * recLength)
~\miniconda3\lib\site-packages\paramiko\file.py in read(self, size)
~\miniconda3\lib\site-packages\paramiko\sftp_file.py in _read(self, size)
~\miniconda3\lib\site-packages\paramiko\sftp_client.py in _request(self, t, *arg)
~\miniconda3\lib\site-packages\paramiko\sftp_client.py in _async_request(self, fileobj, t, *arg)
~\miniconda3\lib\site-packages\paramiko\message.py in add_int64(self, n)
error: int too large to convert是否有一种方法可以转换此int或以块形式执行此操作以避免错误?导致错误的文件不是特别大(<2MB)。
发布于 2022-01-11 17:29:19
问题似乎是如何处理shapefile中的空几何图形。
虽然我不完全理解为什么这会引起问题,但根据文档(这里),pyshp“处理没有和弦的形状,并表示为geojson (GeoJSON null-等效)”。
当将记录添加到“属性”和“几何学”列表时,跳过空geoms似乎修复了错误:
fields = [field[0] for field in r.fields[1:]]
attributes = []
geometry = []
for row in r.shapeRecords():
if row.shape.shapeType == 0:
continue
else:
geometry.append(shape(row.shape.__geo_interface__))
attributes.append(dict(zip(fields, row.record)))不是最令人满意的解决方案,但可能是有用的,或可能有人能够详细阐述。
发布于 2022-01-10 15:00:38
这可能是由于可变交叉系统的最大尺寸。检查sys max大小与可变大小之间的关系。
import sys
sys.maxsize我的输出
9223372036854775807检查可变大小
import sys
sys.getsizeof(r)为了解决这个问题。请将变量类型声明为int64。
dtype=variable.int64如果这个错误没有解决,请告诉我。
https://stackoverflow.com/questions/70654269
复制相似问题