추가하려는 기존 Shapefile이 있습니다.
현재 내 코드는 다음과 같습니다.
self.iface.addVectorLayer(self.shpFilePath, "Track", "ogr")
잘 작동하지만 코드 내에서 crs를 정의하고 싶습니다. 가능합니까? 이와 비슷한 질문을 발견했습니다. 파이썬을 사용하여 QGIS 2.4에서 프로그래밍 방식으로 CRS 선택
하지만 어쨌든 작동하지 않습니다.
추가하려는 기존 Shapefile이 있습니다.
현재 내 코드는 다음과 같습니다.
self.iface.addVectorLayer(self.shpFilePath, "Track", "ogr")
잘 작동하지만 코드 내에서 crs를 정의하고 싶습니다. 가능합니까? 이와 비슷한 질문을 발견했습니다. 파이썬을 사용하여 QGIS 2.4에서 프로그래밍 방식으로 CRS 선택
하지만 어쨌든 작동하지 않습니다.
답변:
이 방법으로 비슷한 문제를 해결합니다.
from qgis.core import *
from qgis.gui import *
layer = QgsVectorLayer(self.shpFilePath, "Track", "ogr")
crs = layer.crs()
crs.createFromId(4326)
layer.setCrs(crs)
QgsMapLayerRegistry.instance().addMapLayer(layer)
모두를 기반으로 이 블로그 게시물 과에 대한 대답 어떻게 내가 pyqgis에서 래스터 레이어의 CRS를 지정할 수 있습니다? 이 방법으로 원하는 것을 얻을 수 있습니다.
settings = QSettings()
# Take the "CRS for new layers" config, overwrite it while loading layers and...
oldProjValue = settings.value( "/Projections/defaultBehavior", "prompt", type=str )
settings.setValue( "/Projections/defaultBehavior", "useProject" )
# YOUR CODE TO LOAD THE LAYER GOES HERE
# ... then set the "CRS for new layers" back
settings.setValue( "/Projections/defaultBehavior", oldProjValue )
참고 : QGIS v2.x (BTW, : P)를 계속 사용하는 경우 변수 이름 "/ Projections / defaultBehaviour"를 대신 사용하십시오.
다음 코드를 사용하면 CRS 팝업 창이 나타나지 않는 벡터 레이어를 추가 할 수 있습니다 (가장별로 나타나지 않음).
from qgis import *
from qgis.utils import *
#replace "shapefile_path" with your layer's path; replace "Layer_name" with whatever name you want to give the layer in the TOC
qgis.utils.iface.addVectorLayer("shapefile_path", "Layer_name", "ogr")
#Use loaded layer as active layer to set the CRS
myLayer = qgis.utils.iface.activeLayer()
myLayer.setCrs(QgsCoordinateReferenceSystem(4326, QgsCoordinateReferenceSystem.EpsgCrsId))
#Sets canvas CRS
my_crs = core.QgsCoordinateReferenceSystem(4326, core.QgsCoordinateReferenceSystem.EpsgCrsId)
iface.mapCanvas().mapRenderer().setDestinationCrs(my_crs)
간단히 변경할 4326받는 두 경우 모두 CRS 값 기관 ID 그림과 같이 당신의 선택의를 :

몇 달 후 나는 해결책을 찾았다. @Domokos Endre의 스크립트 앞과 끝에 두 줄을 추가해야합니다.
import os
iface.mainWindow().blockSignals(True)
layer = QgsVectorLayer(path, "My Layer", "ogr")
crs = layer.crs()
crs.createFromId(32637) # Whatever CRS you want
layer.setCrs(crs)
QgsProject.instance().addMapLayer(layer)
iface.mainWindow().blockSignals(False)
나에게 위의 해결책이 효과가 없습니다. 어쩌면 csv를 모양 파일이 아닌 벡터 레이어로로드하기 때문일 수 있습니다. 내가 작동시킬 수있는 유일한 방법은 다음과 같습니다.
crs = QgsCoordinateReferenceSystem(2180)
self.iface.mapCanvas().mapRenderer().setDestinationCrs(crs)
vlayer = QgsVectorLayer(filePath, "layer name", "ogr")
vlayer.setCrs(QgsCoordinateReferenceSystem(2180))
이 답변 에서는 파일을 메모리로로드하는 데 사용되는 URL에 CRS를 지정하여이 대화 상자를 피하는 방법에 대해 설명합니다. 따라서 Shapefile 경로를로 직접 전달하는 대신 적절한 URL을 addVectorLayer()사용 하여을 QgsVectorLayer만든 다음을 호출하십시오 addMapLayer().
import urlparse
import urllib
baseuri = urlparse.urljoin('file:', urllib.pathname2url(self.shpFilePath))
uri = baseuri + "?crs=EPSG:4326"
vlayer = QgsVectorLayer(uri, "result", "memory")
QgsMapLayerRegistry.instance().addMapLayer(vlayer)