2012-04-27 3 views
0

フロリダ州にはドライクリーニング施設のシェイプファイルがあります。私はshapefile.pyを使ってPythonでファイルを読んでいます。私の問題は、ファイルの最初の図形が正しく表示されている間は、その後5番目の図形のみが正しいことです。行内の4つの形状は、無効なタイプコード(0〜31のはずである)とポイント情報なしで抽出されます。ここでの結果のセクションです:5番目の図形のみ有効な形状ファイルを読み込みます

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つのレコードが続くように見えます。

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

アップデートは

次のコードは、(それが形状タイプを印刷し、上記の列を指して)問題を示しています。

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

答えて

0

まずあなたは問題がシェープファイルであるかどうかを判断する必要があります。 QuantumGISなどの真のGISツールを使用してファイルをロードしてみてください。 SHPファイルが正しいことを確認したら、コードを投稿してshapefile.pyの使い方を確認してください。私の推測では、SHPファイルは何らかの形で間違っています。そして、Quantum GISはそれを修正するか、何が間違っているかを教えてくれるでしょう。ボーナス:QuantumGISにはPythonがプラグイン開発ツールとして組み込まれています。

編集: フロリダDEPからファイルdryclean_apr12.shpをダウンロードしました。 dbfデータによると、1423のレコードがあります。あなたのコードスニペットを使用すると、1423のシェイプがすべてshapetype = 1となり、各シェイプが単一のポイントであることが示されます。

あなたのコードは正しいので、問題はファイルにある必要があります。

私は、形状タイプが21または

位置フィールド値型番号順

Aポイントが

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 
として定義されて
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 
として定義されてPointMであることを、あなたのサンプルデータに気づきました

Shapefileが破損しているか、shapefile.pyにバグがあります。シェープファイルがポイント(IDD)としてこれを読んでいる場合PointMと

Aシェープファイルは

IDDD 
IDDD 
IDDD 
IDDD 
IDDD 
IDDD 

のレイアウトを持つ

次に、ファイルをシェープファイルが公開され

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 
+0

として読み込まれますフロリダ州のDEPによって作成され、Google Earthプロフェッショナルに正しく表示されます(ファイルを取得した同僚によると)。コードはほんの数行で、質問に追加します。 –

関連する問題