PyQGIS Plugin 생성 샘플 요청드립니다.

158 views
Skip to first unread message

CK Jeong

unread,
Mar 29, 2016, 4:05:08 AM3/29/16
to OSGeo(Open Source GeoSpatial) 한국어 지부 - OSGeo Korean Chapter
안녕하세요..
PyQGIS를 혼자 공부하고 있는 사람입니다.
원래 개발자가 아니여서 그런지 플러그인 만드는게 잘 이해가 되지 않아 도움을 요청드립니다.

현재 저는 간단하게 Python Script로 A레이어에 맞물려있는 B레이어 데이터를 선택하거나 A레이어 객체 중 속성 필터링 하여 선택하고 연관관계를 라인을 그려 메모리 레이어에 표출하는 정도의 스크립을 활용중입니다.
제가 요청 드리고자 하는것은 QGIS 콘솔에서 사용가능한 스크립트를 플러그인으로 만드는 것입니다.
여러 참고 자료/사이트를 보고 PluginBuilder를 사용한다는 것 정도는 아는데 잘 되지가 않습니다.

요청드리고자 하는것은 
플러그인 형태로 켄버스에서 마우스 클릭시 좌표를 리턴해 주는 예제(간단한 예제인것인지 모르겠네요)를 설명 부탁드리고자 하는 것입니다.
GIS툴에서 마우스 선택 좌표를 가져오기가 이리 힘들줄은 몰랐습니다.
참고로 제가 그리고 있는 전체적인 툴은 QGIS를 AutoCAD와 같이 효율적으로 도형(라인/포인트)을 그리는 툴을 만드는것입니다.
시작만 된다면 나머지는 어떻게든 출구를 찾을수 있으리라 생각됩니다.

이런 요청글을 이곳에 올려도 되는지 모르겠네요..문제된다면 삭제 또는 자삭 하겠습니다..

Sanghee Shin

unread,
Mar 29, 2016, 4:51:35 AM3/29/16
to osge...@googlegroups.com, Sanghee Shin
안녕하세요?

참고로 QGIS의 플러그인들은 모두 소스코드가 공개되어 있습니다. 개인 폴더 -> .qgis2 -> python -> plugins 폴더에 플러그인들이 설치됩니다. 이 플러그인 안에 보시면 소스코드들이 .py 형태로 있으니 참조하시면 되구요. 

만드시고자 하는 플러그인은 QGIS의 CadTools 플러그인과 유사해 보입니다. 플러그인에서 cad로 검색해 보시면 유사한 플러그인들이 나오는데요. 그것들 다운로드하셔서 분석해 보시고 공부해 보시면 좋을 것 같습니다. 

참고하세요. 

신상희 드림. 
---
Shin, Sanghee
Gaia3D, Inc. - The GeoSpatial Company
http://www.gaia3d.com 

2016. 3. 29., 오후 5:05, CK Jeong <kra...@gmail.com> 작성:

--
이 메일은 Google 그룹스 'OSGeo(Open Source GeoSpatial) 한국어 지부 - OSGeo Korean Chapter' 그룹에 가입한 분들에게 전송되는 메시지입니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 osgeo-kr+u...@googlegroups.com에 이메일을 보내세요.
이 그룹에 게시하려면 osge...@googlegroups.com에 이메일을 보내세요.
https://groups.google.com/group/osgeo-kr에서 이 그룹을 방문하세요.
더 많은 옵션을 보려면 https://groups.google.com/d/optout을(를) 방문하세요.

younghyun lim

unread,
Mar 29, 2016, 4:58:01 AM3/29/16
to osge...@googlegroups.com
안녕하세요.
망고시스템 임영현이라고 합니다.

말씀하신 마우스 클릭시 좌표를 리턴해 주는 예제와 관련하여
지난 공간정보아카데미에서 강의했던 RasterValuePicker라는 플러그인 샘플을 첨부해 드리오니 참고해 주시길 바랍니다.

해당 플러그인을 
C:\Users\사용자명\.qgis2\python\plugins 밑에 압축을 푸신 후 QGIS를 실행하셔서 직접 확인해 보시면 될 것 같습니다.

