[英]PyQGIS changing basemap crs when importing a csv
我正在使用 PyQGIS 导入具有纬度和经度的 csv 文件,这样做时我使用的是 EPSG:4326 的适当 crs。 我正在将其绘制到谷歌地图上。
我加载我的底图,然后导入我的 CSV。 问题是我的底图投影然后更改为 4326,我需要它保持在 3857。
我尝试在 CSV 之后导入底图并将其向下移动到图层中,但这仍然会改变投影。
import requests
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from qgis.core import *
from qgis.utils import iface
from qgis import core
#Use Google Street Map as QGIS basemap.
service_url = "mt1.google.com/vt/lyrs=m&x={x}&y={y}&z={z}"
service_uri = "type=xyz&zmin=0&zmax=21&url=https://"+requests.utils.quote(service_url)
tms_layer = iface.addRasterLayer(service_uri, "GoogleSat", "wms")
#Import CSV and plot.
uri = 'file:///home/user/fred.csv?type=csv&xField=%s&yField=%s&crs=%s' % ("Site Longitude", "Site Latitude", "EPSG:4326")
layer_csv = QgsVectorLayer(uri, 'fred', 'delimitedtext')
layer_csv.isValid()
QgsProject.instance().addMapLayer(layer_csv)
我将是第一个承认我是 QGIS 的新手的人!
似乎这与应用程序没有正确刷新有关,如 gis 堆栈上的答案中所述。 您可能需要查看详细信息。
为了简要回答您的问题,您可以在QgsProject.instance().addMapLayer(layer_csv)
之后添加QApplication.instance().processEvents()
,然后使用setCrs()
将底图 CRS 设置为您需要的任何值。 它会举行。
proj = QgsProject.instance()
proj.addMapLayer(layer_csv)
# This line makes the difference
QApplication.instance().processEvents()
# This sets the project CRS back to 3857
proj.setCrs(QgsCoordinateReferenceSystem(3857))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.