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来实现的,如下:

  1. var edit = new Edit(map);
  2. var select;
  3. edit.on("deactivate",function(evt){
  4. var geom = evt.graphic.geometry;
  5. var wkt = null;
  6. switch(geom.type){
  7. case "polyline":{
  8. wkt = LineToWKT(geom);
  9. break;
  10. }
  11. case "polygon":{
  12. wkt = PolygonToWKT(geom);
  13. break;
  14. }
  15. default :{
  16. wkt = PointToWKT(geom);
  17. break;
  18. }
  19. }
  20. if(confirm('是否编辑?')){
  21. console.log("编辑:"+wkt);
  22. }
  23. });
  24. map.on("click", function(evt){
  25. edit.deactivate();
  26. });
  1. editItem = function(td){
  2. var tr = td.parentElement;
  3. var objType = tr.id;
  4. var id = tr.cells[0].innerHTML;
  5. var title = tr.cells[1].innerHTML;
  6. $("#itemTitle").html("").html(title);
  7. $("#itemType").val("point");
  8. $("#itemObjtype").val(objType)
  9. $("#editWindow").show();
  10. var draw = new Draw(map);
  11. draw.on("draw-end", function(evt){
  12. map.setMapCursor("default");
  13. var symbol = null,wkt;
  14. switch(evt.geometry.type){
  15. case "polyline":{
  16. symbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
  17. new Color([255,0,0]), 3);
  18. wkt = LineToWKT(evt.geometry);
  19. break;
  20. }
  21. case "polygon":{
  22. symbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,
  23. new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
  24. new Color([255,0,0]), 2),
  25. new Color([200,200,200,0.5]));
  26. wkt = PolygonToWKT(evt.geometry);
  27. break;
  28. }
  29. default :{
  30. symbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_SQUARE, 10,
  31. new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
  32. new Color([255,0,0]), 1),
  33. new Color([0,255,0,0.25]));
  34. wkt = PointToWKT(evt.geometry);
  35. break;
  36. }
  37. }
  38. var graphic = new Graphic(evt.geometry, symbol,{id:$("#itemObjtype").val(),name:$("#itemTitle").html()});
  39. editLayer.add(graphic);
  40. draw.deactivate();
  41. if(confirm('是否绘制?')){
  42. console.log("新建:"+wkt);
  43. }
  44. });
  45. on(dom.byId("editBtn"), "click",function(){
  46. var objType = $("#itemType").val();
  47. switch(objType){
  48. case "polyline":{
  49. draw.activate(esri.toolbars.Draw.POLYLINE);
  50. break;
  51. }
  52. case "polygon":{
  53. draw.activate(esri.toolbars.Draw.POLYGON);
  54. break;
  55. }
  56. default :{
  57. draw.activate(esri.toolbars.Draw.POINT);
  58. break;
  59. }
  60. }
  61. map.setMapCursor("corsshair");
  62. $("#editWindow").hide();
  63. });
  64. }

2、对象的编辑

对象的编辑是通过Edit实现的,如下:

  1. var edit = new Edit(map);
  2. var select;
  3. edit.on("deactivate",function(evt){
  4. var geom = evt.graphic.geometry;
  5. var wkt = null;
  6. switch(geom.type){
  7. case "polyline":{
  8. wkt = LineToWKT(geom);
  9. break;
  10. }
  11. case "polygon":{
  12. wkt = PolygonToWKT(geom);
  13. break;
  14. }
  15. default :{
  16. wkt = PointToWKT(geom);
  17. break;
  18. }
  19. }
  20. if(confirm('是否编辑?')){
  21. console.log("编辑:"+wkt);
  22. }
  23. });
  24. map.on("click", function(evt){
  25. edit.deactivate();
  26. });
  27. editLayer.on("click", function(evt) {
  28. event.stop(evt);
  29. activateToolbar(evt.graphic);
  30. });
  31. function activateToolbar(graphic) {
  32. var tool = 15;
  33. var options = {allowAddVertices: "true", allowDeleteVertices: "true", uniformScaling: "true"};
  34. edit.activate(tool, graphic, options);
  35. select = graphic;
  36. }

3、对象的删除

  1. delItem = function(td){
  2. if(confirm('是否删除?')){
  3. var id = tr.cells[0].innerHTML;
  4. var graphics = editLayer.graphics;
  5. for(var i= 0, dl=graphics.length; i<dl; i++){
  6. var graphic = graphics[i];
  7. if(graphic.attributes.id===id){
  8. editLayer.remove(graphic);
  9. break;
  10. }
  11. }
  12. }
  13. }

最后,就是将绘制的geometry传给后台,主要有两个地方,一个是绘制完成之后,代码中体现在draw的draw-end事件中,一个是在编辑完成之后,代码中体现在edit的deactivate事件中。

