WebGIS工程师进阶训练营

2023-11-02

WebGIS工程师进阶训练营

1. WebGIS课程综述

  • 课程目标
    • 掌握不同操作系统以及中间件环境中部署GIS服务器的方法
    • 掌握并能够运用地图缓存策略,实现WebGIS系统性能调优
    • 掌握GIS服务器运维管理内容,分析并解决服务运行问题
    • 掌握调用REST各类GIS服务并获取其响应的能力的方法
    • 掌握GIS分析、可视化等相关接口,理解网络模型相关参数的含义
    • 掌握VUE常用API、Vue-cli、Element、Vuex、vue-router、以及MVVM原理
  • 预备知识
    • 具备GIS基本理论知识
    • 能够使用GIS平台发布适当的地理信息服务
    • 掌握HTML、CSS、Javascript的基本语法
    • 了解主流前端框架与开发工具
    • 能够运用客户端API实现简单GIS系统开发

2. 多类情景部署SuperMap iServer

  • 安装包的类型
    • Setup 包: 用于Win环境上的安装包
    • ZIP包: 用于Win环境的解压包
    • TAR包: Linux 解压包
    • WAR包: 部署在Web中间件的包(tomcat)
    • Deploy包: 不包含示例代码、范例数据、帮助文档以及客户端开发工具包
    • Mapping包: 细粒度分发包-Mapping分发包
    • Realspace包: 细粒度分发包-Realspace分发包
    • Analysis包: 细粒度分发包-Analysis分发包

2.1 Linux环境部署SuperMap iServer

  1. 下载
    官网下载
  2. 解压
tar -zxvf supermap-iserverr-***-linux.tar.gz
  1. 依赖&许可(root用户下执行)

手动安装依赖库

# 1. 检查缺少的依赖
cd supermap-iserverr-***-linux/support/objectsjava
tar -zxvf bin.tar.gz
mv Bin bin
cd bin
export LD_LIBRARY_PATH=.
ldd libWrapjc* | grep not
# 然后根据提示缺少的rpm,手动安装依赖

自动一键安装脚本

cd supermap-iserverr-***-linux/support
./dependencies_check_and_install.sh install -y

许可驱动安装

cd supermap-iserverr-***-linux/suppor/Supermap_License/Support
tar -xvf *.tar
cd aksusbd-*
chmod +x dinst
./dinst

许可检查

# iserver根目录下执行
./licensetools.sh -s
  1. 启动
cd supermap-iserverr-***-linux/bin
./startup.sh
# 检查日志
tail -f ../logs/catalina.out

2.2 war包部署

这个流程比较简单,相对正常在tomcat环境下的war包部署,多了SuperMap 组件配置、和依赖许可配置

  • 下载
  • 解压
  • java环境配置
  • SuperMap 组件配置
  • 依赖& 许可配置
  • 中间件部署
  • iserver War部署
  • 启动

2.3 常见问题排查

  1. 启动后无法访问
    检查日志是否启动正常、防火墙是否关闭
systemctl status firewalld # 查看防火墙
firewall-cmd --list-all # 查看防火墙规则
firewall-cmd --permanent --add-port=8090/tcp # 开放端口8090
firewall-cmd --reload # 重启防火墙
netstat tulnp # 查看当前机器占用(需要安装net-tools)
  1. 查看许可状态报错
    安装许可驱动(dunst用于卸载许可驱动)
  2. 如何更换许可
    删除iserver-system.xml 下的license节点,再配置;
    正式许可会受到试用许可影响,删除干净试用许可
  3. 忘记supermap iserver 密码
    停止iserver然后在 bin 目录下执行 ./passwordreset.sh
    也可以删除iserver-security.db(sqlite文件型数据库) 数据库中user表下的admin用户记录
    如果用户不多,可以直接删除iserver-security.db文件,启动后会重新生成
  4. 日志文件存储
    根目录 logs下,可以在iserver管理页面更改日志保存目录和日志级别

3. SuperMap iServer服务管理与服务发布

本节主要讲了如何管理iserver服务,这里比较基础的没有记录,只记录一些新增特性和未使用过的功能

3.1 服务装配

可以对服务的配置信息进行修改。

3.2 删除服务

方法一: 删除服务管理中的服务,然后删除对应的服务组件、服务提供者(确保删除的服务组件和服务提供者没有被其他服务实例使用)
方法二: 利用工作空间选项卡,删除某个工作空间的所有GIS服务(该方法直接删除所有服务提供者、服务组件)

3.3 计划任务

SuperMap iServer服务器定时资源回收,iserver GIS 服务器自动重启的一个过程,防止资源释放不干净。

3.4 服务实例动态化

服务可以事先发布好,不去启用,只有需要用到的时候才会启用,发布的信息会保留着

3.5 备份与恢复

在这里插入图片描述

4. Rest API 开发思路

4.1 rest简介

REST(Respresentational State Transfer 表述性状态转移)

  • 资源: 事物都被抽象为资源
  • URI:每个资源对应一个唯一的资源标识
  • CURD:使用标准方法(GET , POST , PUT , DELETE)
  • 格式:资源多重表述(png, html , rjson, …)
  • stateless: 无状态通信
    1) REST与SOAP的对比
  • SOAP:封装过的xml,逐渐过时
  • REST:表述性的日益流行
    2)REST的特点
  • rest是一种架构,而不是一个规范
  • 具有幂等性:可缓存,对于相同的请求,服务器返回的结果也是相同的
  • 服务器无状态:服务器不会保存任何与客户端的会话状态信息
  • 典型的C/S架构:服务器负责数据操作,客户端负责显示,开发简单
    3)REST风格的Web服务
  • 通过HTTP发送数据,最常见方式是把请求参数放在URL中,通过URL发送请求参数,通过JSON等格式向客户端返回结果
  • 每一个资源对应一个URI(统一资源标识符),在不严格情况下,URI可以理解为URL