또한 해당 압축 푼 폴더에 들어가 보시면
RasterValuePicker.py 라는 파일이 있습니다.
이 파일을 노트패드 등으로 열어 보시면 아래와 같은 내용을 확인하실 수 있으실 겁니다.


------------------------------------------------------------------아       래--------------------------------------------------------------------------------------

# 플러그인이 시작되면 MapTool을 ClickTool로 변경하고 Click 된 경우 handleMouseDown 함수로 시그널 연결
        self.clickTool = QgsMapToolEmitPoint(self.iface.mapCanvas())
        self.iface.mapCanvas().setMapTool(self.clickTool)
        QObject.connect(self.clickTool, SIGNAL("canvasClicked(const QgsPoint &, Qt::MouseButton)"), self.handleMouseDown)

#시그널로 연결한 함수 정의
def handleMouseDown(self, point, button):
        current_layer = self.getLayerByName(self.dlg.cboLayer.currentText())
        if current_layer:
            raster_sample = current_layer.dataProvider().identify(point, QgsRaster.IdentifyFormatValue).results()
            raster_value = str(raster_sample[1])  # band index
            self.dlg.txtValue.setText(u"Value = %s" % raster_value) 
        else:
            self.dlg.txtValue.setText(u"Raster Value Picker Tool - No Layers")

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

위의 내용과 같은 부분을 찾으시면 맵을 클릭했을 때 handleMouseDown이라는 함수로 연결이 되어서 동작이 되고 있음을 알 수 있습니다.(현재 RasterValuePicker 같은 경우는 클릭한 지점의 Raster Value 값을 가져오는 소스 코드가 작성되어 있습니다.)

그럼 해당 함수 부분에서 클릭한 지점의 x, y 좌표를 가져오는 소스 코드를 작성하시면 되는데

self.dlg.txtCoord.setText("X,Y = %s, %s" % (str(point.x()),str(point.y()))) 과 같이 맵을 클릭했을 때 받아온 QgsPoint 정보를 받아서 x, y 좌표를 받아 올 수 있습니다.


마지막으로 Plugin Builder를 이용하여 QGIS 플러그인 작성시에

1. Plugin Builder를 실행하여 기본 템플릿을 생성합니다.
2. Qt Designer를 이용하여 플러그인 UI를 생성 및 수정합니다.
3. UI 수정시에는 pyuic4 명령어를 이용하여 반드시 컴파일을 하셔야 합니다.
4. .py 파일을 열어 소스코드를 작성합니다.

위와 같은 방식으로 플러그인을 작성하시면 될 것 같습니다.


그럼 첨부한 플러그인 예제를 참고하셔서 업무에 도움이 되시길 바랍니다.

zip 파일이 첨부가 안되어서 zi로 변경하여 첨부하오니 다운받으신 후 zip으로 변경하여 사용하시길 부탁드립니다.

감사합니다.



2016년 3월 29일 오후 5:05, CK Jeong <kra...@gmail.com>님이 작성:

--
이 메일은 Google 그룹스 'OSGeo(Open Source GeoSpatial) 한국어 지부 - OSGeo Korean Chapter' 그룹에 가입한 분들에게 전송되는 메시지입니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 osgeo-kr+u...@googlegroups.com에 이메일을 보내세요.
이 그룹에 게시하려면 osge...@googlegroups.com에 이메일을 보내세요.
https://groups.google.com/group/osgeo-kr에서 이 그룹을 방문하세요.
더 많은 옵션을 보려면 https://groups.google.com/d/optout을(를) 방문하세요.



--
==============================================================


(주)망고시스템 선임연구원 임영현

Tel : 010-8997-0003  / 031-450-3413   
Fax : 031-450-3414
==============================================================
RasterValuePicker.zi

CK Jeong

unread,
Mar 29, 2016, 9:02:07 AM3/29/16
to OSGeo(Open Source GeoSpatial) 한국어 지부 - OSGeo Korean Chapter
첨부해주신 자료 감사히 잘 보겠습니다.

2016년 3월 29일 화요일 오후 5시 58분 1초 UTC+9, hyuni 님의 말:
==============================================================
Reply all
Reply to author
Forward
0 new messages