Cesium加载本地地形和影像切片
用自己的工具切的地形切片,渲染出来一大片黑色,原以为是加载代码不正确,或者是生成的元数据不正确,最后调试才发现是修改了重采样函数,引入NoData值-3.4e-38,可能直接用作高程,穿透地球,所以显示黑色。最后NoData改成0.0解决问题。最终的加载代码:
影像切片的元数据meta.json
(async function () {
//影像切片元数据中的范围
const rect = Rectangle.fromDegrees(
120.214522376701,
31.211460257123,
120.300532696172,
31.288470774705
);
//ImageryProvider
const localImagery = new UrlTemplateImageryProvider({
url: 'http://localhost:7090/data/png/{z}/{x}/{y}.png',
tilingScheme: new WebMercatorTilingScheme(),
minimumLevel: 0,
maximumLevel: 17,
tileWidth: 256,
tileHeight: 256,
rectangle: rect
});
const localTerrain=await CesiumTerrainProvider.fromUrl('http://localhost:7090/data/mesh')
const viewer = new Viewer('cesiumContainer', {
baseLayerPicker: false,
terrainProvider:localTerrain
//或者
//terrain:new Terrain(CesiumTerrainProvider.fromUrl('http://localhost:7090/data/mesh'))
});
viewer.imageryLayers.removeAll()
viewer.imageryLayers.addImageryProvider(localImagery);
viewer.camera.setView({
destination: rect
});
})();
影像切片的元数据meta.json
{
"bounds":{
"east":13391794.04,
"north":3670269.51,
"south":3660241.84,
"west":13382219.42
},
"contentType":"image / png",
"generator":"Land",
"latLonBounds":{
"east":120.300532696172,
"north":31.288470774705,
"south":31.211460257123,
"west":120.214522376701
},
"maxzoom":17,
"minzoom":0,
"tilesize":256,
"proj":"3857",
"type":"png"
}
将bounds引入UrlTemplateImageryProvider告诉引擎只请求该区域的影像。
地形切片的元数据文件layer.json内容:
{
"tilejson": "2.1.0",
"name": "land_real_a",
"description": "",
"version": "1.1.0",
"format": "quantized-mesh-1.0",
"attribution": "",
"schema": "tms",
"tiles": [ "{z}/{x}/{y}.terrain?v={version}" ],
"projection": "EPSG:4326",
"bounds": [ 0.00, -90.00, 180.00, 90.00 ],
"available": [
[ { "startX": 1, "startY": 0, "endX": 1, "endY": 0 } ]
,[ { "startX": 3, "startY": 1, "endX": 3, "endY": 1 } ]
,[ { "startX": 6, "startY": 2, "endX": 6, "endY": 2 } ]
,[ { "startX": 13, "startY": 5, "endX": 13, "endY": 5 } ]
,[ { "startX": 26, "startY": 10, "endX": 26, "endY": 10 } ]
,[ { "startX": 53, "startY": 21, "endX": 53, "endY": 21 } ]
,[ { "startX": 106, "startY": 43, "endX": 106, "endY": 43 } ]
,[ { "startX": 213, "startY": 86, "endX": 213, "endY": 86 } ]
,[ { "startX": 426, "startY": 172, "endX": 427, "endY": 172 } ]
,[ { "startX": 853, "startY": 344, "endX": 854, "endY": 344 } ]
,[ { "startX": 1707, "startY": 689, "endX": 1708, "endY": 689 } ]
,[ { "startX": 3415, "startY": 1379, "endX": 3416, "endY": 1379 } ]
,[ { "startX": 6831, "startY": 2758, "endX": 6833, "endY": 2759 } ]
,[ { "startX": 13663, "startY": 5516, "endX": 13667, "endY": 5519 } ]
]
}
bounds大一点也没关系,比如直接设成全球
关键是available中的范围为引擎调用的查找范围,没有出现在此就不渲染。大了也没关系,只是在控制台有加载失败错误,不影响渲染
bounds大一点也没关系,比如直接设成全球
关键是available中的范围为引擎调用的查找范围,没有出现在此就不渲染。大了也没关系,只是在控制台有加载失败错误,不影响渲染
浙公网安备 33010602011771号