1. 引言

MapGIS IGServer 是中地数码的一款跨平台GIS 服务器产品,提供了空间数据管理、分析、可视化及共享服务

MapGIS IGServer的下载(试用)地址:MapGIS IGServer Java for Windows (smaryun.com)

MapGIS IGServer 的 JavaScript API 文档:[IGS JavaScript API (smaryun.com)](http://develop.smaryun.com:81/API/JS/IGS JavaScript API v02/index.htm)

MapGIS IGServe与OpenLayers的集成示例:OpenLayers5示例 (smaryun.com)

官方示例的说明很详细,本文结合官方示例与API文档,基于OpenLayers和IGServer实现Web地图要素的增删改查

2. 环境搭建

笔者这里使用的是Java版的IGServer,版本号为10.6,详细的安装、试用步骤参考官网:

笔者这里使用的OpenLayers是MapGIS集成的MapGIS Client for JavaScript中的OpenLayers部分,其调用方式参考:

笔者这里直接使用CDN引入:

<script src="http://develop.smaryun.com/static/libs/include-openlayers-local.js"></script>

另外,还需要IGServer发布一个要素地图服务,用以进行要素的增删改查,笔者这里使用MapGIS Desktop新建一个点要素,另存为MapGIS地图文档,使用IGServer发布MapGIS地图文档

3. 地图加载

构建基础的HTML页面,使用OpenLayers加载底图,并使用中地数码的扩展包加载文档地图(DocLayer)

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="http://develop.smaryun.com/static/libs/include-openlayers-local.js"></script>
<style>
html,
body,
#map {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}
</style>
</head> <body>
<div id="map"></div> <script>
var map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
name: "高德底图",
source: new ol.source.XYZ({
url: 'http://wprd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}'
})
})
],
view: new ol.View({
center: [120.9, 28.9],
zoom: 4,
projection: 'EPSG:4326'
})
}) var docLayer = new Zondy.Map.Doc('', 'city', {
ip: `127.0.0.1`,
port: `8089`, //访问IGServer的端口号,.net版为6163,Java版为8089
})
map.addLayer(docLayer)
</script>
</body> </html>

加载的地图如下:

提示:

  • include-openlayers-local.js这个文件实质就是动态写入要加载的JS库,从下图中可以看出这个文件动态引入了哪些文件
  • 由于动态写入资源链接,不一定能加载出来,所以控制台会有warning

4. 增加要素

参考官方的参考示例:点要素编辑

增加一个点要素的流程为:

  • [创建要素]
  1. 创建一个点形状(Zondy.Object.GPoint对象),描述点形状的几何信息;
  2. 设置当前点要素的几何信息(Zondy.Object.FeatureGeometry对象);
  3. 描述点要素的符号参数信息(Zondy.Object.CPointInfo对象);
  4. 设置当前点要素的图形参数信息(Zondy.Object.WebGraphicsInfo对象);
  5. 设置添加点要素的属性信息;
  6. 创建一个要素(Zondy.Object.Feature对象),并设置要素为点要素;
  7. 创建一个要素数据集(Zondy.Object.FeatureSet对象),设置属性结构(Zondy.Object.CAttStruct对象);
  • [添加要素]
  1. 通过调用featureSet对象的addFeature()方法将要素添加到要素数据集中;

  2. 创建一个编辑服务类(Zondy.Service.EditLayerFeature对象),调用编辑服务类的add方法执行添加要素功能

