基于Arcgis for Js的web GIS数据在线采集简介
2015-03-16 20:53
477 查看
在前一篇博文“Arcgis for js之WKT和geometry转换”中实现了wkt和geometry之间的相互转化,博文原文地址为:http://blog.csdn.net/gisshixisheng/article/details/44057453。在本节,接上文,简单讲述基于Arcgis for Js的web GIS数据在线采集。
实现数据的在线采集,最主要的是数据的存储,即将采集到的数据的geometry对象保存下来,并后续可以转换为shp数据。在本文,我的处理方式为将前段绘制的geometry对象转换为wkt形式存储在数据库中,在oracle数据库中,用clob存储wkt即可。
其次,数据在线采集还需满足一下需求:
1、对象绘制;
2、对象的编辑;
3、对象的删除;
4、对象的展示。
下面,看看首先后的效果:
主窗口
选择编辑
绘制完成后提示
点集对象开始编辑
单击地图提示编辑信息
删除提示
删除后的结果
至此,数据的在线采集基本完成,接下来说说实现步骤吧。
1、对象的绘制
对象的绘制是通过Edit来实现的,如下:
2、对象的编辑
对象的编辑是通过Edit实现的,如下:
3、对象的删除
最后,就是将绘制的geometry传给后台,主要有两个地方,一个是绘制完成之后,代码中体现在draw的draw-end事件中,一个是在编辑完成之后,代码中体现在edit的deactivate事件中。
实现数据的在线采集,最主要的是数据的存储,即将采集到的数据的geometry对象保存下来,并后续可以转换为shp数据。在本文,我的处理方式为将前段绘制的geometry对象转换为wkt形式存储在数据库中,在oracle数据库中,用clob存储wkt即可。
其次,数据在线采集还需满足一下需求:
1、对象绘制;
2、对象的编辑;
3、对象的删除;
4、对象的展示。
下面,看看首先后的效果:
主窗口
选择编辑
绘制完成后提示
点集对象开始编辑
单击地图提示编辑信息
删除提示
删除后的结果
至此,数据的在线采集基本完成,接下来说说实现步骤吧。
1、对象的绘制
对象的绘制是通过Edit来实现的,如下:
var edit = new Edit(map); var select; edit.on("deactivate",function(evt){ var geom = evt.graphic.geometry; var wkt = null; switch(geom.type){ case "polyline":{ wkt = LineToWKT(geom); break; } case "polygon":{ wkt = PolygonToWKT(geom); break; } default :{ wkt = PointToWKT(geom); break; } } if(confirm('是否编辑?')){ console.log("编辑:"+wkt); } }); map.on("click", function(evt){ edit.deactivate(); });
editItem = function(td){ var tr = td.parentElement; var objType = tr.id; var id = tr.cells[0].innerHTML; var title = tr.cells[1].innerHTML; $("#itemTitle").html("").html(title); $("#itemType").val("point"); $("#itemObjtype").val(objType) $("#editWindow").show(); var draw = new Draw(map); draw.on("draw-end", function(evt){ map.setMapCursor("default"); var symbol = null,wkt; switch(evt.geometry.type){ case "polyline":{ symbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255,0,0]), 3); wkt = LineToWKT(evt.geometry); break; } case "polygon":{ symbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255,0,0]), 2), new Color([200,200,200,0.5])); wkt = PolygonToWKT(evt.geometry); break; } default :{ symbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_SQUARE, 10, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255,0,0]), 1), new Color([0,255,0,0.25])); wkt = PointToWKT(evt.geometry); break; } } var graphic = new Graphic(evt.geometry, symbol,{id:$("#itemObjtype").val(),name:$("#itemTitle").html()}); editLayer.add(graphic); draw.deactivate(); if(confirm('是否绘制?')){ console.log("新建:"+wkt); } }); on(dom.byId("editBtn"), "click",function(){ var objType = $("#itemType").val(); switch(objType){ case "polyline":{ draw.activate(esri.toolbars.Draw.POLYLINE); break; } case "polygon":{ draw.activate(esri.toolbars.Draw.POLYGON); break; } default :{ draw.activate(esri.toolbars.Draw.POINT); break; } } map.setMapCursor("corsshair"); $("#editWindow").hide(); }); }
2、对象的编辑
对象的编辑是通过Edit实现的,如下:
var edit = new Edit(map); var select; edit.on("deactivate",function(evt){ var geom = evt.graphic.geometry; var wkt = null; switch(geom.type){ case "polyline":{ wkt = LineToWKT(geom); break; } case "polygon":{ wkt = PolygonToWKT(geom); break; } default :{ wkt = PointToWKT(geom); break; } } if(confirm('是否编辑?')){ console.log("编辑:"+wkt); } }); map.on("click", function(evt){ edit.deactivate(); });
editLayer.on("click", function(evt) {
event.stop(evt);
activateToolbar(evt.graphic);
});
function activateToolbar(graphic) {
var tool = 15;
var options = {allowAddVertices: "true", allowDeleteVertices: "true", uniformScaling: "true"};
edit.activate(tool, graphic, options);
select = graphic;
}
3、对象的删除
delItem = function(td){ if(confirm('是否删除?')){ var id = tr.cells[0].innerHTML; var graphics = editLayer.graphics; for(var i= 0, dl=graphics.length; i<dl; i++){ var graphic = graphics[i]; if(graphic.attributes.id===id){ editLayer.remove(graphic); break; } } } }
最后,就是将绘制的geometry传给后台,主要有两个地方,一个是绘制完成之后,代码中体现在draw的draw-end事件中,一个是在编辑完成之后,代码中体现在edit的deactivate事件中。
相关文章推荐
- 基于Arcgis for Js的web GIS数据在线采集简介
- (转) 基于Arcgis for Js的web GIS数据在线采集简介
- Collector for ArcGIS,快捷的外业数据采集
- Arcgis for JS之Cluster聚类分析的实现(基于区域范围的)
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-(GIS)地理信息系统简介
- 基于ArcGIS JS API的在线专题地图实现
- 基于mina实现一个简单数据采集中间件的多客户端在线测试程序
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-(GIS)地理信息系统简介
- ArcGIS for JS 根据数据动态获取视点并居中
- ArcGIS API for JS v4.6 调用Esri在线地图和图层例子(2D和3D)
- ArcGIS API for JS 加载GeoJSON数据
- 通过ArcGIS for JS修改地理数据操作技术流程
- Arcgis for JS之Cluster聚类分析的实现(基于区域范围的)
- js api for Arcgis 在线编辑注意事项
- 网络数据采集分析工具TcpDump的简介
- 基于ARM的图像采集和数据传输系统
- 基于MATLAB的实时数据采集与分析研究
- 基于usb的数据采集系统设计 学习笔记一
- 基于网络数据采集系统的社交媒体/网络营销
- ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)