4.2 认识SsuperMap iServer REST 资源

本节内容比较简单,查阅帮助文档查看具体的api接口文档。根据接口构建请求参数,发送GET / POST / PUT / DELETE请求。

1. iServer REST资源支持的HTTP方法

略…

2. 如何使用iServer REST资源

略…

4.3 了解REST的特点

略…

5. SuperMap iClient 产品介绍及开发API

5.1 SuperMap iClient Javascript概览

GIS平台统一的Javascript客户端。
在这里插入图片描述

5.2 SuperMap iClient Javascript 地图库选型

在这里插入图片描述

  • leaflet
    • 轻量级 & mobile-friendly
    • 实践多,社区有很多经验
    • Mapbox.js
  • MapBox GL JS
    • 只支持3857 4326等几种坐标系,不支持自定义坐标系
    • WebGL 立体呈现
    • Vector Tiles 矢量瓦片对接
    • Map Box Styles
  • OpenLayers5/6
    • H5-WebGL
    • Vector Layers
    • OL3+Cesium(二三维联动)

1. 地图库选型对比
在这里插入图片描述

2.WebGIS组件库

  • Vue MapBoxGL
  • Vue Leaflet
  • React MapboxGL

5.3 SuperMap iClient for Leaflet API详解

查阅文档即可,略…

5.4 项目框架介绍

略…

6. 坐标设置

6.1 SueprMap iClient for Leaflet 坐标系设置

1. 常用坐标系

  • 高德./火星坐标
    • gcj02坐标,在原始坐标的基础上进行偏移得到的坐标
  • 百度坐标
    • bd09II坐标,在火星坐标的基础上进行二次加密
  • 常规坐标
    • 如WGS_1984,叠加火星坐标或百度坐标数据存在错位现象
  • 地方坐标
    • 如:广州地方坐标系、NJ08坐标系
      2. 坐标系与EPSG Code
  • EPSG Code 理解为坐标系的编号,由EPSG也就是欧洲石油调查组织发布
  • 常用坐标系
    • WGS84。 EPSG CODE:4326
    • CGCS2000。 EPSG CODE:4490
    • 北京54。 EPSG Code: 4214
    • 西安80。 EPSG Code: 4610
      3. 常见问题
  • Leaflet地图中心设置仅支持经纬度
  • Leaflet开发,叠加点线面对象仅支持经纬度
  • Leaflet开发,可视化展示仅支持经纬度

6.2 SuperMap iClient for Leaflet 坐标转换

1. 坐标转换方法

  • L.Proj.CRS方法
// 地理坐标系转投影坐标系
Point = L.Proj.CRS.project(<Latlng> latlng);
// 投影坐标系转地理坐标系
LatLng = L.proj.CRS.unproject(<Point> point);
  • transform 方法
result = L.supermap.Util.transform(feature, sourceCRS, targetCRS);

**2. 需要进行坐标转换的情况 **

  • 不同坐标系地图叠加显示
  • 用于分析的数据见坐标不一致
  • 进行查询的数据坐标不一致

7、 GIS功能开发思路

7.1 GIS功能开发思路

1.GIS功能分类

  • 地图显示
    • 地图浏览
    • 基础操作,如缩放等。
  • 带有属性结果的GIS功能
    • 查询
    • 交通网络分析
    • 空间分析

7.2 GIS开发功能实现

1. 常见问题

  • 如何与数据集的外部信息进行关联查询
    • joinItems: 关联查询项数组
    • linkIntems: 外部表的关联信息,目前只支持SQLServer和Oracle类型
  • 如何同时查询多个图层,且每个图层查询条件不同?
	var param = new L.supermap.QueryBySQLParameters({
		queryParams: [{
			name: "",
			attributeFilter: ""
		},{
			name: "",
			attributeFilter: ""
		}]
	})

8、 空间分析技术与开发思路

8.1 空间分析概述及应用

1. 空间分析概述

空间分析是基于地理对象位置和形态空间数据的分析技术,其目的在于提取和传输空间信息。强大的空间分析能力是GIS的主要特征。

2. 矢量分析——缓冲区分析
缓冲区分析(buffer)是IGS的基本空间操作功能之一,是指根据指定的距离,在点、线、面几何对象周围自动建立一定宽度的区域的分析方法。
二维单重、多重缓冲区

3. 矢量分析——叠加分析
叠加分析是在统一空间参考系统下,通过对两个数据集进行的一系列集合运算,生成新数据集,提取用户需要的新的空间几何信息。同时,通过叠加分析,还可以对数据的各种属性信息进行处理。

  • 叠加分析的两个数据必须有相同的投影信息
  • 源数据可以是点、线、面,但叠加数据只能是面。

4. 矢量分析——临近分析(泰森多边形)
泰森多边形是基于点、线、面对象根据指定的距离,在点、线、面集合对象周围建立一定宽度的区域的分析方法
在这里插入图片描述
5. 矢量分析——动态分段
动态分段技术是在地图上动态显示线性参考要素的过程,是线性参考技术的应用。它在不改变要素原有空间数据结构的条件下,建立线性要素上任意路段与多重属性信息之间关联关系。
应用: 广泛应用于公路、铁路、河流等线性特征的数据采集、公共交通系统管理、路面质量管理一级通讯和分配网络(如电网、电话线路、电视电缆、给排水管)模拟等领域
在这里插入图片描述
** 6. 栅格分析——表面分析**
在这里插入图片描述

7. 栅格分析——插值分析

