属性とジオメトリを含むシェープファイルをCSVに変換しますか?


21

60k以上のエントリを持つシェープファイルがありますが、それらはすべて、対応する属性(総計、土地所有者名、納税者番号など)を持つポリゴンです。最終的に必要なのは、これらすべての属性とそれに対応するジオメトリ(KML互換のxyz形式、つまりWKT形式ではない)を含むCSVファイルです。

Excelで.dbfファイルを開いて属性を取得できることを知っています。また、QGISでシェープファイルを開き、データをExcelにコピーできることも知っています。これにより、属性とWKTジオメトリが取得されます。

属性とGoogle Earthに適したジオメトリを使用して、シェープファイルをCSV(Excelで開くことができる)に変換する簡単な方法はありますか?


仕様を満たすには、アプリケーションまたはスクリプトを作成する必要があります。難しいとは思いませんが、些細なことでもないと思います。もし私がそれをする仕事だったら、おそらくそのような仕事のためにフルタイムで1週間を見積もるでしょう。
スティーブンクアン

3
おかげで、これは役に立ちます。これはちょっとおかしいです。ファイルサイズがそれほど大きくない場合は、Googleで自動的に行うことができます。通常、これを行うには、.shpをGoogle Earthにインポートし、.kmlとして保存します。次に、.kmlをGoogle Fusion Tablesにアップロードし(FYI:Google Fusion Tablesのアップロード制限は100 MBです)、. csvにエクスポートします。その後、必要に応じて.csvをいじることができます-属性の変更、座標を持つ新しいポリゴンの追加など-そして、新しく保存された.csvをGoogle Fusion Tablesに再アップロードし、.kmlにエクスポートします、Google Earthで開きます。
リック

だから私は質問がなると思います... .shpファイルを2つの部分に分割するにはどうすればよいですか?これにより、100 mbの制限内で個々の.kmlファイルを取得でき、上記の方法を使用して変換できます。
リック

1
下記の質問に答えましたが、あなたのコメントを見ました。なぜcsvが必要なのですか?GISで属性の編集、新しいポリゴンの追加などを行い(QGISがあると言いました)、それを最終的なKMLにエクスポートしませんか?
user2856

@Rikk-コメントの質問への回答:シェープファイルを分割する簡単な方法は、シェープファイルの一部で空間選択を行い、レイヤーを右クリックして「エクスポート」を選択することです。その後、選択したフィーチャを新しい小さなシェープファイルにエクスポートするだけで済みます。これは決して科学的ではありませんが、簡単です。あるいは、より組織的なアプローチが必要な場合は、いくつかの属性で選択することもできます。
レーダー

回答:


28

OGR pythonバインディングを使用する簡単なスクリプトを次に示します。

import ogr,csv,sys

shpfile=r'C:\Temp\test.shp' #sys.argv[1]
csvfile=r'C:\Temp\test.csv' #sys.argv[2]

#Open files
csvfile=open(csvfile,'wb')
ds=ogr.Open(shpfile)
lyr=ds.GetLayer()

#Get field names
dfn=lyr.GetLayerDefn()
nfields=dfn.GetFieldCount()
fields=[]
for i in range(nfields):
    fields.append(dfn.GetFieldDefn(i).GetName())
fields.append('kmlgeometry')
csvwriter = csv.DictWriter(csvfile, fields)
try:csvwriter.writeheader() #python 2.7+
except:csvfile.write(','.join(fields)+'\n')

# Write attributes and kml out to csv
for feat in lyr:
    attributes=feat.items()
    geom=feat.GetGeometryRef()
    attributes['kmlgeometry']=geom.ExportToKML()
    csvwriter.writerow(attributes)

#clean up
del csvwriter,lyr,ds
csvfile.close()

編集:およびCSVからKMLに変換する別のスクリプト

import ogr,csv,sys,os
ogr.UseExceptions()

csvfile=r'C:\temp\test.csv' #sys.argv[1]
kmlfile=r'C:\temp\test.kml' #sys.argv[2]

