`
norain1988
  • 浏览: 58238 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

ArcGIS Server flex实现在线数据编辑 (转)

阅读更多
第一种方案

即将到来的arcgis 10,据说已经提供了数据修改的REST接口,但远水解不了近渴,通过flex客户端实现用户录入数据仍然是一个棘手的问题,本文提供了一种思路。

以点数据的录入为例:

arcgis服务器端通过AO实现数据的插入

public void savePoint(double x,double y) throws utomationException,IOException
{

  IServerContext serverContext = getServerContext(ARCGIS_SERVER_NAME,ARCGIS_SERVER_USER,ARCGIS_SERVER_PASSWORD,ARCGIS_MAP_NAME,ARCGIS_SERVICE_NAME);
  MapServer mapServer = (MapServer) serverContext.getServerObject();
  ILayer editLayer = mapServer.getLayer("", LAYERID);
  IFeatureLayer featureLayer = new IFeatureLayerProxy(editLayer);
  IFeatureClass featureClass = featureLayer.getFeatureClass();
  IFeature feature = featureClass.createFeature();
  IPoint point = (IPoint)serverContext.createObject(Point.getClsid());
  point.setX(x);
  point.setY(y);
  feature.setShapeByRef(point);
  feature.store(); 
  serverContext.releaseContext();

}

将AO逻辑包装成REST接口

@POST @Path("/save")
@Consumes("application/x-www-form-urlencoded")
@Produces("text/xml")
public String savePosition(@FormParam("x") double x,@FormParam("y") double y) throws UnknownHostException, IOException
{
  aoService.savePoint(x,y);
  return "ok";
}

flex端调用REST接口

private function drawEnd(event:DrawEvent):void

{

    var outSR:SpatialReference = new SpatialReference(spatialref);
    var geom:Geometry = event.graphic.geometry;
    var gra:Graphic = new Graphic(geom);

   var ptSym:SimpleMarkerSymbol = new SimpleMarkerSymbol("circle", numGraphic.value, cpGraphic.selectedColor);
                   gra.symbol = ptSym;
                   measurePt = geom as MapPoint;
                   savePoint(measurePt.x,measurePt.y);

}



   private function savePoint(x:Number, y:Number):void
   {
    var aoService:HTTPService=new HTTPService();
    var request:Object=new Object();
    request.x=x;
    request.y=y;
    aoService.url="http://192.168.1.188:8080/rest/service/save";
    aoService.request=request;
    aoService.method="POST";
    aoService.addEventListener(ResultEvent.RESULT, onSavePoint);
    aoService.send();


}

需要注意的是,这种解决方案没有考虑多用户使用环境。

第二种方案:

目前在ArcGIS10没有正式推出之前,除了可以使用ADF做数据的在线编辑之外,可以使用OGC的WFS-T的服务来做在线编辑。
        ESRI提供一整套的解决方案,大家可以参考以下相关教程

http://webhelp.esri.com/arcgisserver/9.3/dotNet/index.htm#tutorial_wfst_service.htm来发布WFS-T的服务。
       然后参考wfs-t服务的白皮书,来编码实现地理数据的在线编辑,具体可以到OGC的网站上下载最新的包皮书,http://www.opengeospatial.org/standards/wfs,目前最新的版本是1.1.0.
       以下是使用FLEX实现的在线添加对象,供大家参考:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
    xmlns:mx="http://www.adobe.com/2006/mxml"
    xmlns:esri="http://www.esri.com/2008/ags">
   
    <mx:Script>
     <![CDATA[
      import mx.rpc.events.FaultEvent;
      import mx.rpc.events.ResultEvent;
      import com.esri.ags.geometry.MapPoint;
      import mx.controls.Alert;
    
      private function onmapclick(event:MouseEvent):void
      {
       var mp:MapPoint = mymap.toMapFromStage(event.stageX,event.stageY);
      
       var insert:XML=<wfs:Transaction
       version="1.1.0"
       service="WFS"
       xmlns="http://nick/arcgis"
       xmlns:gml="http://www.opengis.net/gml"
       xmlns:ogc="http://www.opengis.net/ogc"
       xmlns:wfs="http://www.opengis.net/wfs"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://nick/arcgis/services/Hospital/MapServer/WFSServerhttp://nick/arcgis/services/Hospital/MapServer/WFSServer?request=describefeaturetype&;typename=Hospital.xshttp://www.opengis.net/wfshttp://schemas.opengis.net/wfs/1.1.0/wfs.xsd">
            <wfs:Insert>
                <Hospital>
                     <SHAPE>
                         <gml:Point srsName="urn:ogc:def:crs:EPSG:6.9:4326">
                              <gml:pos>{mp.x} {mp.y}</gml:pos>
                         </gml:Point>
                     </SHAPE>
                     <shanghai_4>test01</shanghai_4>
                </Hospital>
            </wfs:Insert>
       </wfs:Transaction>;
    hs.send(insert);
      }
     
      private function onresult(event:ResultEvent) : void
          {
            var result:Object = event.result;
           
            //Alert.show(result.toLocaleString() + "onResult")
            
           var numInserted:int = result.TransactionResponse.TransactionSummary.totalInserted;
           if( numInserted>0 )
           {
            mymap.getLayer("sh").refresh();
            Alert.show("共"+numInserted+"个数据提交成功");
            }
     this.cursorManager.removeBusyCursor();
    }
   
           private function onfault(event:FaultEvent) : void
           {
            var result:Object = event.fault;
            //Alert.show(result.toString()+ "onfault")
           }
     ]]>
    </mx:Script>
   
   
    <mx:HTTPService id="hs" url="http://nick/arcgis/services/Hospital/MapServer/WFSServer" contentType="application/xml"
     result="onresult(event)" fault="onfault(event)"/>
   
   
    <esri:Map id="mymap" mapClick="onmapclick(event)">
     <esri:ArcGISDynamicMapServiceLayer id="sh">
      <esri:url>http://nick/ArcGIS/rest/services/Hospital/MapServer</esri:url>
     </esri:ArcGISDynamicMapServiceLayer>
    </esri:Map>
   
   
</mx:Application>

分享到:
评论

相关推荐

    ArcGIS Server Flex API 1.3 离线帮助

    《ArcGIS Server Flex API 1.3 离线帮助》是Esri公司为开发者提供的一款详尽的技术文档,主要用于支持使用Flex技术构建与ArcGIS Server交互的应用程序。ArcGIS Server是一个强大的地理信息系统(GIS)平台,允许用户...

    ArcGIS+Server+Flex+API教程与源码

    编辑完成后,可以将更改同步回ArcGIS Server,实现数据的实时更新。 8. 性能优化与安全 针对大规模数据和高并发场景,需要考虑性能优化,如缓存策略、分块加载等。同时,为了保护地理信息数据的安全,还需要了解...

    Web GIS开发——flex+ArcGIS Server

    ArcGIS Desktop是GIS专业人员使用的桌面应用程序,包括ArcMap、ArcCatalog等组件,用于数据编辑、分析和地图制作。ArcGIS Engine则允许开发者将GIS功能嵌入到自定义的应用程序中。在服务器端,ArcSDE作为中间件,...

    arcgis_flex 1.2

    这个版本的API(应用程序接口)是arcgis_api_for_flex_1.2.zip,包含了丰富的组件和功能,使得开发者能够轻松地在Web应用中集成地理空间数据和服务。 GIS(地理信息系统)是一种将地理位置与相关数据结合起来进行...

    src.rar_ARCGIS FOR FLEX API_arcgis_arcgis flex api_arcgis for fl

    最后,ArcGIS for Flex API 提供了强大的地图服务发现和缓存机制,确保了应用程序在处理大量数据时的性能和响应速度。通过TileCache和DynamicMapServiceLayer,可以优化地图的加载和显示。 总的来说,ArcGIS for ...

    arcgis for flex api

    8. **服务端交互**:说明如何与ArcGIS Server进行通信,获取和更新数据,如使用Task和AsyncToken。 9. **性能优化**:提供提高应用程序性能的策略,包括缓存、分块加载、多线程处理等。 10. **示例代码**:提供...

    ArcGIS Server与.NET(WebGIS开发)书本源代码

    3. **客户端控件**:如何使用ArcGIS API for JavaScript或Flex API在Web页面上实现地图交互,如缩放、平移、图层控制等。 4. **地理编码**:通过ArcGIS Server的地理编码服务,将地址转换为地理位置坐标,反之亦然...

    基于ESRI Flex Viewer框架的ArcGIS Server开发

    **ArcGIS API for Flex**:是ESRI为开发基于Flex的Web GIS应用程序提供的API,允许开发者使用Flex和ArcGIS Server进行地图展示、地理处理、数据管理和用户交互等功能。 **Flex Viewer框架结构**:Flex Viewer的核心...

    arcgis view flex 3.6 src

    ArcGIS Viewer for Flex是一个预先配置的Flex应用程序,包含了多种GIS功能,如地图浏览、查询、编辑、打印等。它基于ESRI的API for Flex,提供了许多可定制的组件和配置选项,以适应不同项目的需求。 **4. 源码分析...

    ArcGIS Server开发入门到精通 扫描版 第二部分

    - 介绍如何在ArcGIS Server上实现地图数据的在线编辑功能,包括添加、修改和删除功能。 - 讨论编辑工作流,如版本管理、冲突解决策略,确保数据的准确性和一致性。 - 学习使用Geodatabase和Feature Service进行...

    ArcGis_Flex_chm_中文(不完整)

    4. **服务端与客户端交互**:探讨如何与ArcGIS Server进行通信,获取地图服务、图层信息、进行数据查询和编辑等操作。 5. **事件处理和用户交互**:掌握如何响应用户操作,例如点击地图、选择图层、执行分析等,...

    ArcGis_Flex_chm_中文

    8. **地图服务和地理编码**: 理解ArcGIS Server提供的各种地图服务,包括镶嵌数据集、地形图层、影像服务等,并学会使用地理编码服务进行地址查找。 9. **空间分析和应用开发**: 学习如何利用ArcGIS提供的空间分析...

    Flex地图编辑技术

    Flex地图编辑技术主要...综上所述,Flex地图编辑技术是将Flex的交互能力与ArcGIS Server的强大GIS功能结合,实现地图的在线编辑。通过深入理解和实践,开发者可以构建出高效、易用的GIS应用,满足各种地图编辑需求。

    arcgis server开发从入门到精通第五篇

    ArcGIS Server允许用户创建、编辑、分析地理信息,并通过网络将其共享给多个客户端应用程序。 2. **服务发布** 在ArcGIS Server中,发布地图服务是核心操作之一。这一过程涉及到将GIS数据转换为可在线访问的服务,...

    arcgis api for flex 开发入门

    要了解更多示例和详细信息,可以访问官方文档:http://resources.esri.com/arcgisserver/apis/flex/index.cfm?fa=samples。 在开发过程中,不断实践和查阅相关资料是提升技能的关键。希望这个入门指南能帮助你开启...

    ArcGIS Server 入门好例子

    ArcGIS Server 集成了多种Web GIS API,如JavaScript API、Flex API、Silverlight API等,供开发者构建基于Web的地图应用。通过这些API,你可以实现地图交互、查询、编辑等功能,为用户提供丰富的地图体验。 5. **...

    arcgis-samples-flex-develop.zip_arcgis api for flex_flex

    ArcGIS API for Flex基于Adobe Flex框架,提供了一系列接口和类,用于集成Esri的ArcGIS Server地图服务。通过这个API,开发者可以轻松地实现地图展示、图层管理、地理编码、空间分析等功能。其主要优势在于能够构建...

    ArcGIS Server .net学习经典教程

    你将学习如何使用SDK中的类库,创建地图应用、数据编辑工具,以及执行地理处理任务。 5. **安全性和权限管理**:理解和配置ArcGIS Server的安全性至关重要。教程将涵盖身份验证机制,如Windows集成认证、OAuth 2.0...

Global site tag (gtag.js) - Google Analytics