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

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

时间: 2024-10-05 17:08:32

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

JS 向web sql数据表插入数据

var strSQL = "insert into tableName values (?,?,?)"; var info=[1,1,1]; //向web sql数据表插入数据. function insertInfo(strSQL,info){ //连接数据库(http://www.cnblogs.com/nb08611033/p/8227560.html) db = openDB(); if (db) { db.transaction(function(tr) { tr.execu

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

原文:Arcgis for JS之Cluster聚类分析的实现(基于区域范围的) 咱们书接上文,在上文,实现了基于距离的空间聚类的算法实现,在本文,将继续介绍空间聚类之基于区域范围的实现方式,好了,闲言少叙,先看看具体的效果: 聚类效果 点击显示信息 显示单个聚类点 下面说说具体的实现思路. 1.数据组织 在进行数据组织的时候,因为是要按照区域范围的,所以必须得包含区域范围的信息,在本示例中,我用的数据依然是全国2000多个区县点的数据,并添加了省市代码,数据如下: 2.聚类思路 根据数据中“p

[ArcGIS 10.3重磅来袭]ArcGIS 10.3 惊艳登场,打造新一代Web GIS最强“芯”

今天是2015年的第一个工作日,咱来重磅出击一下. 美国时间2014年12月10日,ArcGIS 10.3正式发布.这是Esri自2012年发布ArcGIS 10.2之后,历时两年的成果结晶.ArcGIS 10.3,隆重推出以用户为中心(Named User)的全新授权模式,超强的三维"内芯",革新性的桌面GIS应用,可配置的服务器门户,即拿即用的Apps,更多应用开发新选择,数据开放新潮 流,为构建新一代Web GIS应用提供了更强有力的核"芯"支持. 现将Arc

ArcGIS平台,打造可落地的新一代Web GIS

新一代Web GIS的内涵 "新一代Web GIS",是Esri在新的GIS技术和时代背景下,所提出的一种以Web为中心的.全新的GIS应用模式,在这种模式中,资源和功能都进一步整合,GIS服务的提供者以Web的方式提供资源和功能,而用户则采用多种终端随时随地访问这些资源和功能.在这种模式下,GIS平台变得更加简单易用.开放和整合,使得GIS为组织机构所有人使用成为现实,为"Web GIS"赋予了全新的内涵.ArcGIS平台倡导One ArcGIS的理念,不再受限于

ArcGIS 10.3 惊艳登场,打造新一代Web GIS最强“芯”

美国时间2014年12月10日,ArcGIS 10.3正式发布.这是Esri自2012年发布ArcGIS 10.2之后,历时两年的成果结晶.ArcGIS 10.3,隆重推出以用户为中心(Named User)的全新授权模式,超强的三维"内芯",革新性的桌面GIS应用,可配置的服务器门户,即拿即用的Apps,更多应用开发新选择,数据开放新潮流,为构建新一代Web GIS应用提供了更强有力的核"芯"支持. 惊艳1:以用户为中心(Named User)的授权模式 ArcG

中科燕园GIS外包-----基于ArcGIS的应急平台

1. 国家应急平台体系 <“十一五”期间国家突发公共事件应急体系建设规划>(国办发[2006]106号)明确提出“十一五”期间建设“以国务院应急平台为中心,以省级和部门应急平台为枢纽,上下贯通.左右衔接.互联互通.信息共享.互有侧重.互为支撑.安全畅通的国家应急平台体系”. 2006年,国家启动了“十一五”科技支撑计划“国家应急平台体系关键技术研发与应用示范”(2006-2008).为国家应急平台体系提供了设计方案.标准规范.软件系统和数据库等关键技术支撑,以及12个部门应急平台和10个省级应

基于Node.js的web聊天系统 - 真正意义上的web实时聊天系统

简单介绍一下这个实时web聊天系统的功能,首先进入系统的人填入名字和邮件地址后会获取到一个由系统创建的URL地址,你可以把这个地址发给另外一个人,另外一个人进入系统后就可以和你进行实时的聊天对话咯.主要用到了Node.js和socket.io 两个库,另外还用到了的库有express,  gravatar, ejs, 具体细节查看package.json,需要的这些库如果本地没有的话运行会报错的,需要使用npm install 安装.大家可以下载demo源代码进行运行测试. 源代码下载后解压有如

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

Vue.js 是用于构建交互式的 Web  界面的库.它提供了 MVVM 数据绑定和一个可组合的组件系统,具有简单.灵活的 API.从技术上讲, Vue.js 集中在 MVVM 模式上的视图模型层,并通过双向数据绑定连接视图和模型.实际的 DOM 操作和输出格式被抽象出来成指令和过滤器.相比其它的 MVVM 框架,Vue.js 更容易上手. 官方网站      插件下载 HTML: <div id="demo"> {{message}} <input v-model=

《基于Vue.js的Web前端应用研究》文献阅读(十五)

一.基本信息 标题:基于Vue.js的Web前端应用研究 时间:2017 来源:科技与创新 关键词:Web前端:Vue.js:JavaScript组件:Vue框架 二.研究内容 1.主要内容: 随着互联网的迅猛发展,用户对Web前端的使用体验.交互操作流程.外观有了更高的要求.特别是Web系统中越来越多的数据处理和业务逻辑开始偏向前端,导致Web前端工作量扩大,代码量增加.如果仍然采用传统的方式开发设计Web前端,会导致前期开发度和后期维护难度增大,可扩展性变差.为了提高开发效率和代码复用率,越