안녕하세요.
망고시스템 임영현이라고 합니다.
말씀하신 마우스 클릭시 좌표를 리턴해 주는 예제와 관련하여
지난 공간정보아카데미에서 강의했던 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으로 변경하여 사용하시길 부탁드립니다.
감사합니다.