Python 명령을 통해 프로젝트 CRS를 설정할 수 있습니까?


10

Python 명령을 통해 QGIS에서 프로젝트의 프로젝트 CRS를 설정할 수 있습니까?

필자의 경우 사용자는 QGIS를 열고 작성된 플러그인을 시작하면이 플러그인은 epsg 코드 31467 (Gauss Krueger Zone 3)이있는 공간 데이터를로드합니다. 불행히도 QGIS 기본 CRS는 WGS84이므로 단위 및 스케일에 문제가 있습니다.

내 첫 번째 접근 방식은이 코드를 사용하는 것입니다.

    my_crs = core.QgsCoordinateReferenceSystem(31467, core.QgsCoordinateReferenceSystem.EpsgCrsId)
    self.iface.mapCanvas().mapRenderer().setDestinationCrs(my_crs)

이것은 데이터가 이미 시각화 된 후 CRS를 Gauss Krueger Zone 3으로 변경합니다. 적어도 오른쪽 하단의 espg 코드가 변경되었습니다. 단위는 여전히도이며 스케일은 완전히 잘못되었습니다. Gauss Krüger의 1 : 5000은 WGS 84 (제 경우 QGIS)의 1 : 528822376입니다. 속성에서 프로젝트 CRS를 수동으로 설정 한 후 프로젝트 crs는 실제로 GK3이며 스케일과 단위가 맞습니다.

그래서 제 질문은 프로젝트 CRS를 다른 방식으로 설정할 수 있습니까? 수동 방법을 피하고 싶습니다.


다음 코드를 추가하여 문제를 해결했습니다.

qgis.utils.iface.mapCanvas().setMapUnits(0)
qgis.utils.iface.mapCanvas().refresh()

단위를 미터로 설정하고 스케일이 자동으로 업데이트됩니다. 0은 미터, 1은 발, 2는 정도, 3은 알 수 없음을 나타냅니다.

답변:


7

예, 가능합니다. Sourcepole의 Openlayers 플러그인은 CRS를 EPSG : 3857로 자동 설정합니다.

openlayers_layers.py 및 openlayers_plugin.py를 살펴보십시오.


8

답변이 조금 늦었지만 누군가 플러그인을 설치하지 않고 Google에서 해당 페이지로 이동하는 경우 http://www.purplelinux.co.nz 는 이에 대한 좋은 정보를 제공합니다.

purplelinux에있는 예제 (잘 작동)는 다음을 제안합니다.

if iface.mapCanvas().mapRenderer().hasCrsTransformEnabled():
    my_crs = core.QgsCoordinateReferenceSystem(4326,core.QgsCoordinateReferenceSystem.EpsgCrsId)
    iface.mapCanvas().mapRenderer().setDestinationCrs(my_crs)


다음을 호출하여 CRS를 작성할 수도 있습니다.

QgsCoordinateReferenceSystem("PROPERTY:ID")

다음과 같습니다.

QgsCoordinateReferenceSystem("EPSG:31467")

IMHO는 코드를 훨씬 더 읽기 쉽게 만듭니다.


1
코드가 QGIS 2.X위한 참고 다른 답변 QGIS3 코드를 여기에 나열 볼 수
씨 보라색

4

이것을 사용하십시오 :

QgsProject.instance().setCrs(my_crs)

1
QGIS3와 함께 작동 할 때 my_crs=QgsCoordinateReferenceSystem(4326):
axel_ande
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.