(转) 基于Arcgis for Js的web GIS数据在线采集简介的更多相关文章

  1. 2013Esri全球用户大会之解读Web GIS

    1 什么是Web GIS,它跟我有什么关系? Web GIS是传递GIS功能的一种新方式,在Esri把GIS作为平台进行实现的战略方向中位于中心位置.Web GIS为用户随时随地访问和使用地理信息提供 ...

  2. arcgis api 3.x for js 入门开发系列十七在线天地图、百度地图、高德地图(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  3. 基于ArcGIS for Server的服务部署分析 分类: ArcGIS for server 云计算 2015-07-26 21:28 11人阅读 评论(0) 收藏

    谨以此纪念去年在学海争锋上的演讲. ---------------------------------------------------- 基于ArcGIS for Server的服务部署分析 -- ...

  4. 基于ArcGIS JS API的在线专题地图实现

    0 引言     专题地图是突出而深入的表示一种或几种要素或现象,即按照地图主题的要求,集中表示与主题有关内容的地图.专题地图的专题要素多种多样,分类方法也多种多样,根据专题地图表现数据的特点可分为定 ...

  5. Arcgis for JS之Cluster聚类分析的实现(基于区域范围的)

    原文:Arcgis for JS之Cluster聚类分析的实现(基于区域范围的) 咱们书接上文,在上文,实现了基于距离的空间聚类的算法实现,在本文,将继续介绍空间聚类之基于区域范围的实现方式,好了,闲 ...

  6. ArcGIS 10.5,打造智能的Web GIS平台

    2017年新年来临之际,ArcGIS 10.5正式发布.历经几个版本,ArcGIS 10.5已经革新为一个智能的以Web为中心的地理平台,推出更精细的分级授权.全新的i3S三维标准.大数据分析处理产品 ...

  7. Vue.js – 基于 MVVM 实现交互式的 Web 界面

    Vue.js 是用于构建交互式的 Web  界面的库.它提供了 MVVM 数据绑定和一个可组合的组件系统,具有简单.灵活的 API.从技术上讲, Vue.js 集中在 MVVM 模式上的视图模型层,并 ...

  8. koa : Express出品的下一代基于Node.js的web框架

    https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434501579966a ...

  9. 基于ArcGIS的CAD数据向GIS数据转换方法(转)

    基于ArcGIS的CAD数据向GIS数据转换方法 1 CAD数据与ArcGIS数据介绍 地图数据来源多种多样,大多数使用的是计算机辅助设计软件(CAD)制作的数据,CAD软件制图自动化程度高,操作简单 ...

随机推荐

  1. 1267 老鼠的旅行 2012年CCC加拿大高中生信息学奥赛

    1267 老鼠的旅行  2012年CCC加拿大高中生信息学奥赛 题目描述 Description You are a mouse that lives in a cage in a large lab ...

  2. .NET跨平台 - WCF & Mono

    让WCF运行在Linux上(寄宿于服务器程序) WCF介绍请自行 bing 搜索 使用的开发工具为vs2017,系统为 Ubuntu16.04 服务器软件为Jexus ( 详情请看:  Jexus官网 ...

  3. AE 创建

    using System; using System.Drawing; using System.Runtime.InteropServices; using ESRI.ArcGIS.ADF; usi ...

  4. MVC之使用Nhibernate

    NHibernate是一个基于.Net,用于关系数据库的对象持久化类库.它是著名的Hibernate的.Net版本,NHibernate用于把你的.Net对象持久化到底层的关系数据库中.你完全不用自己 ...

  5. Unix/Linux环境C编程新手教程(40) 初识文件操作

     1.函数介绍 close(关闭文件) 相关函数 open,fcntl,shutdown.unlink,fclose 表头文件 #include<unistd.h> 定义函数 int ...

  6. MySQL 登录问题

    1.问题一:使用update mysql.user set password='root'改动密码后,不能登录 解决:操作过程例如以下. (1)关闭mysql(杀掉mysqld进程),然后使用命令: ...

  7. [Unity UGUI]ScrollRect效果大全

    UGUI各种优化效果 本文所实现的UGUI效果需求如下: - 支持缩放滑动效果 - 支持动态缩放循环加载 - 支持大数据固定Item复用加载 - 支持不用Mask遮罩无限循环加载 - 支持Object ...

  8. CSS自适应宽度的高级应用,一般人不会告诉你。

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxgAAACdCAIAAAC4iknFAAAgAElEQVR4nO2d3VsTV7uH51/wqhKotn

  9. YTU 2774: Prepare for CET6

    2774: Prepare for CET6 时间限制: 1 Sec  内存限制: 128 MB 提交: 40  解决: 37 题目描述 Hard to force the CET4&6 is ...

  10. [模板]FWT

    写起来和fft很像,这里放个板子. 代码: #include<iostream> #include<cstdio> #include<cmath> #include ...