arcpyを使用せずにシェープファイルをジオプロセシングするためのPythonスクリプトの例


33

arcpyに基づいていないPythonスクリプトを使用して、属性によるシェープファイルのクエリ、選択からの新しいレイヤーの作成、ポリゴンの面積の計算、ポリゴンのポイントへの変換などを行います。

他のPythonモジュールまたはライブラリを使用するコード例はありますか?私はarcpyを使用してこれを簡単に行うことができますが、他のオプションを調べたいと思いました。


geopandasはベクターファイルの友です。ラスターのラスター。
RutgerH

回答:


54

奇妙なことです。まるで人々が突然Pythonの力を発見したようです(ArcPyはPythonモジュールの1つにすぎません)。たとえば、質問Visualize shapefile in Pythonを参照してください。

  • Pythonの地理空間処理には非常に長い歴史があり、Arcpy(またはarcgisscripting)よりもはるかに古いです。
  • PythonモジュールのリファレンスはPython Package IndexPypi)で、専用セクションがあります:トピック::科学/工学:: GIS
  • これらのモジュールで何でもできます。純粋なPython(カーソルなし...)であるため、ArcPyよりも簡単で高速です。
  • Shapelyは、地理空間ジオメトリを処理するためのこれらのモジュールの1つです->ポリゴンの面積を計算し、ポリゴンをポイントに変換します。
  • ベクターレイヤーを処理する場合は、osgeo / ogrFionaまたはPyshp(およびその他、あまり使用されません)があります->属性でシェー​​プファイルを照会し、選択から新しいレイヤーを作成し、ポリゴンの面積を計算し、ポリゴンをポイントに変換します
  • ラスターの処理の標準はosgeo / gdalです
  • 空間分析には、Pysalがあります
  • 3Dの場合、numpyscipy(3Dアルゴリズム、グリッドだけでなく、統計、地球統計、2Dまたは3D)などの他の科学モジュールを使用できます
  • そして、私はmapnikmatplotlib / basemapGeodjangoおよび...

すべてを組み合わせて(Pysal with shapely、...)、それらを他のScientificモジュールと混合できます。

したがって、Pythonスクリプトの例については、gis.stackexchangeまたはインターネット(英語だけでなく、多くの例)でPyshp Fiona、ogr、gdal、またはshapelyを検索してください
そのうちの1つはフランス語です(スクリプトと図は普遍的です!):
- パイソン:GISソフトウェアを使用せず、地質学的観点でベクトルおよびラスター層を使用し
英語の他:
- Pythonの、格好の良い、とフィオナとGIS
とスペイン語
- 頂点の座標を使用して、不規則な多角形の領域の決意
gis.stackexchangeに
- 高度プロファイル10キロラインの各側面
- Pyshpを使用して属性の更新
- ラスタから3Dシェープファイルを作成する方法を?
- 2点間の高低差を取得するためのPythonスクリプト
-など

Aaronが提示したスクリプトは、Python辞書のみを使用するFionaでより簡単に記述できます。

import fiona
with fiona.open('sites.shp', 'r') as input:
    with open('hw1a.txt', 'w') as output:
       for pt in input:
           id = pt['properties']['id']
           cover = pt['properties']['cover']
           x = str(point['geometry']['coordinates'][0])
           y = str(point['geometry']['coordinates'][21])
           output.write(id + ' ' + x + ' ' + y+ ' ' + cover + '\n')

また、さらにshapelyを使用する場合:

from shapely.geometry import shape
with fiona.open('sites.shp', 'r') as input:
    with open('hw1a.txt', 'w') as output:
       for pt in input:
           id = pt['properties']['id']
           cover = pt['properties']['cover']
           x = str(shape(pt['geometry']).x)
           y = str(shape(pt['geometry']).y)
           output.write(id + ' ' + x + ' ' + y+ ' ' + cover + '\n')

2冊の本もあります:

Eric WestraのPython地理空間開発

ここに画像の説明を入力してください

Python of Joel Lawhead による地理空間分析の学習

ここに画像の説明を入力してください

Pythonは、QGIS(Quantum GIS)、GRASS GIS、gvSIGまたはOpenJumpなどの他のGISアプリケーション、またはParaview(およびBlenderも!)などの3Dモデラーでスクリプト言語として使用されます。そして、これらすべてのアプリケーションで地理空間モジュールの大部分を使用できます(BlenderによるQGISデータの視覚化を参照)


あなたが話すこのPythonのものは何ですか;)
ネイサンW

FionaはWindowsでDLLエラーをスローしているようです。
-multigoodverse

Fionaをどのようにインストールしましたか?私にとっては問題ありません
遺伝子

19

開始するには、USUサイトのOpen Source GIS使用したPythonによるジオプロセシングを強くお勧めします。主に演習全体でGDAL / OGRライブラリを使用します。GDAL / OGRのインストールは少し難しい場合があるため、次のブログエントリが役立ちます。WindowsでのPython用のGDAL(およびOGR)のインストールGIS.SEでArcpy を使用する代替方法も確認してください。

次のオープンソースジオプロセシングスクリプトの例(USUサイトから)は、属性データを抽出してテキストファイルに書き込むために使用されます。

# import modules
import ogr, os, sys

# set the working directory
os.chdir('f:/data/classes/python/data')

# open the output text file for writing
file = open('hw1a.txt', 'w')

# get the shapefile driver
driver = ogr.GetDriverByName('ESRI Shapefile')

# open the data source
datasource = driver.Open('sites.shp', 0)
if datasource is None:
  print 'Could not open file'
  sys.exit(1)

# get the data layer
layer = datasource.GetLayer()

# loop through the features in the layer
feature = layer.GetNextFeature()
while feature:

  # get the attributes
  id = feature.GetFieldAsString('id')
  cover = feature.GetFieldAsString('cover')

  # get the x,y coordinates for the point
  geom = feature.GetGeometryRef()
  x = str(geom.GetX())
  y = str(geom.GetY())

  # write info out to the text file
  file.write(id + ' ' + x + ' ' + y + ' ' + cover + '\n')

  # destroy the feature and get a new one
  feature.Destroy()
  feature = layer.GetNextFeature()

# close the data source and text file
datasource.Destroy()
file.close()

4
.Destroyは素晴らしいメソッド名です:p-
ジェイソン

5

GDAL / OGRに興味があるかもしれません。

GDALはラスターの処理に使用され、OGRはベクターに使用されます。どちらもオープンソースのライブラリです。

ArcPyへの依存関係を削除する場合は、配列に情報を読み取り、独自の計算を純粋なPythonで実行することにより、いくつかの機能を模倣できます。

ここで見られるように、私は最近、ポリゴン内のポイントを選択してこれを行いました。レイキャスティングアルゴリズムを使用して、ポリゴンの頂点の座標を指定して、ポイントがポリゴン内にあるかどうかを判断します。


1
ページにアクセスして読む前に、ソリューションの本質を十分に把握して理解できるようにしてください。やがてそのページはそのアドレスに移動しなくなり、この回答はあまり役に立たなくなります。:)
マットウィルキー

1

私はこれを個人的に使用したことはありませんが、オフィスの他の人は整形式を使用したい:https ://pypi.python.org/pypi/Shapely


shapelyを使用していくつかのサンプルコードを投稿できる可能性はありますか?
シェルパ


5
リンクのみの回答は必然的に壊れてしまうため、長期的には役に立ちません。目的地についての十分な情報を含めてください。a)新しい家を再発見でき、b)ソリューションの本質を把握して理解してから、ページにアクセスして読んでください。
マットウィルキー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.