python - 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 的新手的人!
解决方案
似乎这与应用程序没有正确刷新有关,如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))
推荐阅读
- c# - 为什么`float`声明是这样`public struct Single`
- python - 将txt文件最后N行的数据提取到python中的数组中
- python - 如何在python中使用xlrd读取一个空的excel单元格
- node.js - 如何修复节点 js + redis + mongodb Web 应用程序中的竞争条件
- ios - RxSwift 订阅将在启动时起作用
- angular - 如何在任何事件上重新初始化 ag-grid?
- c# - 领域更改事件和同步上下文
- php - laravel 5.7 干预 Image::make return 500 Internal Server Error
- mysql - PHP MySQL比较两个表并获取值
- python - 如何将缺少季度的数据为 0 的行插入到熊猫数据框中?