ArcGIS Maps SDK for Kotlin:GeoPackage栅格NoData区域显示黑色而非透明问题
GeoPackage栅格NoData区域不透明+Mask函数rasterNames为空问题解决(ArcGIS Maps SDK for Kotlin 200.3)
问题概况
- 加载本地两个GeoPackage栅格叠加显示时,NoData区域显示为黑色而非透明,上层栅格遮挡下层内容;WMTS栅格的NoData区域可正常透明显示,仅GeoPackage存在此问题。
- 尝试使用
Mask栅格函数修复时,出现rasterNames为空列表的异常。
问题原因
- GeoPackage栅格默认未启用NoData值的透明渲染逻辑,需手动配置。
- 原Mask函数JSON的变量定义不规范:
Raster参数使用$$而非$变量名$的格式,导致栅格函数无法识别输入变量,进而rasterNames为空。
解决方案
方案1:直接配置RasterLayer的NoData透明(更简洁)
无需使用栅格函数,直接给RasterLayer设置NoData值并开启透明属性:
val geoPackage = GeoPackage("file_path") val loadResult = geoPackage.load() loadResult.onFailure { throw it } val geoRaster = geoPackage.geoPackageRaster.first() val rasterLayer = RasterLayer(geoRaster) // 配置NoData值为0,开启透明 rasterLayer.renderer?.let { renderer -> if (renderer is RasterRenderer) { renderer.noDataValues = doubleArrayOf(0.0, 0.0, 0.0) renderer.isNoDataTransparent = true } } arcGISMap.operationalLayers.add(rasterLayer)
方案2:修复Mask栅格函数配置
修正栅格函数JSON的变量定义,确保能正确识别输入栅格:
修正后的raster_function_json
{ "rasterFunction": "Mask", "rasterFunctionArguments": { "NoDataValues": [0.0, 0.0, 0.0], "IncludedRanges": [1.0, 255.0, 1.0, 255.0, 1.0, 255.0], "NoDataInterpretation": 1, "Raster": "$Raster$" }, "variableName": "Raster" }
对应Kotlin代码
val geoPackage = GeoPackage("file_path") val loadResult = geoPackage.load() loadResult.onFailure { throw it } // 加载修正后的栅格函数JSON val remapFunction = RasterFunction.fromJson(File("raster_function_json_path").readText()) remapFunction?.arguments?.let { args -> // 直接通过变量名"Raster"设置输入栅格,避免依赖rasterNames args.setRaster("Raster", geoPackage.geoPackageRaster.first()) } val maskedRaster = Raster.createWithRasterFunction(remapFunction) val layer = RasterLayer(maskedRaster) arcGISMap.operationalLayers.add(layer)
关键修正点:
- 将
Raster参数值从$$改为$Raster$,与variableName对应; NoDataValues使用数值类型而非字符串;- 代码中直接通过变量名设置输入栅格,规避
rasterNames为空的问题。
内容的提问来源于stack exchange,提问作者Lidor
相关产品推荐
相关产品推荐

