バッファなどのジオプロセシング用のPythonライブラリ(ArcPy以外)を探していますか?[閉まっている]


16

ArcPyを除き、シェープファイルを使用してバッファー/交差などのジオプロセシングを実行できるPythonライブラリはありますか?

回答:


17

PythonのGDAL / OGRクックブックにいくつかのサンプルコードを持っているバッファジオメトリを

from osgeo import ogr

wkt = "POINT (1198054.34 648493.09)"
pt = ogr.CreateGeometryFromWkt(wkt)
bufferDistance = 500
poly = pt.Buffer(bufferDistance)
print "%s buffered by %d is %s" % (pt.ExportToWkt(), bufferDistance, poly.ExportToWkt())

2つのジオメトリ間の交差計算します

from osgeo import ogr

wkt1 = "POLYGON ((1208064.271243039 624154.6783778917, 1208064.271243039 601260.9785661874, 1231345.9998651114 601260.9785661874, 1231345.9998651114 624154.6783778917, 1208064.271243039 624154.6783778917))"
wkt2 = "POLYGON ((1199915.6662253144 633079.3410163528, 1199915.6662253144 614453.958118695, 1219317.1067437078 614453.958118695, 1219317.1067437078 633079.3410163528, 1199915.6662253144 633079.3410163528)))"

poly1 = ogr.CreateGeometryFromWkt(wkt1)
poly2 = ogr.CreateGeometryFromWkt(wkt2)

intersection = poly1.Intersection(poly2)

print intersection.ExportToWkt()

ジオメトリは、シェープファイルやその他のさまざまな形式で読み書きできます。


14

簡略化するために、Shapely:manual はPythonでPostGISのすべてのジオメトリ処理を許可します。

Shapelyの最初の前提は、PythonプログラマーがRDBMSの外部でPostGISタイプのジオメトリ操作を実行できることです...

PolyGeoの最初の例

from shapely.geometry import Point, LineString, Polygon, mapping
from shapely.wkt import loads  
pt = Point(1198054.34,648493.09)
# or
pt = loads("POINT (1198054.34 648493.09)")
bufferDistance = 500
poly = pt.buffer(bufferDistance)
print poly.wkt
'POLYGON ((1198554.3400000001000000 648493.0899999999700000, 1198551.9323633362000000 
# GeoJSON
print mapping(poly)
{'type': 'Polygon', 'coordinates': (((1198554.34, 648493.09), (1198551.9323633362, 648444.0814298352), (1198544.7326402017, 648395.544838992), ....}

PolyGeoのポリゴンの例:

poly1 = Polygon([(1208064.271243039,624154.6783778917), (1208064.271243039,601260.9785661874), (1231345.9998651114,601260.9785661874),(1231345.9998651114,624154.6783778917),(1208064.271243039,624154.6783778917)])    
poly2 = loads("POLYGON ((1199915.6662253144 633079.3410163528, 1199915.6662253144 614453.958118695, 1219317.1067437078 614453.958118695, 1219317.1067437078 633079.3410163528, 1199915.6662253144 633079.3410163528)))"

intersection = poly1.intersection(poly2)
print intersection.wkt
print mapping(intersection) -> GeoJSON

2番目の前提は、フィーチャの永続化、シリアル化、およびマップ投影が重要ですが、直交する問題であるということです。100のGIS形式のリーダーとライター、または多数のState Planeプロジェクションを必要としない場合があり、Shapelyはそれらを負担しません。

したがって、他のPythonモジュールと組み合わせて、シェープファイルの読み取りまたは書き込みを行い、投影をosgeo.ogr、FionaまたはPyShpとして操作し ます。
Gis StackExchangeで検索すると、多くの例を見つけることができますが、shapelyとFionaの組み合わせ、およびshapely関数intersection()とbuffer()の使用を説明する別の例を紹介します(これはPyShpで実行できます)。

2つのポリラインシェープファイルがある場合:

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

交差を計算します(shapelyの関数intersection())

from shapely.geometry import Point, Polygon, MultiPolygon, MumtiPoint, MultiLineString,shape, mapping
import fiona
# read the shapefiles and transform to MultilineString shapely geometry (shape())
layer1 = MultiLineString([shape(line['geometry']) for line in fiona.open('polyline1.shp')])  
layer2 = MultiLineString([shape(line['geometry']) for line in fiona.open('polyline2.shp')])
points_intersect = layer1.intersection(layer2)

結果を新しいシェープファイルとして保存します

# schema of the new shapefile
schema = {'geometry': 'MultiPoint','properties': {'test': 'int'}}
# write the new shapefile (function mapping() of shapely)
with fiona.open('intersect.shp','w','ESRI Shapefile', schema) as e:
  e.write({'geometry':mapping(points_intersect), 'properties':{'test':1}})

結果:

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

個々のポイントをバッファリングします(shapelyの関数buffer())

 # new schema
 schema = {'geometry': 'Polygon','properties': {'test': 'int'}}
 with fiona.open('buffer.shp','w','ESRI Shapefile', schema) as e:
     for point in points:
          e.write({'geometry':mapping(point.buffer(300)), 'properties':{'test':1}})

結果

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

MultiPointジオメトリをバッファリングする

schema = {'geometry': 'MultiPolygon','properties': {'test': 'int'}}
points.buffer(300)
with fiona.open('buffer2.shp','w','ESRI Shapefile', schema) as e:
     e.write({'geometry':mapping(points.buffer(300)), 'properties':{'test':1}})

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


9

Shapelyは、PythonがGEOSにアクセスできるようにします。GEOSは、バッファ/インターセクト /などを実行できます。GEOSは、ほとんどのOSGeoプログラムがこれらの操作を実行するために使用するライブラリです。


9

Pythonジオプロセシングソフトウェアのリストを以下に示します。

  • 格好良い、Python
  • OGR、Python
  • QGIS、pyqgis、python
  • SagaGIS、Python
  • 草、パイソン
  • spatialite、pyspatialite、python
  • PostreSQL / PostGIS、Psycopg、Python
  • Rプロジェクト、rpy2、python
  • Whitebox GAT、python-GeoScript、jython

1

私の「移動」ジオプロセシングライブラリは、「リモートセンシングおよびGISライブラリ」(RSGISLib)です。インストールと使用が簡単で、ドキュメントは本当に優れています。ベクトルとラスター処理のための機能があります-私は非常にまれにGUIの近くに行く必要はありません。これは、ここで見つけることができます:http://rsgislib.org

このインスタンスの例は次のとおりです。

rsgislib.vectorutils.buffervector(inputvector, outputvector, bufferDist, force)

指定された距離でベクトルをバッファリングするコマンド。

どこ:

  • inputvectorは、入力ベクトルの名前を含む文字列です
  • outputvectorは、出力ベクトルの名前を含む文字列です
  • bufferDistは、マップ単位でバッファーの距離を指定するフロートです
  • forceはブールです。出力ベクトルが存在する場合、強制的に削除するかどうかを指定します

例:

from rsgislib import vectorutils
inputVector = './Vectors/injune_p142_stem_locations.shp'
outputVector = './TestOutputs/injune_p142_stem_locations_1mbuffer.shp'
bufferDist = 1
vectorutils.buffervector(inputVector, outputVector, bufferDist, True)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.