地图动态标绘--B/S应用(二)

2024-02-25 10:58
文章标签 动态 应用 地图 标绘

本文主要是介绍地图动态标绘--B/S应用(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:Sniper

动态标绘广泛应用于电力、通信和应急等多个行业和领域。它可以用形象生动的矢量符号描述各种业务对象,表示各种资源,还可以动态渲染业务进度和流程。

在地图动态标绘–B/S应用(一)这篇博客中我们介绍了在B/S应用中使用SuperMap iServer和SuperMap iClient实现关于动态标绘的数据发布、使用标绘控件和面板以及编辑标号等功能。那么今天我们介绍下标绘态势图保存、加载、上传以及下载的操作。

一、态势图的保存和加载

首先我们需要知道的是,再客户端绘制成功的态势图,可以保存在服务器中,也可以保存在本地。对服务器中态势图的相关操作就是态势图的保存和加载。

首先,我们可以在iServer的动态标绘服务中看到当前服务器保存的态势图,本地服务地址为:
http://iserverihost:8090/iserver/services/plot-jingyong/rest/plot/smlInfos
态势图列表

态势图文件在服务器中的物理存储路径为发布的plot文件同级目录下的SmlFile目录下,即:
服务器态势图本地文件

打开态势图文件可以看到,实际上态势图文件中存储的是json格式的标绘符号信息,如下:
这里写图片描述

加载态势图的时候,iClient会读取到态势图中的内容并绘制到地图上。需要注意的是,态势图文件本身不包含坐标信息,其中的坐标值是地图坐标系中的值。暂时不支持投影转换。

那么如何用iClient的代码来实现保存和载入态势图呢?
1、按照上一篇文章中描述的那样,添加标绘图层,添加标绘绘制控件和编辑控件,定义态势标绘总控类,获取获取态势数据管理接口,绘制标绘符号。这里只贴出来定义总控类和获取获取态势数据管理接口的代码,其余代码请参考地图动态标绘–B/S应用(一)。

//总控类
plotting = new SuperMap.Plotting(map, serverUrl);
//获取获取态势数据管理接口
sitManager = plotting.getSitDataManager();

2、保存态势图

sitManager.saveSmlFile();

这里非常简单,就是使用态势数据管理类,调用saveSmlFile方法。但需要注意的是,如果当前服务器中没有保存态势图,则会新建一个名为situationMap的态势图文件。如果服务器中已经有了situationMap,则覆盖。

3、另存态势图

sitManager.saveAsSmlFile("yourSituationMap");

将当前绘制的符号保存到一个名为yourSituationMap的态势图文件中,同样的道理,如果已经存在yourSituationMap,就会覆盖原文件。

4、加载态势图

        //加载态势图function loadSimulationMap() {function success() {var sitDataLayers = sitManager.getSitDataLayers();plottingEdits = [];drawGraphicObjects = [];for (var i = 0; i < sitDataLayers.length; i++) {plottingEdits.push(sitDataLayers[i].plottingEdit);drawGraphicObjects.push(sitDataLayers[i].drawGraphicObject);stylePanel.addEditLayer(sitDataLayers[i]);}plotPanel.setDrawFeature(drawGraphicObjects[0]);}function fail() {console.log("error");}var select = document.getElementById("SLT");for (var i = 0; i < select.children.length; i++) {if (select.children[i].selected) {//打开指定的已发布态势图文件到指定图层,未指定图层则加载到this.activeLayer。sitManager.openSmlFileOnServer(select.children[i].value, success, fail);}}}

这里是创建一个select标签,从标签中获取要加载的态势图名称,然后读取态势图文件,将其中的标绘符号渲染出来。

二、态势图的上传和下载

态势图的下载就是将当前服务器上的态势图文件保存到本地,同时也可以将本地的态势图文件上传到服务器。下载的态势图中的数据结构和服务器中存储的一样,上传的态势图保存在服务器中的相应位置。
下面我们来看一下怎么通过代码来实现上传和下载的操作:

1、下载

//服务地址
var serverUrl = "http://localhost:8090/iserver/services/plot-jingyong/rest/plot/";
//从服务器上获取指定的态势文件的下载地址
var result = sitManager.downloadSmlFileURL(downliadFileName);
//组织url
var downloadUrl = serverUrl + result;
//打开新页面下载
window.open(downloadUrl);

下载下来的态势图如图所示,是一个以态势图名称命名的没有后缀名的文件。
下载下来的态势图文件

用nodepad++打开该文件可以看到,其中的文件格式和服务器中保存的一样:
nodepad++打开

2、上传

        function fileFilter(){//上传文件var file = document.getElementById('smlFile');file.setAttribute("accept",".sml");}

这里使用fileupLoad.js来上传文件,fileupLoad.js可以在 iServer目录\iClient\forJavaScript\examples\js中获取。

       //上传态势图文件。function uploadSmlFile( ){function sucess(){getSMLInfos();}function fail(){console.log("todo something if faied");}//要上传到服务器的态势图文件的div的id。//成功回调函数//失败回掉函数sitManager.uploadSmlFile('smlFile', sucess, fail);}

上传后的态势图,就可以在iServer的服务页面中看到。

到这里关于态势标绘图的保存、加载、上传、下载的操作已经全部介绍完毕了。那么关于标绘符号的SQL查询、几何查询等功能,我们下一篇再讲~

这篇关于地图动态标绘--B/S应用(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/745253

相关文章

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

Python循环缓冲区的应用详解

《Python循环缓冲区的应用详解》循环缓冲区是一个线性缓冲区,逻辑上被视为一个循环的结构,本文主要为大家介绍了Python中循环缓冲区的相关应用,有兴趣的小伙伴可以了解一下... 目录什么是循环缓冲区循环缓冲区的结构python中的循环缓冲区实现运行循环缓冲区循环缓冲区的优势应用案例Python中的实现库