使用QGIS进行分析计算或绘图时,有时会添加很多图层。在不同的图层间进行计算时,若坐标系不同,会导致计算出现偏差。
本文提供一段PyQGIS代码,快速列举出所有图层的坐标系,并判断坐标系是否一致。
from qgis.core import QgsProject, QgsCoordinateReferenceSystem
# 获取当前项目
project = QgsProject.instance()
# 获取所有图层
layers = project.mapLayers()
print("=== 图层坐标系信息 ===")
# 存储所有图层的坐标系信息
crs_list = []
layer_crs_info = []
for layer_id, layer in layers.items():
# 获取图层名称
layer_name = layer.name()
# 获取图层坐标系
crs = layer.crs()
# 获取坐标系描述
crs_description = crs.description()
# 获取坐标系EPSG代码(如果有)
crs_authid = crs.authid()
# 检查坐标系是否有效
is_valid = crs.isValid()
# 存储信息
crs_info = {
'layer_name': layer_name,
'crs': crs,
'crs_description': crs_description,
'crs_authid': crs_authid,
'is_valid': is_valid
}
layer_crs_info.append(crs_info)
crs_list.append(crs)
# 打印每个图层的坐标系信息
for info in layer_crs_info:
print(f"图层名称: {info['layer_name']}")
print(f" 坐标系描述: {info['crs_description']}")
print(f" 坐标系代码: {info['crs_authid']}")
print(f" 坐标系是否有效: {info['is_valid']}")
print("-" * 40)
# 判断所有图层的坐标系是否一致
print("\n=== 坐标系一致性判断 ===")
if len(crs_list) == 0:
print("项目中没有图层")
else:
# 获取第一个图层的坐标系作为参考
reference_crs = crs_list[0]
reference_authid = reference_crs.authid()
all_same = True
different_layers = []
for i, crs in enumerate(crs_list):
current_authid = crs.authid()
# 比较坐标系是否相同
if current_authid != reference_authid:
all_same = False
different_layers.append(layer_crs_info[i]['layer_name'])
if all_same:
print(f"✅ 所有图层的坐标系一致")
print(f" 统一坐标系: {reference_authid} ({reference_crs.description()})")
else:
print(f"⚠️ 图层的坐标系不一致")
print(f" 参考坐标系: {reference_authid} ({reference_crs.description()})")
print(f" 坐标系不一致的图层: {', '.join(different_layers)}")
# 打印每个不一致图层的具体坐标系
for layer_name in different_layers:
for info in layer_crs_info:
if info['layer_name'] == layer_name:
print(f" - {layer_name}: {info['crs_authid']} ({info['crs_description']})")
# 获取项目坐标系
project_crs = project.crs()
print(f"\n=== 项目坐标系 ===")
print(f"项目坐标系: {project_crs.authid()} ({project_crs.description()})")
print(f"项目坐标系是否有效: {project_crs.isValid()}")
更多QGIS脚本问题,欢迎留言或联系我们。转载须注明出处。