ホームページ  >  記事  >  バックエンド開発  >  Python gdal チュートリアル: ogr を使用したベクトル データの読み取りと書き込み

Python gdal チュートリアル: ogr を使用したベクトル データの読み取りと書き込み

黄舟
黄舟オリジナル
2016-12-24 15:59:553544ブラウズ

なぜオープンソースを使用するのですか?

利点

1. 無料、個人および小規模企業に適しています

2. バグを見つけやすい

3. クロスプラットフォームで、Windows と Linux で使用できます

4.

欠点

1. ジオプロセッサが組み込まれていない

2. 使用している人はほとんどいません

オープンソースのRS/GISモジュール

1. 単純なベクトルデータの読み取りと書き込みはGDALの一部です

2 GDAL 地理空間データ抽象化ライブラリ:

a) ラスター データの読み取りと書き込み

b) ArcGIS も GDAL に基づいて開発されています

c) C++ ライブラリですが、Python を使用して

関連モジュール

1 を呼び出すことができます。 : 高速な配列処理はラスターデータにとって特に重要です

2。NumPy: 次世代の Numeric

3 より強力な gis ライブラリ http://www.gispython.org/

インポート ライブラリ:

import ogr

または:

from osgeo import ogr

普遍的な方法は次のとおりです:

try:

from osgeo import ogr

以外:

import ogr

特定のタイプのデータを読み取るには、それをロードする必要がありますまず、データ駆動型とは、オブジェクトが特定のデータ構造を「認識」できるようにオブジェクトを初期化することを意味します。

import ogr

driver = ogr.GetDriverByName('ESRI Shapefile')

データ駆動型ドライバーの open() メソッドはデータ ソース オブジェクトを返します

open(, )

ここで、更新 0 は読み取り専用を意味し、1 は書き込み可能を意味します:

from osgeo import ogr

driver = ogr.GetDriverByName('ESRI Shapefile')

filename = 'C:/Users/gongwei/Documents/My電子書籍 /python_and_sage/GDAL python/test/ospy_data1/sites.shp'

dataSource = driver.Open(filename,0)

dataSource が None の場合:

print '開けませんでした'

sys.exit(1)

print 'done!'

ファイル名は絶対パスである必要があることに注意してください。

コードを簡略化するために絶対パスを使用する必要があるため、データレイヤーを読み取るにはos.chdir()がよく使用されます

layer = dataSource.GetLayer(0)

一般的に、ESRIシェープファイルは次のように埋められます。 0. 入力しない場合、デフォルトは 0 です。

このデータ レイヤーにポイントがいくつあるか見てください。

n =layer.GetFeatureCount()

print 'feature count:', n

上下左右の境界を読み取る

extent =layer.GetExtent()

print 'extent:',エクステント

print 'ul: ',extent[0],extent[3]

print 'lr:',extent[1],extent[2]

ある要素の特徴を読む(ようやく本題に入る)ここを読むのがポイントです #別のidにする必要があります

print fid

さらに、フィーチャを順番に読み込んですべてのフィーチャをループします

feat =layer.GetNextFeature() #次を読みます

while feat:

feat =layer.GetNextFeature ()

later.ResetReading() #Reset

フィーチャーのジオメトリを抽出

geom = feat.GetGeometryRef()

geom.GetX()

geom.GetY()

print geom .

メモリを解放します

feature.Destroy()

データソースを閉じます。これは、ファイルシステム操作でファイルを閉じるのと同じです

dataSource.Destroy()

それを読んだ後の書き込み方法について話しましょう

新しいファイルを作成します

driver.CreateDataSource(

ただし、このファイルがすでに存在することはできません。存在しないとエラーが発生します

新しいレイヤーを作成します

dataSource.CreateLayer(,CreateLayer(< ;name>, geom_type=, [srs])

例:

ds2 = driver.CreateDataSource('test.shp')

layer2 = ds2.CreateLayer('test', geom_type=ogr. wkbPoint)

shp ファイルを削除するには

driver.DeleteDataSource ('test.shp')

新しいフィールドを追加するには、レイヤー内でのみ追加でき、データは存在できません。

追加されたフィールドの場合は文字列です。幅を設定する必要があります

fieldDefn = ogr.FieldDefn( 'id', ogr.OFTString)

fieldDefn.SetWidth(4)

layer.CreateField(fieldDefn)

新しい機能を追加するには、まず前のステップを完了し、すべてのフィールドを追加する必要があります

次に、レイヤーから対応するフィーチャ タイプを読み取り、フィーチャを作成します

featureDefn = Layer.GetLayerDefn()

feature = ogr.Feature(featureDefn)

ジオメトリを設定しますShape

feature.SetGeometry(point)

あるフィールドを設定

feature.SetField('id', 23)の値

レイヤーにフィーチャを書き込む

layer.CreateFeature(feature)

上記は Python gdal チュートリアルです: ogr を使用してベクター データを読み書きする 詳細については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。