csvreader=csv.reader(open(csvfile,'rb'))
headers=csvreader.next()

ds = ogr.GetDriverByName('KML').CreateDataSource(kmlfile)
lyr = ds.CreateLayer(os.path.splitext(os.path.basename(kmlfile))[0])

for field in headers[:-1]: #skip kmlgeometry
    field_def = ogr.FieldDefn(field)
    print lyr.CreateField(field_def)

for rec in csvreader:
    feat = ogr.Feature(lyr.GetLayerDefn())
    for i,field in enumerate(headers[:-1]): #skip kmlgeometry
        feat.SetField(field, rec[i])
    feat.SetGeometry(ogr.CreateGeometryFromGML(rec[-1]))
    lyr.CreateFeature(feat)

del lyr,ds

読者が知っておく必要がある重要な情報を明らかにするため、これらのバインディングの使用方法について詳しく説明してください。
アンドリューS

8

シェープファイルを空間ライトに変換すると、次のことができるはずです。

1)SQLを試して、出力をテストします。

SELECT col1、col2、col3、AsKml(geometry_column)FROMタブ

2)結果に満足したら、CSV形式にエクスポートできます。

/programming/5776660/export-from-sqlite-to-csv-using-shell-script

Spatialiteの詳細:

https://www.gaia-gis.it/fossil/libspatialite/index

Spatialite SQL関数:

http://www.gaia-gis.it/gaia-sins/spatialite-sql-3.0.0.html


3

QGISで作業している場合は、レイヤー->名前を付けて保存-> CSVを右クリックして、CSVドキュメントをすぐに生成できます。

ArcMapを使用している場合、ツールレイヤーをKMLに使用してKMLをエクスポートできます(プログラムの[検索に移動]オプション)。何らかの理由で、KMLの代わりにKMZを生成します(少なくとも私の場合はそうなっています)。

KMZをKMLに変換するには:

  • KMZファイルをGoogle Earthにインポートし、レイヤーを右クリックしてKMLとして保存します
  • QGISを開き、KMLファイルをドラッグアンドドロップします-レイヤーが自動的にロードされます(> QGIS 2.10 PISA)
  • ファイルを右クリックしてCSVとして保存します

ArcGISで作業している場合、この手順は長くなりますが、QGISではすぐに実行できます。いずれにしてもQGISをインストールする必要があります。


QGISのソリューションをテストしましたが、動作しません。csvとして保存しても、空間コンポーネントは保持されません。
フィリップシュワルツ

QGISには、エクスポート中にWKTを選択するオプションがあります。これにより、ジオメトリ(空間コンポーネント)がWKT形式で、シェープファイル内の残りの機能とともにエクスポートされます。
kozyr

QGIS 3.0から、エクスポートダイアログの[レイヤーオプション]の下にある[ジオメトリ]ドロップダウンリストを検索し、を選択するかAS_XYAS_XYZまたはAS_WKT
レオ

2

コマンドラインではogr2ogr、次のようにを使用できます。

ogr2ogr -f CSV output.csv input.shp -lco GEOMETRY=AS_XYZ

lco「レイヤー作成オプション」用です。他の利用可能なオプションはここに文書化されています:http : //www.gdal.org/drv_csv.html


レオ、「エラー1は要求されたレイヤー 'GEOMETRY = AS_XYZ'を取得できませんでした。QGISでファイルを表示し、国のアウトラインを含むベクターを明確に表示できます。」
Andrew S

-1

「ジオプロセシングモデルとスクリプトツールギャラリー」には、探しているものを実行するツールがあります。ExcelまたはCSVにエクスポートできます。

http://resources.arcgis.com/gallery/file/geoprocessing/details?entryID=95009B25-1422-2418-7FB5-B8638ECB2FA9


1
私はそれを見たことがありますが、KMLはもちろんのこと、どんな形式でもジオメトリをエクスポートしません。
user2856

-1

単にアークマップの変換ツールに移動してください。その後、卓越してテーブルに行きます。Excelファイルが作成されます。そのExcelドキュメントを.csvファイルに変換します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.