插值分析利用已知的样点去预测或者估计未知样点的数值,包括内插和外推两种插值方式。内插是通过一直点的数据推求统一区域未知点的数据。外推是通过已知区域,推求其他区域的数据。
8. 栅格分析——密度分析

  • 简单密度分析
    • 计算每个点的指定领域形状内的每单位面积值
  • 核密度分析
    • 使用核函数计算点或线邻域范围内的每单位面积量值。

应用: 计算人口密度、建筑密度、获取犯罪情况报告、旅游区人口密度检测、连锁店经营情况分析。

8.2 空间分析服务及开发API

1. 空间分析服务发布

iserver中快速发布——工作空间——选择空间分析服务
详细操作过程略

2. 各类空间分析功能API

服务类: SpatialAnalystService

  • 缓冲区分析: bufferAnalysis
  • 叠加分析: overlayAnalysis
  • 插值分析:interpolationAnalysis
  • 泰森多边形分析:thiessenAnalysis
  • 表面分析: surfaceAnalysis
  • 点密度分析: densityAnalysis
  • 动态分段分析: generaterSpatialData

8.3 空间分析案例实现

实现功能:

  • 利用缓冲区分析获取道路扩建范围
  • 利用sql查询实现道路高亮显示
  • 利用离散点实现插值分析

9、 网络分析技术与开发实践

9.1 网络分析概述

网络分析是在网络模型的基础上通过分析解决实际问题的过程

  • 最佳路径分析
  • 最近设施查找
  • 选址分析
  • 旅行商分析
  • 多旅行商分析(物流配送)
  • 服务区分析

1. 基本概念

  • 网络数据集
    • 可以通过iDesktopX制作> 拓扑构建网络数据集;
    • 网络数据集包括弧段和节点
  • 权值(正、逆)
    • 通过某一弧段时的耗时(时间耗费、距离耗费等);
    • 弧段本身是有方向的,因此权值分为正向权值和逆向权值。通常用一个属性字段表达每个弧段的正(逆)权值。
  • 障碍弧段、节点
    • 表示不通过的弧段或者节点
    • 短暂性的障碍。比如 临时施工道路,可以通过设置障碍弧段的方法避让,如果弧段或者节点长期不通达,可以直接通过转向表表达。
  • 转向表数据集
    • 转向是从一个弧段经过中间节点抵达另一个邻接弧段的过程。
    • 转向表用来存储转弯耗费值。一般有起始弧段字段(FromEdgeID), 终止弧段字段(ToEdgeID),节点标识字段(NodeID)和转弯耗费字段(TurnCost)四个字段。
    • 转弯耗费有方向性,负耗费一般为禁止转向。

2. 主要接口

NetworkAnalystService

  • 最佳路径分析: findPath
  • 最近设施查找: findClosesFacilities
  • 选址分析: findLocation
  • 旅行商分析: findTSPPaths
  • 多旅行商分析:findMTSPPaths
  • 服务区分析:findServiceAreas

9.2 网络分析服务介绍

发布时选择 网络分析服务,网络分析服务配置可以自动读取到,也可以手动选择。
可以在服务提供者进行进一步配置。在高级设置中设置交通规则、转向表数据集、障碍等。

注意: TransportationAnalystParameter障碍弧段和障碍点的设置优先于iServer交通网络分析服务提供者的相应参数值。

9.3 网络分析功能实现

需求:基于Chengdu数据源中的网络模型数据network模拟生鲜物流配送,在地图上任意添加目标点,查询目标迪安周边三公里范围内最近的生鲜零售门店,并在地图上高亮显示从门店到目标点的配送路线。

功能逻辑: 发布网络分析服务-》 查询获取设施集合 -》 设置待分析事件集合 -》 进行最近设施分析。

10、 地址匹配服务

地址匹配流程:导入地址词典(属性 转词典) -》 生成地址索引 -》 发布地址索引 -》 前端调用地址匹配服务进行做正向匹配和反向匹配

iDesktpX支持对地址词典的管理: 导入、导出、更新等

  • 支持创建地址ICi点库,可通过逐个添加词汇或导入文本文件进行创建
  • 支持对已有词典进行添加或删除等编辑操作
  • 支持导出地址词典库,或导出为文本文件

1. 地址索引文件结构

  • *.tim : 内容以汉字分块,每块存储不同关键字的信息
  • *.tip: 记录每个字信息在tim文件中的起始位置
  • *.fdt:原始每条记录的信息,点坐标、完整地址等
  • *.fdx: 记录每条记录在fdt文件的起始位置
  • *.dct: 地址词典文件

11、 数据可视化开发方法

11.1 数据聚合展示和热力图开发方法

1. 数据聚合展示

  • 聚合图:Leaflet.markerCluster
  • 蜂巢图: L.supermap.MapVLayer

基于Leaflet.markerCluster展示数据

实现思路: 引入聚合图插件 -》 创建聚合图层,添加到地图中 -》 向聚合图层添加数据

基于L.supermap.MapvLayer展示数据

实现思路: 引入MapV -》 构建蜂巢数据数组 -》 设置蜂巢风格 -》 创建蜂巢图层,并添加到地图中

2. 热力图展示

  • Leaflet.heatLayer
  • L.supermap.HeatMapLayer
  • Echarts + L.supermap.EchartsLayer

基于 Leaflet.heatLayer制作热力图

实现思路: 引入热力图插件 -》 构建heatPoint数组 -》 创建热力图层添加到地图中

基于L.sueprmap.HeatMapLayer制作热力图

实现思路: 实例化HeatMapLayer -》 定义客户端要素专题图 -》 将热力图添加到地图中

基于Echarts + L.supermap.EchartsLayer制作热力图

需求: 基于csv格式的地震数据,以热力图形式展示2008 - 2017年的地震情况

