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. [Vue @Component] Pass Props Between Components with Vue Slot Scope & renderless component

    Components with slots can expose their data by passing it into the slot and exposing the data using  ...

  2. 46.Android 自己定义Dialog

    46.Android 自己定义Dialog Android 自己定义Dialog 前言 提示Dialog 提示Dialog 效果图 菜单Dialog 菜单Dialog 效果图 DialogActivi ...

  3. 【Cocos2dx游戏开发】CCTableView实现滑动列表

    在游戏中,经常需要用到列表展示,例如我现在做的卡牌游戏中就有卡牌列表和好友列表需要用到CCTableView,下面简单介绍一下使用方法. CCTableView位于扩展库文件cocos-ext.h中, ...

  4. C#保留2位小数几种场景总结 游标遍历所有数据库循环执行修改数据库的sql命令 原生js轮盘抽奖实例分析(幸运大转盘抽奖) javascript中的typeof和类型判断

    C#保留2位小数几种场景总结   场景1: C#保留2位小数,.ToString("f2")确实可以,但是如果这个数字本来就小数点后面三位比如1.253,那么转化之后就会变成1.2 ...

  5. tableView优化

    ※ tableView优化 概括说:1.使用不透明视图.2.不要重复创建不必要的table cell.3.减少视图的数目.4.不要做多余的绘制工作.5.预渲染图像.6.不要阻塞主线程. 详细说:1.使 ...

  6. ITK Configuring and Building in VisualStudio及hello world程序编译

    1. ITK Configuring and Building in VisualStudio With Visual Studio 2010 on Windows 7 (32-bit): Launc ...

  7. LeetCode 443. String Compression (压缩字符串)

    题目标签:String 这一题需要3个pointers: anchor:标记下一个需要存入的char read:找到下一个不同的char write:标记需要存入的位置 让 read指针 去找到下一个 ...

  8. [C++设计模式] decorator 装饰者模式

    <head first>中 的样例:咖啡店有各种咖啡饮料,能够往咖啡里面加各种调料变成还有一种饮料.假设使用继承的方式来为每一种饮料设计一个类,代码的复杂度非常easy膨胀,并且会继承父类 ...

  9. ocpm

    学习中心 | 腾讯社交广告营销平台 http://e.qq.com/ads/learning/data/optimization/case/035/

  10. Android-通过SlidingPaneLayout高仿微信6.2最新版手势滑动返回(一)

    近期更新了微信版本号到6.2.发现里面有个很好的体验,就是在第二个页面Activity能手势向右滑动返回,在手势滑动的过程中能看到第一个页面,这样的体验很赞,这里高仿了一下. 这里使用的是v4包里面的 ...