如何在QGIS中提取点Shapefile的屏幕坐标(X、Y)?
在QGIS中提取点要素的屏幕坐标解决方案
QGIS原生工具箱没有直接提取屏幕坐标的工具,因为屏幕坐标依赖当前地图视图的缩放、平移状态,需要通过Python脚本实现:
方法一:将屏幕坐标写入图层属性表
- 在图层面板选中目标点Shapefile图层
- 打开Python控制台(菜单栏
Plugins>Python Console) - 复制以下代码并运行:
from qgis.core import QgsProject, QgsField, QVariant, QgsWkbTypes from qgis.gui import QgsMapCanvas # 获取当前地图画布 canvas = iface.mapCanvas() # 获取激活的点图层 layer = iface.activeLayer() if layer and layer.geometryType() == QgsWkbTypes.PointGeometry: # 检查是否已存在屏幕坐标字段,不存在则添加 field_names = [field.name() for field in layer.fields()] if 'screen_x' not in field_names or 'screen_y' not in field_names: layer.dataProvider().addAttributes([ QgsField('screen_x', QVariant.Int), QgsField('screen_y', QVariant.Int) ]) layer.updateFields() # 编辑图层并写入坐标 layer.startEditing() for feature in layer.getFeatures(): geo_point = feature.geometry().asPoint() # 地理坐标转屏幕像素坐标(原点为画布左上角) screen_point = canvas.mapSettings().mapToPixel().transform(geo_point) feature.setAttribute('screen_x', screen_point.x()) feature.setAttribute('screen_y', screen_point.y()) layer.updateFeature(feature) layer.commitChanges() print("屏幕坐标已成功写入属性表") else: print("请确保选中的是一个点类型图层")
方法二:仅查看屏幕坐标(不修改图层)
如果不需要保存坐标,只想临时查看,可使用以下脚本:
from qgis.core import QgsWkbTypes canvas = iface.mapCanvas() layer = iface.activeLayer() if layer and layer.geometryType() == QgsWkbTypes.PointGeometry: print("要素ID | 屏幕X坐标 | 屏幕Y坐标") print("-------------------------------") for feature in layer.getFeatures(): geo_point = feature.geometry().asPoint() screen_point = canvas.mapSettings().mapToPixel().transform(geo_point) print(f"{feature.id()} | {screen_point.x()} | {screen_point.y()}") else: print("请选中一个点图层")
注意事项
- 运行脚本前需将地图视图调整到你需要的状态(缩放、平移至目标区域),坐标值会随视图变化而更新
- 屏幕坐标原点为QGIS画布的左上角,单位为像素
内容的提问来源于stack exchange,提问作者jthe
相关产品推荐
相关产品推荐