11.2 高效展示海量标记开发方法

1. 海量标记展示性能问题
采用marker 标记海量点数据浏览器卡死

2. 高效点图层开发方法实现思路

设置渲染器类型 -》 定义要素类的样式 -》 构建 Graphic要素类 -》 创建高效图层,并添加到地图中 -》 设置图层交互事件

11.3 专题图展示开发方法

1. 专题图类型

  • 服务端专题图(支持大数据量;不能交互)
    • 点密度专题图
    • 等级符号专题图
    • 统计专题图
    • 分段专题图
    • 单值专题图
  • 客户端专题图(少量要素数据,支持交互)
    • 单值专题图
    • 等级符号专题图
    • 标签专题图
    • 图标专题图

2.客户端专题图

生成原理

  • 在客户端图层绘制专题要素 - 矢量要素;
  • 客户端专题图具备两个重要特征;
    • 专题要素可交互
    • 专题展示样式可自定义扩展

开发思路: 创建客户端专题图图层 -》 获取/创建矢量要素 -》 设置 专题图显示风格 -》 加载要素到专题图层 -》 设置专题要素交互

主要接口:

  • 客户端胆汁专题图: UniiqueThemeLayer
  • 客户端专题图风格类: ThemeStyle
  • 设置客户端专题图的相关接口

3. 服务端专题图

主要接口: ThemeService专题图服务类 -》 ThemeParameter 专题图参数类

生成原理:

  • 设置专题图: 设置专题图参数、数据集名称 、风格等
  • 服务端处理, iServer服务端处理请求
  • 图片加载, 将图片添加到Layer上显示

11.4 第三方来源数据可视化

11.4.1 可视化数据来源解读

1. 数据可视化实现方式

  • 与数据分析服务对接并可视化结果数据
    • 桌面分析结果,web端可视化展示
    • iServer分布式空间分析作业分析结果可视化
      • 点密度分析、叠加分析、密度分析、和密度分析等
  • 直接与数据存储进行对接,利用iclient自身的分析运算渲染能力可视化数据
    • 从supermap数据引擎层获取数据——iServer查询服务
    • 直接与数据存储ES对接——search操作
    • 实时数据可视化。获取实时流——dataflow
      • kafaka、websocket、TCP/IP等

11.4.2 对接Elasticsearch实现数据可视化

  • 利用GIS软件,对接elasticsearch中的数据,实现数据 可视化效果
  • 实验将针对全球航班数据,展示各个时段飞行热力图

Elasticsearch数据分析
参数: _index 索引;_type 类型; _source 对象属性;

实现步骤: 启动elasticsearch数据库 -》 es跨域配置 -》 根据iclient API 编写查询代码 -》 将查询结果根据需求渲染在地图上

Elasticsearch配置跨域

# 修改 elasticsearch.yml 文件,添加如下内容
http.cors.enabled: true
http.cors.allow-origin: "*"
# 配置网络连接端口
network.host : IP

修改完成之后重启es数据库

12. 基于VUE的二维WebGIS项目详解

12.1 Vue 开发基础

12.2 使用Vue搭建项目的方法

推荐 ts(javascript)、vite、vue-router、axios、pinia 、 +element-plus

12.3 基于Vue的二维GIS功能实现

使用 Javascript Api 实现自定义功能
需求: 根据属性信息查找并定位队形
功能需求:

  • 设置查询语句输入框与查询按钮
  • 通过地图SQL查询获取复合查询条件的对象并显示到地图上

实现步骤: 1. 实现地图加载; 2. 制作查询面板 ; 3. 添加查询组件; 4. 实现对地图进行SQL查询

13. WebGIS性能优化

13.1 WebGIS性能优化综述

1. WebGIS服务请求过程
在这里插入图片描述

2. 优化策略

1.提升数据生产效率

  • 性能检查工具: 地图 -》 制图 -》 性能诊断

    • 定制性能指标
    • 定位问题图层
  • 数据重复

    • 数据重复主要是指空间数据或属性数据存在一定的重叠,推荐使用如下方法进行数据冗余的检查:
      • 使用拓扑检查中的无重复点、线线无重叠、面面无重叠等拓扑规则对数据集进行检查,或使用distinct方法检查数据集中坐标信息的唯一性
      • 使用过distinct方法检查属性中字段重复的情况,尽可能避免字段值相同但并非同一对象的情况,若发生此类情况推荐使用数据融合。
  • 数据复杂

    • 数据复杂主要包括两方面:节点过多、子对象过多。
    • 在节点过多问题上,线数据集可直接进行重采样,面数据及推荐先拓扑转线再对线进行重采样,再重新拓扑构面。
    • 在子对象过多的问题上,推荐对几何对象进行分解,在分解前需要排查图层中的对象,避免分解岛洞多边形。
  • 2.缓存技术提交效率

3. 数据优化方法

  • 空间索引
  • 字段索引
  • 数据抽稀
  • 数据集类型
  • 数据集编码
  • 影像金字塔

13.2 地图缓存优化策略

缓存技术是一种非常有效的提高服务访问效率的方式,用空间来换取事件的存储方式

  • 空间数据较为复杂
  • 地图或者地图的某个范围会被较为频繁访问
  • 返回客户端的地图结果相对固定
    1. 缓存策略
    缓存策略: HTTP缓存、请求缓存、地图缓存

2.HTTP缓存

  • HTTP缓存:请求结果保存在内存中
  • 缓存生命周期: 1分钟
  • 支付服务模块:rest地图服务,rest三维服务

3. 请求缓存

  • 覆盖全功能服务的请求缓存
  • 请求缓存结果存在客户端本地
  • 各服务支持请求缓存的资源

