"위치별로 속성에 가입"하는 Python 옵션이 있습니까?


9

join attributes by locationQGIS 메뉴 Vector> Data Management Tools에 있는 기능을 수행하려고합니다 . 이를 위해 오픈 소스 파이썬 옵션을 찾고 있습니다. arcpy에 spatial join기능이 있지만 ESRI 환경 외부 에서이 작업을 수행하려고합니다.


1
플러그인 Join attributes by location에서 실제 명령 의 소스 코드 , 특히 메소드 를 살펴 보는 것이 좋습니다 . UI 코드를 제거하고 일반 파이썬 함수로 제거하기가 너무 어렵지 않아야합니다. fToolsdoSpatialJoin.pycompute()
Lukas Graf

안녕하세요, 나는 약간 다른 문제가 있습니다. 두 레이어 사이에 조인트가 있는지 확인하고 싶습니다!이 오픈 소스 파이썬 옵션을 찾고 있습니다. s.join 함수가 사용되었고 ESRI 환경 외부에서이 작업을 수행하려고하는지 테스트하고 싶습니다. 누구든지 도와주세요!
라니아 벤 othmen

답변:


8

ShapelyFiona를 살펴볼 수 있습니다 . Fiona는 공간 파일 가져 오기 및 내보내기를 쉽게하기 위해 gdal의 래퍼입니다. 지오메트리 기능을 제공합니다. 다음은 아이디어를 제공하는 매우 간단한 예입니다. 다각형 속성을 해당 다각형 내의 모든 점에 결합합니다.

내가 사용한 예제 데이터는 이러한 다각형이러한 점 .

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

@cengel이 방법을 사용하는 플러그인을 사용하는 qgis 스테이션은 모듈과 gdal을 설치해야합니까?
user25976

@ user25976 죄송합니다, 귀하의 질문을 잘 이해하고 있습니다. 내 코드 예제는 독립형 python 스크립트입니다. fiona와 매끈하게 gdal이 필요합니다.
cengel

@cengel 실례합니다 (프로그래밍을 처음 사용합니다). 독립형 python 스크립트와 관련하여 : 파이썬이나 모듈이 컴퓨터에 설치되어 있지 않더라도 fiona 및 shapeimport로 작성된 플러그인을 QGIS 사용자가 사용할 수 있다는 의미입니까?
user25976

@ user25976 컴퓨터에 모듈이 설치되어 있어야합니다. 예를 들어 여기
cengel

2

특히 문서 및 예제와 관련하여 여전히 가장자리에서 약간 거칠지 만 geopandas의 미래는 밝게 보입니다. 기본적으로 팬더 데이터 프레임의 기능과 지형 공간 기능을 매끄럽게 결합합니다.

찾는 기능을 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')

이 코드는 공간 결합을 수행하지만 결합 된 shapefile의 속성은 비어 있습니다. 어떤 포인터?
4 월
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.