一、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>