4. 地图缓存

  • 地图缓的分类
    • 栅格瓦片: 地图中所有图层切分并存储为栅格格式的地图瓦片
      • 目前使用最广,技术成熟的底图技术
    • 矢量瓦片: 矢量图层以矢量瓦片的形式进行切分和存储
      • 矢量瓦片创建效率高
      • 矢量瓦片传输和渲染速度快
        在这里插入图片描述
        5.常用的栅格瓦片
        在这里插入图片描述
        6. 栅格瓦片的生产
  • 瓦片地图缓存可以提升客户端地图呈现的显示效率,但是生成瓦片地图缓存也是一项耗费时间的工作
  • 地图的显示性能直接影响生产瓦片地图缓存的时间
    • 生产缓存前对GIS地图进行性能优化
  • 生产方法
    • iDesktop产品直接生成UGC缓存 或者mongodb瓦片
    • iServerr分布式切图生成UGCV5缓存或者 分布式存储缓存Mongodb

注意:使用iserver开启多进程切图之后,要重启iserver才能生效

7. iServer分布式切图常见问题
1) 分布式切图时候推送数据成功,但是切图速度为0
在 桌面重新以只读方式打开数据源,保存工作空间,重启iServer重新创建切图任务
2) 使用分布式切图服务时有的子节点不切图
检查子节点的地图数据,如果使用的是文件型数据源,需要保证子节点的地图数据与父节点的数据具有相同的路径。一般出现这种情况时加入了其他服务器的iServer,这个服务器时没有切图数据的,需要copy过来,正常情况主节点会自动部署。

8. MVT矢量瓦片
矢量瓦片(*.mvt),包含要素的几何形状与属性信息
样式文件(style.json), 要素的风格样式
在这里插入图片描述
9. 矢量瓦片典型应用
1) 预切图(多进程),适用于静态数据(非频繁更新)
2) 动态生成(iServer) , 适用于动态数据(频繁更新)
3) 实时切图(HBase), 适用于大数据

13.3 开发优化策略

1. 客户端开发提升效率策略
1) 呈现地图使用缓存
场景: 专题图变化、空间数据变化、图层控制、在线编辑
策略: 切换地图、自动化更新缓存、图层叠加
2) 合理设置返回信息
查询/分析结果分批传回:QueryBySQLParameters.expectCount、 startRecord
设置合理的查询结果类型: 设置查询结果分会类型,包括只返回属性、只返回几何实体以及返回属性和几何实体。

3) 海量数据的显示要充分利用客户端SDK优势进行呈现(减少服务端计算)

  • 矢量点代替marker
  • Turf.js —— 客户端空间分析
  • 热点图——高频事件客户端计算
  • 聚合图 —— 海量点数据聚散显示
  • 矢量瓦片——矢量数据的快速交互
  • 高性能矢量渲染图层
  • 第三方可视化库——Echarts、MapV等

2. 几种常见的可视化渲染
1) 热力图
动态栅格图的一种,亮色代表事件发生频率较高或者事务分布密度较大,暗色反之,能够明显的表现地图中事件发生频率或者事物分布密度。
2)格网图
在格网区域内显示地理数据的统计信息,并根据格网内数据呈现不同的渲染效果
特点:数据分层优化; 直观的区域展示; 清晰的区域划分对比
应用: 地域对比性的信息分析,比如人口密度; 区域性的数据统计对比
3)聚散显示
聚散显示是指将一定范围内的点要素聚合显示至一个点
优化客户端数据呈现效果

3. 矢量图——矢量数据的快速交互
矢量图是将地理数据以瓦片的分块方式发给浏览器的一种方式;
矢量化瓦片和栅格瓦片相似;
适用于矢量数据快速交互的需求

4.高性能可视化库
1) SuperMap GraphicLayer 100万 +, 可交互,可传递属性
2) EchartsLayer 1000万+,增量渲染,但不支持交互与传递属性

14. 系统发布及部署

14.1 Docker中部署SuperMap iServer

镜像地址:https://hub.docker.com/r/supermap/iserver/tags
熟悉docker即可,过程略

14.2 WebGIS 系统部署介绍及服务部署优化

1. 部署前准备工作

  • 安装iServer
  • 发布GIS服务
  • 修改应用系统中GIS服务的地址

2. 应用系统的部署

常见的Web服务器: Tomcat、apache、jboss、resin、weblogic
过程略

3. 部署优化至集群

iServer集群搭建

4. 部署优化之多实例

开启多实例
iServer服务管理 ——“集群” ——“单机多进程”,重启iserver,进程数根据cpu核数设置

5. 部署优化之nginx代理

应用: http转发为https;
负载均衡

15. 大数据开发详解

15.1 大数据分布式分析全流程详解

1 空间大数据存储

1) 资源汇聚
在这里插入图片描述
结构化数据

2. 空间大数据引擎

在这里插入图片描述

3. 空间大数据分析

在这里插入图片描述
在这里插入图片描述

4. 流数据分布式分析算子——地理围栏

功能介绍: 实时动态判断哪些目标落入围栏,支持计算进入、保持、退出等细化状态
输入数据类型: 点、地理围栏(面)
适用场景: 空管中心、运钞车、油罐车等目标实时监控和围栏边界

5. 上层平台能力,底层核心基础

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

15.2 流数据实时处理技术与应用实践

1. 物联网

在这里插入图片描述

2. 流数据服务应用行业

1) 具有物联网数据生产的行业

  • 传感器设备(环保、水文、气象、市政等行业)检控数据
  • 时间序列化、短时间、格式化更新
    2) 基于实时移动目标的动态监测
  • 基于位置的移动目标进行实时检测交通运输、军事、民航以及船舶等相关行业
  • 空间或者属性过滤、地理围栏
    3) 基于海量历史数据的分析挖掘
  • 接收物联网数据
  • 存储管理,深度挖掘分析
  • 客流量统计,车流量(智能红绿灯)

