繁体   English   中英

导入 csv 时 PyQGIS 更改底图 crs

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM