基于IGServer的Web地图要素增删改查
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>
- 这里使用CDN的是官方示例中的地址,上面网址:mapgis-webclient-javascript (smaryun.com)中的CDN地址似乎不可用
另外,还需要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>
- 关于中地数码扩展包的API的详细参数可以参考:[IGS JavaScript API (smaryun.com)](http://develop.smaryun.com:81/API/JS/IGS JavaScript API v02/index.htm#id_2)
加载的地图如下:
提示:
include-openlayers-local.js
这个文件实质就是动态写入要加载的JS库,从下图中可以看出这个文件动态引入了哪些文件- 由于动态写入资源链接,不一定能加载出来,所以控制台会有warning
4. 增加要素
参考官方的参考示例:点要素编辑
增加一个点要素的流程为:
- [创建要素]
- 创建一个点形状(Zondy.Object.GPoint对象),描述点形状的几何信息;
- 设置当前点要素的几何信息(Zondy.Object.FeatureGeometry对象);
- 描述点要素的符号参数信息(Zondy.Object.CPointInfo对象);
- 设置当前点要素的图形参数信息(Zondy.Object.WebGraphicsInfo对象);
- 设置添加点要素的属性信息;
- 创建一个要素(Zondy.Object.Feature对象),并设置要素为点要素;
- 创建一个要素数据集(Zondy.Object.FeatureSet对象),设置属性结构(Zondy.Object.CAttStruct对象);
- [添加要素]
通过调用featureSet对象的addFeature()方法将要素添加到要素数据集中;
创建一个编辑服务类(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. 查询要素
参考官方的参考示例:固定点的查询
查询一个点要素的流程为:
- 初始化查询结构对象Zondy.Service.QueryFeatureStruct,设置查询结构包含几何信息;
- 创建一个用于查询的点形状Zondy.Object.PointForQuery,并设置它的搜索范围;
- 实例化查询参数对象Zondy.Service.QueryParameter,设置查询分页号pageIndex和要素数目recordNumber;
- 最后实例化地图文档查询服务对象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. 删除要素
参考官方的参考示例:点要素删除
删除一个点要素的流程为:
- 创建一个编辑服务类(Zondy.Service.EditLayerFeature对象);
- 调用编辑服务对象的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. 编辑要素
参考官方的参考示例:点要素更新
编辑一个点要素的流程为:
- 查询要素
- 新建要素,设置相同的OID
- 调用编辑服务对象的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地图要素增删改查的更多相关文章
- 基于AT UI实现表格的增删改查遇到的坑
基于AT UI实现表格的增删改查遇到的坑 坑一.表格数据加载的渲染报错 报错:Error in render: "TypeError: Cannot read property 'isChe ...
- Python Web实战:Python+Django+MySQL实现基于Web版的增删改查
前言 本篇使用Python Web框架Django连接和操作MySQL数据库学生信息管理系统(SMS),主要包含对学生信息增删改查功能,旨在快速入门Python Web,少走弯路.效果演示在项目实战最 ...
- 基于SSM之Mybatis接口实现增删改查(CRUD)功能
国庆已过,要安心的学习了. SSM框架以前做过基本的了解,相比于ssh它更为优秀. 现基于JAVA应用程序用Mybatis接口简单的实现CRUD功能: 基本结构: (PS:其实这个就是用的Mapper ...
- web sql 基本操作 - 增删改查
不喜欢看md原文的 可以访问这个链接:http://note.youdao.com/noteshare?id=6a91e3dea7cdf5195bb0e851d9fcb5a5 # web sql 增删 ...
- Java web 简单的增删改查程序(超详细)
就是简单的对数据进行增删改查.代码如下: 1.bean层:用来封装属性及其get set方法 toString方法,有参构造方法,无参构造方法等. public class Bean { privat ...
- java web数据库的增删改查详细
本次课上实验是完成数据库的增删改查. 包括增加用户信息.删除用户信息.多条件查找用户信息.修改用户信息(主要是复选框单选框等的相关操作.) 下面下看一下各个界面的样子. 总页面:显示全部页面:增加页面 ...
- 基于Django框架对MongoDB实现增删改查
在上一篇中,咱们已经实现了Scrapy框架爬取数据,并且存储到Mongodb数据库, 接下来呢,,,,,,,,,,,,, 咱们就要对这些数据进行操作. 目标:从Mongodb数据库取出数据,通过Dja ...
- MyBatis项目配置案例详解与Web下的增删改查实现[附项目源码]
MyBatis项目案例 项目图示: 项目源码地址:https://github.com/JluTiger/mybatispro 1.项目功能 项目案例:后台管理系统用户数据维护平台 所有用户数据查询 ...
- Arcgis api for js实现服务端地图的增删改查
< !DOCTYPE html > <html xmlns = "http://www.w3.org/1999/xhtml" > <head > ...
- 最简单的基于JSP标准标签库的增删改查
创建数据库中的表:CREATE TABLE `websites` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` char(20) NOT NULL DE ...
随机推荐
- 介绍一款高性能分布式MQTT Broker(带web)
SMQTTX介绍 SMQTTX是基于SMQTT的一次重大技术升级,基于Java开发的分布式MQTT集群,是一款高性能,高吞吐量,并且可以完成二次开发的优秀的开源MQTT broker,主要采用技术栈: ...
- SpringBoot内置tomcat启动过程及原理
作者:李岩科 1 背景 SpringBoot 是一个框架,一种全新的编程规范,他的产生简化了框架的使用,同时也提供了很多便捷的功能,比如内置 tomcat 就是其中一项,他让我们省去了搭建 tomca ...
- Javascript | 模拟mvc实现点餐程序
MVC模式是一个比较成熟的开发模式.M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式.其中,View的定义比较清晰,就是用 ...
- Windows下jdk安装与卸载-超详细的图文教程
jdk安装 下载jdk 由于现在主流就是jdk1.8,所以这里就下载jdk1.8进行演示.官方下载地址:https://www.oracle.com/java/technologies/downloa ...
- 由char和byte的关系引申出去——总结一下java中的字符编码相关知识
由char和byte的关系引申出去--总结一下java中的字符编码相关知识 一.字符编码 手持两把锟斤拷,口中直呼烫烫烫 在文章伊始,先来复习一下计算机中关于编码的一些基础知识,着重理清以下几 ...
- MongoDB6.0的安装「2023年」
你好,我是悦创. 优质原文格式:https://bornforthis.cn/column/crawler/supplement/mongodb-install.html 点进去有惊喜. 吐槽,这篇博 ...
- DVWA系列1:搭建 DVWA 环境
DVWA系列1:搭建 DVWA 环境 DVWA 是一个合法的漏洞测试.学习环境,先引用一段官方的介绍: Damn Vulnerable Web Application (DVWA) is a PHP/ ...
- Ubuntu desktop 文件的书写格式
首先切换到存放 desktop 文件的目录下,编辑好就可以保存了 cd /usr/share/applications/ vim name.desktop [Desktop Entry] Name=显 ...
- py之循环,函数
循环 a=1 while a<10: print(a) a+=1 a=[123,1235,123124,1231] while a: a1=a.pop() print(a1) for a1 in ...
- JS控制台打印星星,总有你要的那一款~呐~给你小心心哦~~~❤
用JS语句,在控制台中打印星星,你要的是哪一款呢~来认领吧~ 1.左直角星星 效果: 代码: let readline=require("readline-sync"); cons ...