前言

这个是 GIS 厂商在 ArcGIS API for JavaScript一个Bootstrap主题,用于设计,样式化和创建现代地图应用程序 calcite-maps 两个开源框架的基础上,自行研发的一套应用。
由于源码中后端部分使用的是人家自行研发的引擎 GISServer ,涉及到了商业机密,所以本篇文章下面所说的 代码 均代表的是其中可分析的前端源码部分。

  • 线上预览图

线上预览图.png

准备工作

  • 首先是将源码下载到本地,注意:这里只提供公司内部的 svn 地址。

点击打开 svn 地址

正文

1. 目录结构分析

目录结构.png

  • arcgis_js_api 文件夹

这个文件夹其实存放的是 ArcGIS API for JavaScript 官方提供的 api 部分,相当于资源引用的地方,从官网改成了本地环境。

  • shandonggis_v2 文件夹

这个其实是需要我们这边随时与 GIS 厂商同步的代码备份,也就是说人家的代码有何变动,需要手动去将人家的所有代码复制过来(这里的复制操作,需要登录山东这边本地的云桌面才可以,具体细节就不再概述),进行一个全部替换的操作。

  • shandonggis_v3 文件夹

这个是为了满足我们这边的需求,在 shandonggis_v2 文件夹源码的基础上进行一些简单的定制化修改后的代码,也就是我们这边生产环境部署的代码。

  • shandonggis_v3 -> calcite-maps 文件夹

calcite-maps.png
这个文件夹是 一个Bootstrap主题,用于设计,样式化和创建现代地图应用程序 calcite-maps 开源框架的源码部分。

  • shandonggis_v3 -> js 文件夹

js.png
这个文件夹中的 config 部分主要是应用的配置;library 部分是自定义的可复用组件。

  • shandonggis_v3 -> jslib 文件夹

jslib.png
里面放的都是常用的第三方插件,例如 jQuery

2. 主要的文件源码分析

1. shandonggis_v3 -> js -> config -> default.js 应用使用的配置文件

default.png

  • resFeatureLayers 属性

resFeatureLayers.png
这个属性是图层的分类信息,小区、门店之类的
BUILDING.png
fieldInfos 属性是在页面显示图层详情时,需要展示的相应字段
BUILDING.png
renderFromServerConfig 属性表示的是,是否需要从服务器中取图层的数据

  • clientFeatureLayers 属性

clientFeatureLayers.png
初始加载的图层列表,分先后顺序:点图层须在面、线图层之后,使点图层在面图层的顶部,这里的文本和 resFeatureLayers 属性中的是一一对应的,只是顺序可以随着自己的需求做调整。

  • shandongIPAddress 属性

shandongIPAddress.png
山东自定义 IP 地址,判断环境返回本地和线上不同地址

2. shandonggis_v3 -> js -> library -> datang -> FeatureLayerLoader.js 应用初始化加载是使用的函数,应用大部分的逻辑都在这个文件中写的

  • loadFeatureLayer 函数

loadFeatureLayer.png
loadFeatureLayer.png
上图的是 从服务端获取渲染信息和标注信息 的地方,页面上每个图层加载时都会使用该函数
click.png
上图是每个图层点击时的回调函数,内部使用到了下面要说的 showResDetail 函数

  • showResDetail 函数

showResDetail.png
该函数主要负责拼接图层详情所需要的内容
详情示例.png
这里我们这边定制了一个需求:如果地图上的图层点击时包含编号(是否转化的标识),请求我们这边的接口,没有的话使用地图默认的数据,如下图所示
定制需求的判断.png
定制需求的判断.png