GitHub代码托管平台使用指南与最新功能解析

2024-12-12 0 182

在当今这个数字化的时代,GIS技术,即地理信息系统,在多个行业扮演着关键角色。不过,关于其开发阶段的关键技术和可能遭遇的难题,人们了解得并不多。这便是我们需深入研究的内容。

GIS组件开发的基础

现在构建四十余种常用GIS组件具有重大价值。比如在[某具体项目]里,地图模块中包含了丰富的精确地理信息。众多开发者根据实际需求对组件进行个性化调整。在实际开发过程中,运用Vue3与Vite的搭配,开发效率显著提升。以某公司的GIS开发项目为例,采用这种组合可以比传统方法减少大约30%的开发时长。

GIS组件的开发涉及多个模块,这些模块的需求各不相同。以场景模块为例,它需要考虑现实中的诸多因素,比如光照。比如在[某地区]的城市规划中,若忽视光照和阴影效果,场景展示将显得不真实。

# 安装依赖包
npm install
# 服务启动/平台启动
npm run dev

3DVis-Vue3总体架构解析

- public
	- app							// 与应用项目
	- config
		- baseConfig.js				// 地理资源配置文件,可配置影像、地形、模型等
		- UIConfig.js				// 组件的配置文件,控制加载、默认状态等行为
	- VGEEarth
		- Config
			- ImageLayerTimeLine	// 卷帘对比组件的配置文件
			- pathPlanning			// 路径规划组件的配置文件
			- plotTool				// 标绘工具组件的配置文件
			- skybox				// 天空盒组件的配置文件
		- Ext						// 其他第三方依赖库的路径
		- Src						// VGEEearhSDK 的路径
	- favicon.ico
- src
	- assets
	- components			// 开发者编写的第二次开发组件路径
	- plugin
	- router
	- store
	- VGEUtils				// GIS 相关组件	
	- App.vue
	- main.js
- index.html
- package.json

该架构由多个部分组成。最底层就像建筑的地基,而类库层和组件层则是核心所在。类库层负责的数据解析和分析,是整个系统的支柱。以某个GIS项目为例,其数据解析功能能够快速应对复杂数据。

组件层通过调用类库来执行特定功能。比如在一个应用案例中,组件层所采用的模块化组件保证了各自功能的独立运作。因此,在调整或更动某个特定功能时,不会对其他部分造成影响。

开发中的特殊规则

const baseConfig = {
    /** SDK 的版本号,可由开发者去自定义 */
    Version: string,
    /** SDK 的 Token,用于与后台服务进行通信 */
    Token: string,
    /** 业务系统的名称 */
    appName: string,
    /** 显示在浏览器上 Tab 栏上的系统名称 */
    appTitle: string,
    /** 业务系统的图标 */
    appIcon: string,
    /** 数字地球的默认启动视角 */
    homeView: {
        longitude: number,
        latitude: number,
        height: number,
        /** 弧度制 **/
        headingRadians?: number,
        pitchRadians?: number,
        rollRadians?: number
    },
    /** 是否显示从全球旋转然后推进到默认视角的加载动画 */
    startAnimation: boolean,
    /** 演示服务器 基础路径 */
    demoServerUrl: string,
    /** 系统后台服务 基础路径 */
    AppBaseUrl: string,
    /** 静态资源服务器 基础路径 */
    GISResourcesUrl: string,
    /** GIS资源配置:图层、地形、gltf模型、倾斜模型、矢量、兴趣点 */
    layerList: ResourceItem [],
    terrainList: ResourceItem [],
    modelList: ResourceItem [],
    cesium3DTileSetList: ResourceItem [],
    geoJsonList: ResourceItem [],
    poiList: ResourceItem []
};
VGEEarth.ConfigTool.loadConfig(baseConfig);

在软件开发阶段,确保不出现全局变量污染是一项关键规范。曾经,一个开发团队未能重视此点,导致多个功能出现混乱。而在另一个知名项目开发过程中,团队严格遵循了这一规范,结果项目得以稳定运行。

enum DataTypeEnum {
    layer = 'layer',
    terrain = 'terrain',
    gltf = 'gltf',
    Cesium3DTile = 'Cesium3DTile',
    geoJson = 'geoJson',
    water = 'water',
    poi = 'poi'
}
interface ResourceItem {
    pid: string,				// 资源项的 pid,如果不指定,将默认自动生成一个
    name: string,				// 资源项的名称
    catalog: string,			// 资源项所属的目录
    dataType: DataTypeEnum,		// 资源项的类型
    showInTree: boolean,		// 资源项是否会出现在资源数中
    defaultLoad: boolean,		// 资源是否默认加载
    /** 资源项的网络根路径 **/
    netRootPaths?: string[],
    /** 资源项是否开启 IndexedDB 缓存,如为 ture 则 netRootPaths 为必填项 **/
    offlineCache: boolean,
    /** 资源项的解码字符串 **/
    decryptionKey?: string,
    