function addPoint() {
//创建一个点形状,描述点形状的几何信息
var gpoint = new Zondy.Object.GPoint(104.0627, 30.6607)
//设置当前点要素的几何信息
var fGeom = new Zondy.Object.FeatureGeometry({ PntGeom: [gpoint] })
//设置点要素的图形信息
var pointInfo = new Zondy.Object.CPointInfo({
Angle: 0,
Color: 5,
SymHeight: 4,
SymID: 31,
SymWidth: 4,
})
//设置当前点要素的图形参数信息
var webGraphicInfo = new Zondy.Object.WebGraphicsInfo({
InfoType: 1,
PntInfo: pointInfo,
})
//设置添加点要素的属性信息
var attValue = ['成都']
//创建一个要素
var feature = new Zondy.Object.Feature({
fGeom: fGeom,
GraphicInfo: webGraphicInfo,
AttValue: attValue,
})
//设置要素为点要素
feature.setFType(1)
//创建一个要素数据集
var featureSet = new Zondy.Object.FeatureSet()
featureSet.clear()
//设置属性结构
var cAttStruct = new Zondy.Object.CAttStruct({
FldName: ['name'],
FldNumber: 1,
FldType: ['string'],
})
featureSet.AttStruct = cAttStruct
//添加要素到要素数据集
featureSet.addFeature(feature)
//创建一个编辑服务类
var editService = new Zondy.Service.EditDocFeature('city', 0, {
ip: `127.0.0.1`,
port: `8089`, //访问IGServer的端口号,.net版为6163,Java版为8089
})
//执行添加点要素功能
editService.add(featureSet, onPntSuccess)
}
//添加点要素回调函数
function onPntSuccess(data) {
if (data.succeed) {
alert('添加点要素成功!')
//图层刷新方法
docLayer.refresh()
} else {
alert('添加点要素失败!')
}
}

5. 查询要素

参考官方的参考示例:固定点的查询

查询一个点要素的流程为:

  1. 初始化查询结构对象Zondy.Service.QueryFeatureStruct,设置查询结构包含几何信息;
  2. 创建一个用于查询的点形状Zondy.Object.PointForQuery,并设置它的搜索范围;
  3. 实例化查询参数对象Zondy.Service.QueryParameter,设置查询分页号pageIndex和要素数目recordNumber;
  4. 最后实例化地图文档查询服务对象Zondy.Service.QueryDocFeature,并调用QueryDocFeature对象的query方法,执行查询,然后调用Process方法将结果格式化输出
function queryByPoint() {
//创建一个用于查询的点形状
pointObj = new Zondy.Object.Point2D(114, 30)
//设置查询点的搜索半径
pointObj.nearDis = 0.001
//初始化查询结构对象,设置查询结构包含什么信息
var queryStruct = new Zondy.Service.QueryFeatureStruct()
//是否包含几何图形信息
queryStruct.IncludeGeometry = true
//是否包含属性信息
queryStruct.IncludeAttribute = true
//是否包含图形显示参数
queryStruct.IncludeWebGraphic = true
//指定查询规则
var rule = new Zondy.Service.QueryFeatureRule({
//是否将要素的可见性计算在内
EnableDisplayCondition: false,
//是否完全包含
MustInside: false,
//是否仅比较要素的外包矩形
CompareRectOnly: false,
//是否相交
Intersect: true,
})
//实例化查询参数对象
var queryParam = new Zondy.Service.QueryParameter({
geometry: pointObj,
resultFormat: 'json',
struct: queryStruct,
rule: rule,
//显示查询到的要素数量
cursorType: null,
}) //实例化地图文档查询服务对象
var queryService = new Zondy.Service.QueryDocFeature(
queryParam,
'city',
'0',
{
ip: `127.0.0.1`,
port: `8089`, //访问IGServer的端口号,.net版为6163,Java版为8089
}
)
//执行查询操作,querySuccess为查询回调函数
queryService.query(querySuccess, queryError)
} //查询失败回调
function queryError(e) {
console.log(e)
}
//查询成功回调
function querySuccess(result) {
console.log(result)
//初始化Zondy.Format.PolygonJSON类
var format = new Zondy.Format.PolygonJSON()
//将MapGIS要素JSON反序列化为ol.Feature类型数组
var features = format.read(result)
console.log(features)
}

7. 删除要素

参考官方的参考示例:点要素删除

删除一个点要素的流程为:

  1. 创建一个编辑服务类(Zondy.Service.EditLayerFeature对象);
  2. 调用编辑服务对象的deletes方法,设置要删除的要素的OID,执行删除要素功能