在这里插入图片描述
在这里插入图片描述

3. 流数据处理

  • 属性过滤
  • 空间过滤
  • 属性映射
  • 空间映射(地理状态标记器)

4. 流数据存储

iServer Datastore -> elasticsearch

5. 典型应用案例

1) 传感器实时监测—— 城市空气检测
主要业务:
空气质量实时监控;
环境指标统计;
污染物分析。
2)动态目标监控—— 船舶监控(动态目标、历史分析)
主要业务:
GPS实时监控;
地理围栏预警
轨迹重建、大数据聚合

5. 常见问题

1) 数据来源——UDP协议
Receiver层自定义扩展:
用户可以基于com.supermap.bdt.streaming.jar的类型开发自定义i类型,添加到流数据实时处理的运行模型中,用于扩展功能,定制功能的目的。
2) 流数据分析处理扩展——信令数据与基站信息融合
手机信令数据传递回来的信息只有手机号,基站对应区域及编码,须关联基站信息(地理位置等)在这里插入图片描述

16. SuperMap iServer扩展开发

16.1 GIS服务结构深度解析

1. Supermap iServer GIS服务的结构

在这里插入图片描述
服务接口: 基于某些标准或者基于某种通讯协议的服务接口
服务组件: 依赖注入方式调用服务提供者,不在程序中固定所调用的服务提供者; 封装成易于客户端应用的模块
服务提供者: GIS服务代理;将各种类型的GIS服务的GIS功能进行统一

2. 服务提供者
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
3. 服务组件
对不同服务提供者提供的服务能力进行组合并封装成 已于客户端应用的模块
类型:
- 地图服务组件
- 数据服务组件
- 空间分析服务组件
- 交通网络分析服务组件
- 三位服务组件
- 三维网络分析
- 空间建模服务组件
- 动态标绘服务组件
- 地址匹配服务组件
- 用户自定义服务组件

4. 服务接口
将服务组件按照不同服务规范发布成不同类型的网络服务,该层决定了所有支持发布的服务类型
类型:
- rest
- rest/jsr(空间分析、交通换乘分析、三维网络分析)
- wms
- wmts
- wfs
- wcs
- wps
- handler(对接使用iserver java 2008 开发的应用程序)
- 用户自定义服务接口
5. 服务提供者与服务组件的对应关系
服务提供者:服务组件 = N : 1
在这里插入图片描述
**6.服务组件和服务接口的关系 **
在这里插入图片描述

16.2 扩展开发概述及开发流程

1. SuperMap iServer 空间服务分类
分类两大类:
1) 通用空间服务(Generric Spatial Service , GSS),如地图服务、空间数据服务、空间分析服务、网络分析服务等,SuperMap iServer 默认提供了这类服务
2) 领域空间信息服务(Domain Spatial Service,DSS),用户根据行业特定的业务逻辑,自行构建出的与空间信息相关的服务。

2. SuperMap iServer 服务扩展

  1. 服务接口扩展
    构建新标准的服务接口或者对已有的服务接口扩展,如: 对JaxrsServletForJersey、RestServlet进行扩展,定制新的REST资源实现,可以很好的对接领域组件或者提供者的功能。
  2. 服务组件扩展
    扩展GIS功能需求,可以调用服务提供者功能进行扩展,从而封装或者组合更适用的功能
    还可以直接再服务组件层调用其他接口及服务,供服务接口层调用
  3. 服务提供者扩展
    可以扩宽SuperMap iServer java的GIS功能来源

3. SuperMap iServer 扩展配置文件
服务组件配置信息 + 服务提供者配置信息: supermap-iserver-*/webapps/iserver/WEB-INF/iserver-services.xml
服务接配置信息: supermap-iserver-*/webapps/iserver/WEB-INF/iserver-services-interfaces.xml

4. 扩展开发流程
1) 分析需求,确定业务构建层次是 Interface、Componet还是Provider层
2) 实现DSS组件

  • 领域空间信息服务SPI
    • SueperMap iServer为用户构建领域空间信息服务组件提供了一系列接口
  • SPI提供什么
    • 自动读取配置文件的上下文信息
      • 与上层组件间的调用关系
      • 自身组件需要获取的配置参数信息
    • 自动实现依赖注入的三层组件间动态调用
      在这里插入图片描述
      在这里插入图片描述

3)服务提供者层的扩展

在这里插入图片描述

// 服务提供者层的实现形式
public class SampleProvider implements ProviderContextAware{
	public void setProviderContext(ProviderContext context){
		SampleProviderSetting sampleProviderSetting = context.getConfig(SampleProviderSetting.class);
		//......
	}
}
  1. 服务组件层的扩展
    在这里插入图片描述
// 服务组件层的实现形式
@Component(providerTypes={MapProvider.class},optional=false,type="SampleType")
public class SampleComponent implements ComponentContextAware{
	// ......
	public void setComponentContext(ComponentContext context){
		SampleComponentConfig config = context.getConfig(SampleComponentConfig.class);
		List<MapProvider> mapproviders = context.getProviders(MapProvider.class);
	}
}
  1. 服务接口层的扩展
    在这里插入图片描述
// 服务接口层的实现形式
@Interface(componentTypes = { com.supermap.services.components.Map.class} , optional = false, multiple = false)
@Protocol(names = {"SampleInterface"})
public class SampleServlet extends HttpServlet implements InterfaceContextAware{
	public void setInterfaceContext(InterfaceContext context){
		//......
		SampleInterfaceConfig sampleConfig = context.getConfig(SampleInterfaceConfig.class);
		List components = context.getComponents(Map.class);
	}
}

