zoukankan      html  css  js  c++  java
  • (转) 基于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来实现的,如下:

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


    2、对象的编辑

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

    [javascript] view plain copy
     
     print?
    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、对象的删除

    [javascript] view plain copy
     
     print?
    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事件中。

  • 相关阅读:
    Scala Ant Tasks
    Git挂钩
    读写文件
    DC10用CSS定位控制网页布局
    table设置colspan属性,列宽显示错位解决方法
    ATM和购物商城-错题集
    python 函数参数多种传递方法
    python 函数 初学
    python 集合 gather
    元组 字体高亮 购物车练习
  • 原文地址:https://www.cnblogs.com/telwanggs/p/6972725.html
Copyright © 2011-2022 走看看