function deletePoint() {
var deleteService = new Zondy.Service.EditDocFeature('city', 0, {
ip: `127.0.0.1`,
port: `8089`, //访问IGServer的端口号,.net版为6163,Java版为8089
})
deleteService.deletes(document.getElementById('OID').value, onSuccess)
} //删除点要素回调函数
function onSuccess(result) {
if (result) {
alert('删除要素成功!')
docLayer.refresh()
} else {
alert('删除要素失败!')
}
}

8. 编辑要素

参考官方的参考示例:点要素更新

编辑一个点要素的流程为:

  1. 查询要素
  2. 新建要素,设置相同的OID
  3. 调用编辑服务对象的update方法更新要素
function updatePoint() {
//创建一个点形状,描述点形状的几何信息
var gpoint = new Zondy.Object.GPoint(0, 0)
var fGeom = new Zondy.Object.FeatureGeometry({ PntGeom: [gpoint] })
//设置添加点要素的图形参数信息
var pointInfo = new Zondy.Object.CPointInfo({
Angle: 0,
Color: 8,
Space: 0,
SymHeight: 20,
SymID: 197,
SymWidth: 20,
})
//设置当前点要素的图形参数信息
var webGraphicInfo = new Zondy.Object.WebGraphicsInfo({
InfoType: 1,
PntInfo: pointInfo,
})
//设置添加点要素的属性信息
var attValue = ['修改后']
//创建一个点要素
var newFeature = new Zondy.Object.Feature({
fGeom: fGeom,
GraphicInfo: webGraphicInfo,
AttValue: attValue,
})
//设置要素为点要素
newFeature.setFType(1)
//设置FID----被选中点的OID,可以在桌面端中查看
newFeature.setFID(document.getElementById('OID').value)
//创建一个点要素数据集
var featureSet = new Zondy.Object.FeatureSet()
//设置属性结构
var cAttStruct = new Zondy.Object.CAttStruct({
FldName: ['name'],
FldNumber: 1,
FldType: ['string'],
})
featureSet.AttStruct = cAttStruct
//添加要素到要素数据集
featureSet.addFeature(newFeature)
//创建一个编辑服务类
var editService = new Zondy.Service.EditDocFeature('city', 0, {
ip: `127.0.0.1`,
port: `8089`, //访问IGServer的端口号,.net版为6163,Java版为8089
})
editService.update(featureSet, onSuccess)
} //更新点要素回调函数
function onSuccess(result) {
if (result) {
alert('更新要素成功!')
docLayer.refresh()
} else {
alert('更新要素失败!')
}
}

9. 参考资料

[1]OpenLayers5示例 (smaryun.com)

[2]IGS JavaScript API (smaryun.com)

[3]MapGIS IGServer Java for Windows (smaryun.com)