16.3 扩展开发案例实现

1. 需求: 实现一个新的组件,一个新的服务接口

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebGIS工程师进阶训练营 的相关文章

  • 如何在同一页面上使用AJAX处理多个表单

    我有一个表单 当我单击 提交 时 它就被提交了 然后该表单隐藏 操作页面的结果显示在 div 中 classname dig 它工作正常 但是当我添加另一个表单时 它停止正常工作并且所有表单同时提交 我如何更改我的代码 done click
  • 如何防止 Iframe 在与浏览器交互后弄乱浏览器的历史记录?

    因此 就我而言 我使用 Iframe 将 Grafana 附加到我的页面 这为我提供了漂亮且易于使用的图表 可以注意到 每次在图表上进行放大或缩小 使用鼠标单击 交互后 Grafana 的 Iframe 都会在我的 Angular 页面上触
  • Google App Engine:修改云运行环境

    我正在尝试部署一个使用自定义 Node js 服务器的 Next js 应用程序 我想将自定义构建变量注入应用程序 next config js const NODE ENV process env NODE ENV const envTy
  • 如何监听 jQuery AJAX 请求?

    以下两种实现 ajaxRequest 1 2 的方法应该是等效的 话说回来 为什么验证回调已执行的单元测试 3 在 1 中成功而在 2 中失败 我应该如何重写测试 3 来监视 2 中的成功回调 如果我尝试stub jQuery ajax使用
  • 可以使用 jQuery 或 Javascript 将图片的特定部分用作链接吗?

    我有这个想法 将图片 而不是文本 的各个部分链接到不同的页面或网站 并且我想在不实际创建不同的照片并将它们彼此靠近的情况下完成 这样看起来就像是一张完整的图片 这里有人知道如何使用 JavaScript 的变体 例如 jQuery 或纯 J
  • Vue:通过 CSS 选择组件的最简洁方法是什么?

    我有一个bar成分 它的使用方式如下
  • 除了更改标题之外,如何在 Firefox 中强制另存为对话框?

    有没有办法在 ff 中强制打开 www example com example pdf 的另存为对话框 我无法更改标题 如果您可以将文件以 Base64 格式输出到客户端 则可以使用 data uri 进行下载 location href
  • JavaScript 重定向到新窗口

    我有以下代码 它根据下拉列表的值重定向到页面 我如何使其在新窗口中打开 function goto form var index form select selectedIndex if form select options index
  • 在javascript中解析json - 长数字被四舍五入

    我需要解析一个包含长数字的 json 在 java servlet 中生成 问题是长数字被四舍五入 当执行这段代码时 var s x 6855337641038665531 var obj JSON parse s alert obj x
  • 将div设置为隐藏,延时后可见

    我试图在 X 时间后 也许甚至在随机时间之后 但现在我们只做固定时间 在黑色背景上出现一个黄色方块 function initialSetup if document getElementById yellow null document
  • 如何获取 vuejs 组件单元测试中定义的“this”变量

    我正在尝试在 npm 脚本中使用 mocha webpack 来测试 vuejs 组件 我在测试中像这样嘲笑 vuex 商店 const vm new Vue template div div
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • Grails 在 javascript 内的 GSP 站点中使用 grails var

    我有一个在 GSP 文件中的 javascript 代码中使用 grails 变量值的问题 例如 我有一个会话值session getAttribute selectedValue 我想在 javascript 代码部分使用这个值 我现在的
  • 如何在类似控制台的环境中运行 JavaScript?

    我正在尝试遵循这里的示例 http eloquentjavascript net chapter2 html http eloquentjavascript net chapter2 html and print blah 在浏览器中运行时
  • 在 vue.js 中访问数组对象属性

    给定以下数组vue js packageMaps Object packageMap 0 Object Id 16 PackageType flag list ProductCode F BannerBase packageMap 1 Ob
  • Javascript 纪元时间(以天为单位)

    我需要以天为单位的纪元时间 迄今为止 我已经看到过有关如何翻译它的帖子 但几天后就没有了 我对纪元时间很不好 我怎么能得到这个 我需要以天为单位的纪元时间 我将解释为您想要自纪元以来的天数 纪元本身是第 0 天 或第 1 天的开始 无论您如
  • 简单的 Vue.js 计算属性说明

    我对 Vue js 并不陌生 但我会再次浏览文档 试图找出我第一次错过的任何内容 我在以下地方看到了这个声明使用计算属性的基本示例部分 https v2 vuejs org v2 guide computed html Basic Exam
  • JQuery 图像上传不适用于未来的活动

    我希望我的用户可以通过帖子上传图像 因此 每个回复表单都有一个上传表单 用户可以通过单击上传按钮上传图像 然后单击提交来提交帖子 现在我的上传表单可以上传第一个回复的图像 但第二个回复的上传不起作用 我的提交过程 Ajax 在 php 提交
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 导致回发到与弹出窗口不同的页面

    我有一个主页和一个详细信息页面 详细信息页面是从主页调用的 JavaScript 弹出窗口 当单击详细信息页面上的 保存 按钮时 我希望主页 刷新 是否有一种方法可以调用主页的回发 同时还可以从详细信息页面维护保存回发 Edit 使用win

