(转) 基于Arcgis for Js的web GIS数据在线采集简介
http://blog.csdn.net/gisshixisheng/article/details/44310765
在前一篇博文“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来实现的,如下:
- 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数据在线采集简介的更多相关文章
- 2013Esri全球用户大会之解读Web GIS
1 什么是Web GIS,它跟我有什么关系? Web GIS是传递GIS功能的一种新方式,在Esri把GIS作为平台进行实现的战略方向中位于中心位置.Web GIS为用户随时随地访问和使用地理信息提供 ...
- arcgis api 3.x for js 入门开发系列十七在线天地图、百度地图、高德地图(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- 基于ArcGIS for Server的服务部署分析 分类: ArcGIS for server 云计算 2015-07-26 21:28 11人阅读 评论(0) 收藏
谨以此纪念去年在学海争锋上的演讲. ---------------------------------------------------- 基于ArcGIS for Server的服务部署分析 -- ...
- 基于ArcGIS JS API的在线专题地图实现
0 引言 专题地图是突出而深入的表示一种或几种要素或现象,即按照地图主题的要求,集中表示与主题有关内容的地图.专题地图的专题要素多种多样,分类方法也多种多样,根据专题地图表现数据的特点可分为定 ...
- Arcgis for JS之Cluster聚类分析的实现(基于区域范围的)
原文:Arcgis for JS之Cluster聚类分析的实现(基于区域范围的) 咱们书接上文,在上文,实现了基于距离的空间聚类的算法实现,在本文,将继续介绍空间聚类之基于区域范围的实现方式,好了,闲 ...
- ArcGIS 10.5,打造智能的Web GIS平台
2017年新年来临之际,ArcGIS 10.5正式发布.历经几个版本,ArcGIS 10.5已经革新为一个智能的以Web为中心的地理平台,推出更精细的分级授权.全新的i3S三维标准.大数据分析处理产品 ...
- Vue.js – 基于 MVVM 实现交互式的 Web 界面
Vue.js 是用于构建交互式的 Web 界面的库.它提供了 MVVM 数据绑定和一个可组合的组件系统,具有简单.灵活的 API.从技术上讲, Vue.js 集中在 MVVM 模式上的视图模型层,并 ...
- koa : Express出品的下一代基于Node.js的web框架
https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434501579966a ...
- 基于ArcGIS的CAD数据向GIS数据转换方法(转)
基于ArcGIS的CAD数据向GIS数据转换方法 1 CAD数据与ArcGIS数据介绍 地图数据来源多种多样,大多数使用的是计算机辅助设计软件(CAD)制作的数据,CAD软件制图自动化程度高,操作简单 ...
随机推荐
- Java中DAO/DTO/PO/VO/BO/QO/POJO
ORM:是Object Relational Mapping(对象关系映射)的缩写. 通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据.在O/R/M的世界里,有两个基本的也是重要的东东需要了 ...
- Android GIS开发系列-- 入门季(1) 起点
前言 这个系列,待最终完成更新,大家体谅点,第一版本全部是参考的网络教程,最近会逐步的细化更新为可以直接使用的情况. 本系列的开发基于AS ( Android Studio ), 和ArcGIS 的 ...
- 万能存储工具类SDCard存储 /data/data/存储 assets存储 raw存储
万能存储工具类 SDCard存储 /data/data/存储 assets存储 raw存储 粘贴过去就能够用了 <uses-permission android:name="and ...
- JobHistory搜索智能化
前言 做过hadoop集群问题排查工作的同学一定用过JobHistory,这是一个非常好用的"利器",为什么这么说呢?正如这个工具的名称所叫的那样,这个工具能帮你找到历史Job跑过 ...
- C++学习之new与delete、malloc与free
在C/C++的面试时,对于new/delete和malloc/free这两对的使用和区别经常被考查到,如果这种基础的问题都答不上来,估计很难过面试了.这篇文章仅仅是浅显的讲一下,仅供参考. 一.new ...
- C++学习之extern "C"
我们知道,extern关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.这里起到的是声明作用范围的用处.另外,extern还可以与 ...
- Linux网络编程:UDP Socket编程范例
TCP协议提供的是一种可靠的,复杂的,面向连接的数据流(SOCK_STREAM)传输服务,它通过三段式握手过程建立连接.TCP有一种"重传确认"机制,即接收端收到数据后要发出一个肯 ...
- sendredirect()和forward()的区别 (转)
sendRedirect() 和forward()的区别 HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应UR ...
- 解决华为手机不出现logcat日志的问题
问题描写叙述:公司一部华为手机在连接Eclipse时在Logcat中看不到相关日志 解决方法:1 进入手机拨号界面2 输入*#*#2846579#*#*3 输入完成后自己主动跳转到測试界面4 依次选择 ...
- 可设置指定时间自己主动消失的 MessageBox实现
本文主要是讲怎样实现可设置指定时间自己主动消失的 MessageBox提示框ShowMessageBoxTimeout实现: 在开发client应用程序的时候.经经常使用得WinForm中Messag ...