基于IGServer的Web地图要素增删改查的更多相关文章

  1. 基于AT UI实现表格的增删改查遇到的坑

    基于AT UI实现表格的增删改查遇到的坑 坑一.表格数据加载的渲染报错 报错:Error in render: "TypeError: Cannot read property 'isChe ...

  2. Python Web实战:Python+Django+MySQL实现基于Web版的增删改查

    前言 本篇使用Python Web框架Django连接和操作MySQL数据库学生信息管理系统(SMS),主要包含对学生信息增删改查功能,旨在快速入门Python Web,少走弯路.效果演示在项目实战最 ...

  3. 基于SSM之Mybatis接口实现增删改查(CRUD)功能

    国庆已过,要安心的学习了. SSM框架以前做过基本的了解,相比于ssh它更为优秀. 现基于JAVA应用程序用Mybatis接口简单的实现CRUD功能: 基本结构: (PS:其实这个就是用的Mapper ...

  4. web sql 基本操作 - 增删改查

    不喜欢看md原文的 可以访问这个链接:http://note.youdao.com/noteshare?id=6a91e3dea7cdf5195bb0e851d9fcb5a5 # web sql 增删 ...

  5. Java web 简单的增删改查程序(超详细)

    就是简单的对数据进行增删改查.代码如下: 1.bean层:用来封装属性及其get set方法 toString方法,有参构造方法,无参构造方法等. public class Bean { privat ...

  6. java web数据库的增删改查详细

    本次课上实验是完成数据库的增删改查. 包括增加用户信息.删除用户信息.多条件查找用户信息.修改用户信息(主要是复选框单选框等的相关操作.) 下面下看一下各个界面的样子. 总页面:显示全部页面:增加页面 ...

  7. 基于Django框架对MongoDB实现增删改查

    在上一篇中,咱们已经实现了Scrapy框架爬取数据,并且存储到Mongodb数据库, 接下来呢,,,,,,,,,,,,, 咱们就要对这些数据进行操作. 目标:从Mongodb数据库取出数据,通过Dja ...

  8. MyBatis项目配置案例详解与Web下的增删改查实现[附项目源码]

    MyBatis项目案例 项目图示: 项目源码地址:https://github.com/JluTiger/mybatispro 1.项目功能 项目案例:后台管理系统用户数据维护平台 所有用户数据查询 ...

  9. Arcgis api for js实现服务端地图的增删改查

    < !DOCTYPE html > <html xmlns = "http://www.w3.org/1999/xhtml" > <head > ...

  10. 最简单的基于JSP标准标签库的增删改查

    创建数据库中的表:CREATE TABLE `websites` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` char(20) NOT NULL DE ...

随机推荐

  1. python3中的常见知识点2

    python3中的常见知识点2 列表与栈和队列 map()函数 python列表遍历的4种方式 参考链接 列表栈和队列 1.列表作为栈使用 栈:先进后出,First In Last Out 使用 ap ...

  2. 【Azure 云服务】为Azure云服务配置上自签名的SSL证书步骤

    问题描述 在使用Azure Cloud Service(云服务),默认的情况下都是使用的 HTTP 服务,通过 Visual Studio 2022 创建的默认 Cloud Service项目中,在S ...

  3. session取不到值

    今天鼓捣项目时出现了一个问题 项目重启后,设置session值后,第一次请求经过过滤器时 session取不到值,导致被拦截 经过半天的研究,终于...我请教了别人 把代码给了朋友,在朋友一段时间的琢 ...

  4. C#爬虫开发小结

    前言 2023年以来一直很忙,临近春节,各种琐事更多,但鸽了太久没写文章总是不舒坦,忙中偷闲来记录下最近用C#写爬虫的一些笔记. 爬虫一般都是用Python来写,生态丰富,动态语言开发速度快,调试也很 ...

  5. Flutter新版本2.X系列--01创建项目

    1.新建项目,打开Android studio,点击红圈部分 2.选择第一个 3.设置你的项目名称,flutter sdk位置,以及项目存储路径 4.设置包名,这个要唯一 5.好啦 ~ 作为一名前端开 ...

  6. 动力节点——day03

    接收键盘的输入:1.创建一个键盘扫描器对象 java.util.Scanner s=new Scanner(System.in); 2.接收用户输入s.nextInt(); 静态变量在类加载的时候就分 ...

  7. golang主协程等待子协程执行完毕

    无限等待 计时等待 channel通信 select 等待组

  8. 1月12日内容总结——文件和文件索引、链接、系统时间、克隆、定时任务、paramiko模块、公钥私钥、paramiko代码封装

    目录 一.文件相关信息 二.文件索引信息 三.链接信息 四.系统时间 五.机器克隆 六.定时任务 七.paramiko模块 八.公钥私钥 九.paramiko其他操作 十.代码封装 十一.面试题回忆 ...

  9. 9月21日内容总结——计算机基础知识、typora软件的安装与软件内的部分markdown语法

    今日内容总结 目录 今日内容总结 一.路径 1.绝对路径 2.相对路径 二.计算机的本质 三.计算机的五大组成部分 1.控制器 2.运算器 PS:CPU=控制器+运算器 3.存储设备 4.输入设备 5 ...

  10. 深度复盘-重启 etcd 引发的异常

    作者信息: 唐聪.王超凡,腾讯云原生产品中心技术专家,负责腾讯云大规模 TKE 集群和 etcd 控制面稳定性.性能和成本优化工作. 王子勇,腾讯云专家级工程师, 腾讯云计算产品技术服务专家团队负责人 ...