QGIS调用GEE加载夜间灯光数据时Map.centerObject行报无效语法
错误原因
- 触发无效语法报错的直接原因是上一行
Map.addLayer()调用缺失闭合右括号:Python解析器读取到Map.centerObject(sydney, 5)时,仍判定自己处于上一行未闭合的函数参数范围内,因此将该行标记为语法错误,实际问题出在前一行。 - 原代码还存在三处会导致运行失败的问题:
Map.addLayer()参数格式错误:将可视化参数字典、图层名称错误包裹在同一个元组内传入,不符合该函数的参数要求。- 未定义
sydney变量:仅声明了shapefile的存储路径,既没有读取加载该矢量文件,也没有将其转换为GEE可识别的要素对象,后续裁剪、定位操作调用sydney时会触发变量不存在错误。 - 原shapefile路径仅写到文件夹层级,没有指定具体的
.shp文件,无法正常读取矢量数据。
修复方案
- 补全
Map.addLayer()的闭合括号,调整参数传递格式:按(GEE对象, 可视化参数字典, 图层名称)的顺序平级传入参数。 - 补充本地shapefile的读取、转换逻辑,将加载后的GEE要素集合赋值给
sydney变量。 - 补全shapefile路径到具体的
.shp文件,同时调整夜间灯光分级图层的可视化参数,适配分级结果1-3的取值范围。
修复后可运行代码
import ee import json from ee_plugin import Map from qgis.core import QgsVectorLayer # 替换为你本地shapefile的完整路径,精确到.shp文件 sydney_shp_path = '/Users/macbookpro/Downloads/OpenNightLights-master 2/onl/tutorials/files/city_of_sydney_shapefile/city_of_sydney.shp' # 读取本地shp为QGIS矢量图层 qgis_sydney = QgsVectorLayer(sydney_shp_path, 'sydney_boundary', 'ogr') # 转换为GEE可识别的FeatureCollection对象 sydney = ee.FeatureCollection(json.loads(qgis_sydney.asJsonObject().data())) night_img = ee.ImageCollection("NOAA/VIIRS/DNB/MONTHLY_V1/VCMSLCFG")\ .filterDate('2018-01-01','2018-12-31')\ .select('avg_rad') NL_mean = night_img.mean() # 夜间灯光分为3个等级:5-50、50-100、100以上,取值为1/2/3 nightclass = NL_mean.gt(5).add(NL_mean.gt(50)).add(NL_mean.gt(100)) nightclass = nightclass.updateMask(nightclass.neq(0)) # 加载裁剪后的夜间灯光分级图层 Map.addLayer( nightclass.clip(sydney), {'min':1, 'max':3, 'palette': ['#ffffb2', '#fecc5c', '#e31a1c']}, 'VIIRS 2018 Nightlight' ) Map.centerObject(sydney, 5)
如果你已经将悉尼边界文件上传为GEE个人资产,可以直接用
sydney = ee.FeatureCollection("你的GEE资产路径")替换本地shp读取的代码段,不需要调用QGIS的矢量读取接口。
内容的提问来源于stack exchange,提问作者Moyinoluwa Morakinyo
相关产品推荐
相关产品推荐

