首页 > 解决方案 > PyQGIS在导入csv时更改底图crs

问题描述

我正在使用 PyQGIS 导入具有 lat 和 long 的 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 的新手的人!

标签: pythoncsvmappinggis

解决方案


似乎这与应用程序没有正确刷新有关,如gis 堆栈上的答案中所述。您可能需要查看详细信息。

为了简要回答您的问题,您可以添加QApplication.instance().processEvents()afterQgsProject.instance().addMapLayer(layer_csv)然后使用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))

推荐阅读