初遇Citymaker (十五)
场景渲染控制器
- 调用
-
switch (type) {
-
case "pause":
-
cw5.sceneLayerCtrl.stopRendering();
-
break;
-
case "resume":
-
cw5.sceneLayerCtrl.resumeRendering();
-
break;
-
case "stop":
-
cw5.sceneLayerCtrl.stopRenderingTotal();
-
break;
-
case "reset":
-
cw5.sceneLayerCtrl.reset();
-
break;
-
case "init":
-
cw5.init();
-
cw5.loadMap();
-
break;
-
}
-
import { cw5 } from "../index.js";
-
import { map3dLog } from "../log/log";
-
export const sceneLayerInnerUtils={};
-
-
/**
-
* 功能:获取要素类
-
* @param mapInfo 三维地图的某一个图层的信息
-
* @returns {*} 返回要素类
-
*/
-
sceneLayerInnerUtils.getFeatureClass=function(mapInfo){
-
let ds = null, ci = null, fc = null, fl = null;
-
//参数检查
-
for (let item in mapInfo) {
-
let key = item.toString();
-
if (mapInfo[key] === "") {
-
// console.log(key+" is empty!");
-
}
-
}
-
ci = cw5.__g.new_ConnectionInfo;
-
ci.connectionType = cw5.GetEnumValue1(cw5.innerConfig.gviConnectionType, mapInfo.ConnectionType);
-
ci.database = mapInfo.service;
-
ci.server = mapInfo.host;
-
ci.port = mapInfo.port;
-
if (mapInfo.password !== "") {
-
ci.password = mapInfo.password;
-
}
-
-
ds = cw5.__g.dataSourceFactory.openDataSource(ci);
-
let fds = ds.openFeatureDataset(mapInfo.dataSet);
-
let fcNames;
-
if(cw5.version==7){
-
fcNames = fds.getNamesByType(cw5.innerConfig.gviDataSetType.gviDataSetFeatureClassTable);
-
}
-
else if(cw5.version==8){
-
fcNames = fds.getNamesByType(cw5.innerConfig.gviDataSetType.gviDataSetFeatureClassTable).toArray();
-
}
-
if (fcNames && fcNames.indexOf(mapInfo.featureClassName) > -1) {
-
fc = fds.openFeatureClass(mapInfo.featureClassName);
-
}else{
-
map3dLog.error("fcNames is Error!")
-
}
-
-
return fc;
-
}
-
-
/**
-
* 加载栅格图层,可以支持WMS、MapServer
-
* @param mapInfo
-
* @returns {*}
-
*/
-
sceneLayerInnerUtils.getRasterLayer=function(mapInfo) {
-
let fl = null;
-
let __g = cw5.__g;
-
let url = mapInfo.server;
-
let connectionType = cw5.GetEnumValue1(cw5.innerConfig.gviRasterConnectionType, mapInfo.ConnectionType);
-
let source = __g.rasterSourceFactory.openRasterSource(url, connectionType);
-
if (source) {
-
let names = source.getRasterNames();
-
let raster = source.openRaster(names[0]);
-
fl = __g.objectManager.createImageryLayer(raster.connStr, "");
-
}
-
return fl;
-
}
-
-
-
/**
-
* 获取要素图层
-
* @param fc 要素类
-
* @param mapInfo 某一个图层的地图信息
-
* @returns {*} 返回某个要素图层
-
*/
-
sceneLayerInnerUtils.getFeatureLayer = function (fc, mapInfo) {
-
let __g =cw5.__g;
-
let fl = null;
-
let textRender = null;
-
let geoRender = null;
-
let geoName = mapInfo.geoName;
-
if (fc === null) {
-
throw new Error("Feature class is null!");
-
}
-
fl = __g.objectManager.createFeatureLayer(fc, geoName, textRender, geoRender, "");
-
if (fl) {
-
fl.maxVisibleDistance = mapInfo.maxVisibleDistance;
-
fl.minVisibleDistance = mapInfo.minVisibleDistance;
-
fl.minVisiblePixels = mapInfo.minVisiblePixels;
-
}
-
if (!mapInfo.visible) {
-
__g.projectTree.setVisibility(fl.guid, mapInfo.visible);
-
}
-
-
return fl;
-
};
-
-
-
-
/**
-
* 功能:加载地形
-
*/
-
sceneLayerInnerUtils.loadTerrain = function (mapInfo) {
-
let __g = cw5.__g;
-
let terrainUrl = mapInfo.service + ':' + mapInfo.dataSet + '@' + mapInfo.host + ':' + mapInfo.port;
-
-
if (__g.terrain.registerTerrain(terrainUrl, mapInfo.password)) {
-
__g.terrain.demAvailable = mapInfo.demAvailable;
-
__g.terrain.opacity = mapInfo.opacity;
-
cw5.isTerrainLoad = true;
-
-
if (mapInfo.visible) {
-
__g.terrain.visibleMask = cw5.innerConfig.gviViewportMask.gviViewAllNormalView;
-
} else {
-
__g.terrain.visibleMask = cw5.innerConfig.gviViewportMask.gviViewNone;
-
}
-
}
-
};
-
-
/**
-
* 功能:加载瓦片服务
-
* */
-
sceneLayerInnerUtils.loadTileLayer = function (mapInfo) {
-
let __g = cw5.__g;
-
let terrainUrl = mapInfo.service + '@' + mapInfo.host + ':' + mapInfo.port;
-
let layer = __g.objectManager.create3DTileLayer(terrainUrl, "", "");
-
if (mapInfo.visible) {
-
layer.visibleMask = cw5.innerConfig.gviViewportMask.gviViewAllNormalView;
-
} else {
-
layer.visibleMask = cw5.innerConfig.gviViewportMask.gviViewNone;
-
}
-
return layer;
-
};
- sceneLayerCtrl
```javascript
import { sceneLayerInnerUtils } from "./sceneLayerInnerUtils";
import { cw5 } from "../index.js";
export const sceneLayerCtrl= {};
const sceneLayerContainer={}
/**
- 加载地图配置信息 场景控制器核心
- mapInfo 地图配置信息 来自配置文件或自定义
- */
sceneLayerCtrl.loadMapInfo = function(mapInfo) {
let fc = null, fl = null;
let type = mapInfo.type;
try{
switch (type) {
case "raster":
fl = sceneLayerInnerUtils.getRasterLayer(mapInfo);
mapInfo.fl=fl;
更多参考 https://xiaozhuanlan.com/topic/5946123078
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律