파이썬을 사용하여 QGIS에서“속성 별 선택”?


16

파이썬 명령을 사용하여 QGIS에서 "속성 별 선택"기능을 사용하는 방법이 있습니까? 내 플러그인에서 사용자는 GUI를 통해 값을 입력해야 하며이 값은이 속성을 가진 모든 기능을 선택하는 함수에서 사용해야합니다. 열 이름은 코드에 고정되어 있으며 함수는 올바른 값만 검색해야합니다.

현재 솔루션에서이 함수는 QGIS를 PostgreSQL 데이터베이스에 연결하고 SQL 문을 실행합니다. 결과로부터 테이블이 생성되고 QGIS에서 테이블이 Shapefile로 시각화됩니다.

기본적으로 피처를 강조 표시하고 선택의 새 Shapefile을 작성하지 않아도됩니다. "속성 별 선택"기능을 사용하면 불필요한 데이터베이스 연결도 건너 뜁니다.

기능이 강조 표시되도록 파이썬에서 "속성 별 선택"기능을 사용하는 방법이 있습니까? QGIS의 기능을 사용하면 쿼리와 일치하지 않는 모든 기능이 일시적으로 비워져 괜찮습니다.


1
이 답변에는 qgis 3 업데이트가 필요합니다.
MonsterMushroom

답변:


8

예. 파이썬 바인딩을 통해 모든 속성을 얻고 자신의 플러그인에서 추가 필터링을 구현할 수 있습니다. 요약 및 일부 예제는 이 PyQGIS Coobook 발췌문 을 참조하십시오 . 그런 다음 반환 된 사전에서 일치하지 않는 결과를 제외하면됩니다.

시각화에 select()대해서는 적절한 인수가 없기 때문에 여전히 다른 레이어를 만들어야 할 것 입니다. 메모리 파일을 사용하여 실제 파일을 만들지 않아도됩니다 (요리 책에서 자세히 설명).

편집하다:

실제로 selectedFeaturesIds()with setSelectedFeatures(ids)를 사용하여 선택한 하위 세트로 선택을 변경할 수 있습니다 . 구현을 직접 인용 :

/** Get a copy of the user-selected features */  
QList<QgsFeature> selectedFeatures();

/** Return reference to identifiers of selected features */
const QSet<qint64> &selectedFeaturesIds() const;

/** Change selection to the new set of features */
void setSelectedFeatures(const QSet<qint64> &ids);

얼마나 안타깝습니까! ArcGIS에서도 arcpy를 사용할 수 있기 때문에 QGIS에서도 가능하다고 생각했습니다. 그럼에도 불구하고 귀하의 답변에 감사드립니다!
userHH

어쩌면 방법이있을 수 있습니다. 난 그냥 몰라 사이트의 다른 사용자에게 시간을 내주십시오. 누군가는 할 수도 있습니다.
lynxlynxlynx

가능해야한다고 생각합니다. QGIS에서는 선택과 일치하는 모든 기능이 시각화되며 다른 모든 기능은 일시적으로 비워집니다.
userHH

내가 찾았 어 QGIS는 코어에서이 작업을 수행하지만 선택을 올바르게 조정하기에 충분한 인터페이스를 제공하는 것처럼 보입니다.
lynxlynxlynx

나에게 링크를 보낼 수 있습니까?
userHH

9

QGIS 2.2부터는 매우 자연스러운 방식으로 지원 됩니다. QgsFeatureRequest.setFilterExpression( unicode )메소드를 사용하여 QGIS 표현식 엔진을 통해 수행 할 수 있습니다 .

# The important part: get the feature iterator with an expression
it = l.getFeatures( QgsFeatureRequest().setFilterExpression ( u'"Counties" = \'Norwich\'' ) )
# Set the selection
l.setSelectedFeatures( [ f.id() for f in it ] )

가장 좋은 점 : 최신 QGIS 버전 (2.10 이상)을 사용하는 경우 여전히 다른 솔루션보다 성능이 뛰어나면서도 여전히 읽기 쉬운 상태로 데이터베이스에서 직접 필터링됩니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.