ホームページ > バックエンド開発 > Python チュートリアル > Python gdal チュートリアル: フィルター、単純な空間分析、関数とモジュール

Python gdal チュートリアル: フィルター、単純な空間分析、関数とモジュール

黄舟
リリース: 2016-12-24 17:05:28
オリジナル
2568 人が閲覧しました

Layer オブジェクトには SetAttributeFilter() というメソッドがあり、特定の条件を満たすレイヤー内のフィーチャをフィルターで除外できます。 Filter を設定した後、GetNextFeature() メソッドを使用して、条件を満たすフィーチャーを順番に取得できます。 SetAttributeFilter(None) はフィルターをクリアできます。たとえば

>>>layer.GetFeatureCount()

>>>layer.SetAttributeFilter("cover = 'shrubs'")

>>> ) 空間フィルターには 2 種類あります。 1 つは SetSpatialFilter() で、特定の種類の地物をフィルターします。たとえば、パラメーターに Polygon を入力すると、レイヤー内のすべての Polygon が選択されます

SetSpatialFilterRect(, ) もあります。 ;、< ;maxx>、)、パラメーターとして 4 つの座標を入力し、ボックスで [Feature

SetSpatialFilter(None)] を選択して空間属性フィルターをクリアできます。

たとえば、次のコードでは、layerAreas はポリゴンであり、layerSites はポイントです

>>> featAreas = LayerAreas.GetNextFeature()

>>> Poly = featAreas.GetGeometryRef()

> ;> & gt; レイヤーサイト.getfeatureCount ()

& gt; & gt; gt; & gt;layersites.getfeatureCount ()

33

>>>layerSites.SetSpatialFilterRect(460000, 4590000, 490000, 4600000)

>> layerSites.GetFeatureCount()

4

>>>layerSites.SetSpatialFilter(None)

>>>layerSites.GetFeatureCount()

42

SQL クエリ ステートメントの実行など、より複雑なフィルターもあります。 SQL の強力な機能を使用すると、より複雑なフィルターを実行できます。次のコードのようなタスクは、カバー タイプが草であるフィーチャを選択し、ID 番号の降順に並べ替えることです。

result = dsSites.ExecuteSQL("select * from sites where cover = 'grass' order by id desc")

resultFeat = result.GetNextFeature()

while resultFeat :

print resultFeat.GetField('id') print resultFeat.GetField('id')

resultFeat = result.GetNextFeature()

dsSites.ReleaseResultSet(result)

42

40

最後の文 ReleaseResultSet() は、クエリを解放します。結果を取得し、次の SQL ステートメントを実行する前に必ず結果を解放してください。

次の例では、カバーが草であるすべてのフィーチャーの数をカウントします

>>> result = dsSites.ExecuteSQL("select count(*) from sites where cover = 'grass'")

> ;> result.GetFeatureCount()

11

>>> result.GetFeature(0).GetField(0)

>>> dsSites.ReleaseResultSet(結果)すべての異なるカバー タイプ

result = ds.ExecuteSQL("サイトから個別のカバーを選択") resultFeat = result.GetNextFeature()

while resultFeat:

print resultFeat.GetField(0)

resultFeat = result.GetNextFeature()

ds.ReleaseResultSet(result) 低木

カバー タイプごとにフィーチャの数をカウントします

coverLayer = ds.ExecuteSQL (サイトから個別のカバーを選択します')

coverFeat = coverLayer.GetNextFeature()

while coverFeat:

cntLayer = ds.ExecuteSQL("select count(*) from sites where cover = ' " + coverFeat.GetField(0 ) + " ' ")

print coverFeat.GetField(0) + ' ' +print coverFeat.GetField(0) + ' ' + cntLayer.GetFeature(0).GetFieldAsString(0)

ds.ReleaseResultSet(cntLayer)

coverFeat = coverLayer.GetNextFeature( )

ds.ReleaseResultSet(coverLayer)

低木 6

木 11

岩 6

草 11

裸地 6

水 2

Intersect は、2 つの要素が交差するかどうかを決定します

poly2.Intersect(poly1)

素の場合は 0、交差の場合は 1 を返します。

Disjoint は、2 つの要素が素であるかどうかを決定します。
poly2.Disjoint(poly1)

素の場合は 0 を返します。反対側

Touchは隣接する(エッジを擦る)ことを意味します

poly2.Touches(poly1)

Return 0はエッジなしを意味し、Return 1はエッジを擦ることを意味します

クロスクロス、通常は線がポリゴンを通過します

poly2.Crosses (line)

交差がないことを示す場合は0を返し、交差することを示す場合は1を返します

内部では、1つの要素が別の要素によって完全に囲まれています

ptB.Within(poly1)

点が外側の内側にあることを示す場合は0を返しますポリゴンの場合、ポイントがポリゴン内にあることを示す 1 を返します。これは、

poly1.Contains(ptB)

の反対です。メイン オブジェクトとパラメータを変更するだけです。ポリゴンが 2 つだけあるようです

poly2.Overlaps(poly3)

は、重なり合わないことを示す場合は 0 を返し、重なり合うことを示す場合は 1 を返します

単純な地理データ処理ジオプロセシングを見てみましょう

ポリゴン:

交差点:poly3.Intersection(poly2)

和集合:poly3.Union(poly2)

差分:poly3.Difference(poly2)

補足:poly3.SymmetricDifference(poly2)

ジオメトリ:

< ;geom>.Buffer(< distance>) をジオメトリにバッファを追加するということは、ポイントラインをポリゴンに変えて太くすることを意味します

.Equal() 2 つのジオメトリは等しいですか?

.Distance() 2 つのジオメトリ間の最短距離を返します

.GetEnvelope() 興味深いエンベロープですが、実際にはボックスを使用してこの幾何学的形状を囲み、4 つの座標を返しますコーナー (minx、maxx、miny、maxy)

Python の関数 function、例外、module は、Python の教科書に記載されていますが、ここでは詳しく説明しません

上記は Python gdal チュートリアルです: filtering 、簡単な空間分析、関数、モジュールの内容については、PHP 中国語 Web サイト (m.sbmmt.com) をご覧ください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート