我在佛罗里达州有一个干洗设施的形状文件。我正在使用shapefile.py在Python中读取该文件。我的问题是,虽然文件中的第一个形状显示正确,但之后只有每个第5个形状都是正确的。使用无效的类型代码(应该在0到31之间)并且没有点信息来提取连续的四个形状。以下是结果的一部分:
Site Name (.record[1]) .shapeType .points
------------------------------------ ----------- --------------------
Granda Dry Cleaners 21 [[783897.335, 215901.765]]
Scotch Dry Cleaners 1093131927 []
J C Cleaners -1191051264 []
Royal Palm Cleaners -1606317767 []
Moorings Plaza Dry Cleaners 1091081765 []
Classic Touch Cleaners 21 [[778662.429, 221265.968]]
The Drycleaner 1093095627 []
Randolphs Alterations & Dry Cleaner -1140719616 []
Pelican French Cleaners 1580547967 []
Town & Country Cleaners 1091080779 []
Discount Dryclean Outlet 21 [[768035.181, 188652.929]]
The Drycleaner Cleaners 1093104359 []
Sample Cleaners -1090387968 []
Parisian Cleaners -1468878813 []
Roberts Cleaners & Tailors 1091022843 []
(注意:我稍微降低了点上的精度,使它们适合一条线)。
模式在我看来是正常的 - 一个“有效”记录,后跟四个记录,其中shapeType常量无效,没有点。
我是shapefile处理的新手。这些结果是否表明我可能做错了什么?
更新
以下代码演示了该问题(它打印了上述shapeType和points列):
from shapefile import Reader)
rdr = Reader('drycleaner_list')
for s in rdr.shapes():
print s.shapeType, s.points
答案 0 :(得分:0)
首先,您需要确定问题是否与shapefile有关。尝试使用真正的GIS工具(如QuantumGIS)加载文件。一旦确定您的SHP文件正确无误,请发布您的代码,以便我们了解您如何使用shapefile.py。我的猜测是SHP文件在某种程度上是不正确的,并且Quantum GIS要么修复它,要么告诉你什么是错误的。奖励:QuantumGIS已将python作为插件开发工具嵌入。
修改强> 我从佛罗里达州DEP下载了文件dryclean_apr12.shp。根据dbf数据,有1423条记录。当我使用你的代码片段时,我得到1423个形状,所有shapetype = 1表示每个形状都是单个点。
因此,您的代码是正确的,问题必须与文件有关。
我在样本数据中注意到shapetype是21或PointM,定义为
位置字段值类型编号顺序
Byte 0 Shape Type 21 Integer 1 Little
Byte 4 X X Double 1 Little
Byte 12 Y Y Double 1 Little
Byte 20 M M Double 1 Little
Point定义为
Position Field Value Type Number Order
Byte 0 Shape Type 1 Integer 1 Little
Byte 4 X X Double 1 Little
Byte 12 Y Y Double 1 Little
Shapefile已损坏或shapefile.py中存在错误。
PointM的Shapefile的布局为
IDDD
IDDD
IDDD
IDDD
IDDD
IDDD
如果Shapefile将其读作Point(IDD)
然后该文件被读为
IDD Rec 1 Read OK
did Rec 2 Error on Type
ddi Rec 3 error on Type
ddd Rec 4 error on Type
IDD Rec 5 Read OK