一、es6封装点
/* es6封装添加点 */
const POINT_STYLE = {
Angle: 0,
Color: 2, //子图的颜色
Space: 0,
SymHeight: 5, //点的高度
SymID: 31,
SymWidth: 5 //点的宽度
}
const HOST = 'localhost';
const PORT = 6163;
/**
* @param {object} service {name,layerId,host,port}
*/
class Point {
static add({position,attr,layer,service}) {
/* 2.1构建几何信息 */
/* 创建一个点形状,描述点形状的几何信息 */
var gpoint = new Zondy.Object.GPoint(position[0], position[1])
/* 设置当前点要素的几何信息 */
var fGeom = new Zondy.Object.FeatureGeometry({
PntGeom: [gpoint]
})
/* 2.2 设置样式信息 */
var pointInfo = new Zondy.Object.CPointInfo(POINT_STYLE)
/* 设置当点要素的图形参数信息 */
var webGraphicInfo = new Zondy.Object.WebGraphicsInfo({
InfoType: 1, //点
PntInfo: pointInfo
})
/* 2.3 设置属性信息 */
/* 设置添加点要素的属性信息 */
var attValue = attr.map(item => item.value)
/* 2.4 构建要素对象 */
var feature = new Zondy.Object.Feature({
fGeom: fGeom, //坐标--几何信息
GraphicInfo: webGraphicInfo, //样式信息
AttValue: attValue //属性
})
/* 设置要素为点要素
点 -->1
线 -->2
面 -->3
*/
feature.setFType(1)
/* 2.5 设置要素集 */
//创建一个要素数据集
var featureSet = new Zondy.Object.FeatureSet()
/* 设置属性结构 */
var cAttStruct = new Zondy.Object.CAttStruct({
FldName: attr.map(item => item.name), //属性的字段名
FldNumber: attr.length, //属性的个数
FldType: attr.map(item => item.type) //属性的类型
})
featureSet.AttStruct = cAttStruct
/* 添加要素到要素数据集 */
featureSet.addFeature(feature)
/* 2.6 调用编辑服务接口 */
/*
创建一个编辑服务类
第一个参数:服务的名称 第二参数:图层的名称
*/
var editService = new Zondy.Service.EditDocFeature(service.name, service.layerId, {
ip: service.host || HOST,
port: service.port || PORT //访问IGServer的端口号, .net为6163,Java为8089
})
//执行添加点要素功能
editService.add(featureSet, this.onPntSuccess(layer))
}
static onPntSuccess(layer){
return function (data){
if (data.succeed) {
alert("添加成功!")
layer.refresh() //重新加载地图文档
} else {
alert("添加失败")
}
}
}
}
二、使用
<body>
<button onclick="Draw()">添加画笔</button>
<button onclick="exit()">移除画笔</button>
<div id="map_container">
</div>
<script>
var docLayer = new Zondy.Map.Doc('',"city_area",{
ip:"localhost",
port:6163
})
var map = new ol.Map({
target: "map_container",
layers: [gaodeMapLayer,docLayer],
view: new ol.View({
projection: 'EPSG:4326',
center: [114.30, 30.50],
zoom: 4
})
})
/* 1、创建画布 */
var source = new ol.source.Vector({
wrapX: false
});
var layer = new ol.layer.Vector({
source
})
map.addLayer(layer);
/* 2、添加画笔 */
let draw = null;
function Draw() {
draw = createDraw({
type: "Point",
source,
callback: handleDraw
});
map.addInteraction(draw);
}
function exit() {
map.removeInteraction(draw);
draw = null;
}
function handleDraw(e) {
var position = e.feature.getGeometry().getCoordinates();
console.log(position)
var attr = [{
name: "name",
value: "武汉",
type: "string"
}];
var service = {
name: "city_area",
layerId: 2
}
Point.add({
position,
layer: docLayer,
attr,
service
})
}
</script>