0

フロリダのドライクリーニング施設のシェープファイルがあります。shapefile.py を使用して Python でファイルを読み込んでいます。私の問題は、ファイルの最初の形状は正しく表示されますが、その後は 5 番目ごとの形状のみが正しいことです。連続する 4 つの形状が無効なタイプ コード (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  []

(注:点の精度を少し下げて、線に収まるようにしました)。

パターンは規則的であるように見えます — 1 つの「有効な」レコードの後に​​、無効な shapeType 定数とポイントのない 4 つのレコードが続きます。

私はシェープファイル処理の初心者です。これらの結果は、私が間違っている可能性があることを示唆していますか?

アップデート

次のコードは問題を示しています (上記の shapeType と points の列を出力します)。

from shapefile import Reader)
rdr = Reader('drycleaner_list')
for s in rdr.shapes():
   print s.shapeType, s.points
4

1 に答える 1

0

まず、問題がシェープファイルにあるかどうかを判断する必要があります。QuantumGISなどの真のGISツールを使用してファイルをロードしてみてください。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を使用したシェープファイルのレイアウトは次のとおりです。

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 に答える