    /** 为 Cesium 的默认参数。例如:
    1、当资源类型为 layer 时,properties 对应填写 new Cesium.ImageryLayer(imageryProvider, options)的 options 参数
    2、当资源类型为 terrain 时,properties 对应填写 new Cesium.Cesium3DTileset(options) 的 options 参数
    **/
    properties: any;			// 为 Cesium 的默认参数。例如
}

引入第三方库有它的技巧。通过index.html导入静态脚本文件,能带来不少便利。比如在某个大型开发项目中,这样做就解决了npm可能引发的版本不兼容等问题,还提升了项目的运行效率。

enum layerSchemeEnum {
    'layer-wms' = 'layer-wms',
    'layer-tms' = 'layer-tms',
    'layer-wmts' = 'layer-wmts',
    'layer-singleTileImagery' = 'layer-singleTileImagery',
    'layer-xyz-3857' = 'layer-xyz-3857',
    'layer-xyz-4326' = 'layer-xyz-4326',
    'layer-arcgisMapServer' = 'layer-arcgisMapServer',
    'layer-geoserver' = 'layer-geoserver',
    'IonImageryProvider' = 'IonImageryProvider'
}

二次开发的基础配置

{
    pid: 'f859bb06-68b3-aed9-f7c5-e85c0c544516',
    name: '高德电子地图',
    catalog: '基础数据',
    dataType: 'layer',
    showInTree: true,
    defaultLoad: true,
    properties: {
       scheme: 'layer-xyz-3857',
       url: 'http://webst04.is.autonavi.com/appmaptile?style=7&x={x}&y={y}&z={z}'
    }
}

基础配置内容十分全面。它包括了项目运行所需的关键信息。比如,项目名称这一项,能帮助用户迅速辨认项目。以[某公司内部项目]为例,只需调整初始视角等参数,不同用户就能获得满意的视觉效果。

{
    pid: '5b1f7a60-3195-4b95-1916-6e87558145f2',
    name: '区域地形',
    catalog: '经典场景',
    dataType: 'terrain',
    default: false,
    properties: {
        scheme: 'CesiumTerrainProvider',
        url: 'https://127.0.0.1:3560/yuncs/dem'
    },
}

在配置过程中,对组件状态的调节至关重要。比如,当[某特定组件]状态发生变动时,所调用的函数便依照这些规则进行,确保其显示与隐藏状态的准确调整。

组件中的工具实现

interface Offset {
    lon: number,
    lat: number,
    height: number
}

实现工具功能涉及多道工序。必须添加特定的模板样式组件。举例来说,在编写[某文件的工具]时,加入样式模板组件,这样才能确保工具窗口的样式保持统一。

{
    name: '大雁塔',
    catalog: '三维模型',
    dataType: '3DTiles',
    properties: {
        url: 'https://127.0.0.1:3560/3DTIles/tileset.json',
        maximumScreenSpaceError: 2,
        offset: {
            height: 180
        }
    }
},

编写具体工具实现功能时,不同组件有其特定的注意事项。以fs-.vue文件为例,必须依据组件的具体功能需求细致入微地编写,绝不能草率行事。

/** 为 false 时,只将资源项显示在资源树中;为 true 时,直接加载上球,并显示在资源树中 **/
VGEEarth.ConfigTool.addOSMOnLine(false);
VGEEarth.ConfigTool.addMapBoxOnAliYun(false);
VGEEarth.ConfigTool.addBingMapOnIon(false);
VGEEarth.ConfigTool.addTerrainOnIon(false);
VGEEarth.ConfigTool.addTerrainOnAliYun(false);

视窗的自定义功能

用户能够通过视窗搭载的多个组件,享受到很高的操作自由度。他们可以随意调整工具和数据的布局,以满足个人需求。在[某GIS应用体验]中,这种灵活性受到了用户的高度赞扬。

this.$store.commit('setVGEEarthComAction', { name: 'areaNavigation', on_off: 2 });

用户自定义视窗主题UI颇具特色。然而,要找到对应的CSS文件进行修改并引入,并非易事。一位新手用户在尝试这一过程时,耗费了不少时间才成功找到正确的路径。

在此,我想请教众多读者,在GIS开发过程中,哪一部分让您感到最为棘手?衷心期望大家能参与到讨论中来。同时,还请为这篇文章点赞并转发,以便让更多的人认识到GIS组件的开发过程。

this.$store.getters.comStatus("areaNavigation")

{name: '洪水模拟', type: 'ToolBoxItem', open: false, comName: 'floodSimulation', config: {inToolBox: true, iconClass: 'fenxi'}},

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

七爪网 行业资讯 GitHub代码托管平台使用指南与最新功能解析 https://www.7claw.com/2802422.html

七爪网源码交易平台

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务