前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Arcgis for Js的web GIS数据在线采集简介

基于Arcgis for Js的web GIS数据在线采集简介

作者头像
lzugis
发布2018-10-23 15:20:38
1.1K0
发布2018-10-23 15:20:38
举报

在前一篇博文“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事件中。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年03月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档