「場所によって属性を結合する」Pythonオプションはありますか?


9

join attributes by locationQGISメニューの[ベクター]> [データ管理ツール]にある機能を実行しようとしています。このためのオープンソースのpythonオプションを探しています。私はarcpyにspatial join機能があることを知っていますが、これをESRI環境の外で実行しようとしています。


1
プラグインJoin attributes by locationからの実際のコマンドのソースコード、特にメソッドを確認することをお勧めします。それからUIコードを削除して、単純なpython関数にそれを取り除くのは、それほど難しくないはずです。fToolsdoSpatialJoin.pycompute()
Lukas Graf

こんにちは私は少し異なる問題があります。2つのレイヤーの間にジョイントがあるかどうかを確認したいと思います。このためのオープンソースのpythonオプションを探しています。s.join関数が使用されているかどうかをテストしたいのですが、これをESRI環境の外で実行しようとしています。
Rania ben othmen 2017年

回答:


8

ShapelyFionaご覧ください。Fionaは、gdalのラッパーで、空間ファイルのインポートとエクスポートを簡単にします。Shapelyはジオメトリ機能を提供します。これはあなたにアイデアを与える非常に簡単な例です。ポリゴン属性をそのポリゴン内のすべてのポイントに結合します。

私が使用したサンプルデータは、これらのポリゴンこれらのポイントです。

import fiona
from shapely.geometry import shape
from copy import deepcopy

with fiona.open("planning_neighborhoods.shp", "r") as n: 

    with fiona.open("Schools_Private_Pt.shp", "r") as s:

        # create a schema for the attributes
        outSchema =  deepcopy(s.schema)
        outSchema['properties'].update(n.schema['properties'])

        with fiona.open ("Schools_withNbhd.shp", "w", s.driver, outSchema, s.crs) as output:

            for school in s: 
                for neighborhood in n:
                    # check if point is in polygon and set attribute
                    if shape(school['geometry']).within(shape(neighborhood['geometry'])):  
                        school['properties']['neighborho'] = neighborhood['properties']['neighborho'] 
                    # write out
                        output.write({                                 
                            'properties': school['properties'], 
                            'geometry': school['geometry']
                        })

@cengelに感謝します。これは私を正しい軌道に乗せるようです!私は実際にはラインとポリゴンとの結合(特に、川がモデルセルと交差する場所を見つける)に興味があり、それはあなたの例に従って動作すると思います。
mishaF 2013年

@cengelこれらの方法を使用するプラグインを使用するqgisステーションでは、モジュールとgdalのインストールが必要ですか?
user25976 2014

@ user25976申し訳ありませんが、私はあなたの質問を完全に理解しています。私のコード例はスタンドアロンのPythonスクリプトです。フィオナも形もgdalが必要です。
cengel

@cengelすみません、はっきりさせておきます(プログラミングは初めてです)。スタンドアロンのpythonスクリプトについて:pythonまたはモジュールがコンピューターにインストールされていなくても、fionaと整形インポートで記述されたプラグインをQGISユーザーが使用できることを意味しますか?
user25976 2014年

@ user25976彼らは自分のコンピュータにインストールされているモジュールを必要とします。たとえば、こちらを
cengel

2

まだドキュメントや例に関しては、まだ少し荒削りですが、ジオパンダの未来は明るく見えます。それは基本的にパンダのデータフレームの力と形の良い地理空間機能を組み合わせたものです。

あなたが探している関数はsjoinと呼ばれています

マシン/インスタンスに操作を実行するための十分なメモリがあることを確認してください

import geopandas as gpd
import pandas as pd
import os

gdfLeft = gpd.read_file(os.path.join(PATH,INPUT_FILE_NAME_1))
gdfRight = gpd.read_file(os.path.join(PATH,INPUT_FILE_NAME_2))

gdfJoined = gpd.sjoin(gdfLeft, gdfRight, how="left", op='intersects')

このコードは空間結合を実行しますが、結合されたシェープファイルの属性は空です。ポインタはありますか?
4月
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.