随机推荐

  • spring工程的单元测试用例加载配置方法

    spring开发时可以使用基于java注解的配置 也可以使用基于xml配置文件的配置方法 大多数情况下在开发过程中需要编写单元测试用例针对不同的模块进行独立测试用于验证独立的功能 本文介绍在基于不同的配置项目中单元测试加载配置的方法 1 基
  • springboot 使用 logback 进行日志记录、并对文件日志以日期和大小进行拆分的 demo 示例

    1 描述 一个springboot项目使用 logback 记录程序运行过程中的日志 配置 logback 生成控制台日志和文件日志记录 以及对文件日志以日期和大小进行拆分的 demo示例 环境 IDE idea 2021 3 JDK 1
  • 电源纹波的测量

    测试手法 A 使用纹波探头 DC 50ohm 用弹簧地连接到地上 然后将探头点到测试电源上 示波器打开20MHz的带宽限制 打开余晖模式 将测试通道的输出电压值移到示波器屏幕中间 让让示波器采样1 3分钟 最后看示波器上的峰峰值即可 B 使
  • CCSpriteFrameCache的用法

    转自 https www cnblogs com pengyingh articles 2436648 html 让我们首先创建一个工程骨架 使用cocos2d工程模板创建一个新的项目并取名为AnimBear 接下来 下载一些由我的老婆制作
  • qt day 5

    1 gt 实现闹钟功能 pro QT core gui texttospeech greaterThan QT MAJOR VERSION 4 QT widgets CONFIG c 11 The following define make
  • C# USB通讯

    关注 星标公众号 及时获取更多技术分享 作者 冰茶奥利奥 微信公众号 嵌入式电子创客街 项目工程文件下载 工程文件下载地址 看了很多网上的博客 讲述如何用C 进行USB设备操作 很多都是不对的 以至于南辕北辙 我们可以使用usb库 在c下有
  • 打开方式中无法添加程序,无法用指定程序打开

    用T32打开 ts2文件时 右击 打开方式 中 浏览 到t32start exe的安装目录 点击 确定 可是在 打开方式 中找不到t32start exe程序 可能是因为注册表中t32start exe程序的路径指定错误 原因 解压安装包
  • 通过自定义 Vue 指令实现前端曝光埋点

    前言 互联网发展至今 数据的重要性已经不言而喻 尤其是在电商公司 数据的统计分析尤为重要 通过数据分析可以提升用户的购买体验 方便运营和产品调整销售策略等等 埋点就是网站分析的一种常用的数据采集方法 埋点按照获取数据的方式一般可以分为以下
  • flink学习day05:checkpoint 原理与实践

    flink checkpoint checkpointe是什么 基于state出发 flink基于与state可以做非常多复杂的事情 但是state是存储在内存中 内存中的数据是不安全的易丢失的 所以flink为了解决这个问题就引入了che
  • 牛客网C语言编程初学者入门训练135题

    文章目录 1 实践出真知 2 我是大V 3 有容乃大 4 小飞机 5 反向输出四位数 6 大小写转换 7 缩短二进制 8 十六进制转十进制 9 printf的返回值 10 成绩输入输出 11 学生基本信息输入输出 12 字符金字塔 13 判
  • 线稿图视频制作--从此短视频平台不缺上传视频了

    博客首页 knighthood2001 欢迎点赞 评论 热爱python 期待与大家一同进步成长 给大家推荐一款很火爆的刷题 面试求职网站 跟我一起来巩固基础 开启刷题之旅吧 这年头还不来尝试线稿图视频 之前笔者也写过将视频转换为线稿图视频
  • 基于Docker的mysql主从复制

    目录 一 拉取mysql 二 启动两个mysql容器 2 1 主master 2 2 从slave 三 配置master 3 1 进入master内部配置 3 2 安装vim命令 3 3 重启mysql 3 4 创建数据同步用户 可不建 直
  • Linux重启nfs出现没有权限,Linux NFS搭建与错误提示解决

    Linux NFS搭建与错误提示解决 服务端设置 root server cat etc redhat release 查看操作系统版本信息 CentOS release 5 5 Final root server uname r 查看当前
  • 常见的错误-04

    引言 在公司配置新电脑环境时候 在安装和配置完所有VSCode软件以及C 环境后 ubuntun环境下 尝试使用debug进行代码调试 遇到了在debug过程中不输出结果的bug 如下图 未输出array以及zheli 解决方法 在ubun
  • vue3+ts中对getCurrentInstance的使用

    1 在main js中挂载一个全局属性 拿axios举例 import App from App vue import axios from http 封装的axios方法 const app createApp App 创建应用 app
  • 【100%通过率 】【华为OD机试 c++/java/python】对称字符串【 2023 Q1 A卷

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 对称美学 对称就是最大的美学 现有一道关于对称字符串的美学 已知 第 1 个字符串 R 第 2 个字符串 BR 第 3 个字符串 RBBR 第
  • resetlog

    来自于itpub的一篇文章 http space itpub net 16628454 很多人说 resetlogs就是不完全恢复 这是不对的 做不完全恢复必须使用resetlogs 但resetlogs也可以做完全恢复 而noresetl
  • # 第四届蓝桥杯JavaB组省赛-马虎的算式

    第四届蓝桥杯JavaB组省赛 马虎的算式 题目描述 小明是个急性子 上小学的时候经常把老师写在黑板上的题目抄错了 有一次 老师出的题目是 36 x 495 他却给抄成了 396 x 45 但结果却很戏剧性 他的答案竟然是对的 因为 36 4
  • 解决idea文件properties中文乱码问题

    有时候将项目代码拉取至本地用idea打开时会出现中文乱码问题 遇到这种问题不要慌 重新设置一下编码为UTF 8即可 那么如何将idea的编码统一设置为UTF 8格式呢 接下来我们一一解决此类问题 1 打开idea编译器 有时候会看到打开的文
  • WebGIS工程师进阶训练营

    WebGIS工程师进阶训练营 1 WebGIS课程综述 2 多类情景部署SuperMap iServer 2 1 Linux环境部署SuperMap iServer 2 2 war包部署 2 3 常见问题排查 3 SuperMap iSer