0

我在佛罗里达州有一个干洗设施的 shapefile。我正在使用 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
4

1 回答 1

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

一个点被定义为

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 将其读取为点 (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
于 2012-04-27T21:36:38.587 回答