`
Virgo_S
  • 浏览: 1150878 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于ArcGIS Server对ShapeFile文件的编辑功能实现

阅读更多
public class PointEdit {
        private WebContext webContext;
        public void AddPoint (MapEvent event){
                try {
                        //得到地图事件所对应的地图对象
                        WebMap webmap=webContext.getWebMap();
                        WebPoint webpoint=(WebPoint)         event.getWebGeometry().toMapGeometry(webmap);                       
                        AGSLocalMapResource mapResource = (AGSLocalMapResource) MapResourceClass.getMapResource(webContext, 1);
                        IServerContext context = mapResource.getServerContext();
                        MapServer mapServer = mapResource.getLocalMapServer();
                        //IMap maps= mapServer.getMap("");
                        //ILayer firstLayer = maps.getLayer(Otid);
                        //得到图层的空间编辑对象
                        IMap maps= mapServer.getMap("");
                        ILayer layer=maps.getLayer(0);
                        IFeatureLayer fLayer = (IFeatureLayer) layer;
                        IFeatureClass fc = fLayer.getFeatureClass();
                        IDataset ds1=new IDatasetProxy(fc);
                        IWorkspace pWorkSpace = ds1.getWorkspace();
                        IWorkspaceEdit pWorkspaceEdit=new IWorkspaceEditProxy(pWorkSpace);
                        //开始编辑
                        pWorkspaceEdit.startEditing(true);
                        pWorkspaceEdit.startEditOperation();
                        //创建新的地图对象
                        IFeature pFeature=fc.createFeature();
                        //将web地图对象转成地图对象
                        Point p=(Point)context.createObject("esriGeometry.Point");
                        IPoint pt=(IPoint)context.createObject("esriGeometry.Point");
                        pt.setX(webpoint.getX());
                        pt.setY(webpoint.getY());
                        pt.setM(0);
                        pt.setZ(0);
                        p=(Point)pt;
                        //地图对象赋值
                        pFeature.setShapeByRef(p);
                        //字段赋值
                        pFeature.setValue(fc.findField("code"), 1);
                        //保存对象
                        pFeature.store();
                        //停止编辑
                        pWorkspaceEdit.stopEditOperation();
                        pWorkspaceEdit.stopEditing(true);

                        //刷新地图
                        mapServer.refreshServerObjects();
                        webContext.refresh();
                       
                } catch (Exception gise) {
                        System.out.print("添加点" + gise.toString() + "\n");
                        gise.printStackTrace();
                }                       
        }
}
这是添加点的代码
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using ESRI.ArcGIS.ADF.Web.UI.WebControls.Tools;
using ESRI.ArcGIS.ADF.Web.UI.WebControls;
using ESRI.ArcGIS.ADF.ArcGISServer;
using ESRI.ArcGIS.Server;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Display;
using System.Collections;
using ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer;
using ESRI.ArcGIS.Geodatabase;
/// <summary>
/// AddPointFeature 的摘要说明
/// </summary>
public class AddPointFeature : IMapServerToolAction
{
public AddPointFeature()
{
  //
  // TODO: 在此处添加构造函数逻辑
  //
}
    #region IMapServerToolAction 成员
    void IMapServerToolAction.ServerAction(ToolEventArgs args)
    {
        //Step1: 取到地图点击画的那个点
        ESRI.ArcGIS.ADF.Web.UI.WebControls.Map mapCtrl;
        mapCtrl = (ESRI.ArcGIS.ADF.Web.UI.WebControls.Map)args.Control;
        PointEventArgs pea = (PointEventArgs)args;
        System.Drawing.Point screen_point = pea.ScreenPoint;
        MapFunctionality mapFunc = (MapFunctionality)mapCtrl.GetFunctionality(0);
        MapResourceLocal mapResLocal = mapFunc.Resource as MapResourceLocal;        
        IServerContext pSOC;
        IMapServer pMapServer;
        IMap pMap;
        
        pSOC = mapResLocal.ServerContextInfo.ServerContext;
        pMapServer = pSOC.ServerObject as IMapServer;
        IMapServerObjects pMapServerObjs = pMapServer as IMapServerObjects;
        pMap = pMapServerObjs.get_Map(pMapServer.DefaultMapName);
        ESRI.ArcGIS.ADF.ArcGISServer.MapDescription mapDesp = mapFunc.MapDescription;
        ESRI.ArcGIS.ADF.Web.Geometry.Point adf_map_point = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(screen_point, mapCtrl.Extent, mapFunc.DisplaySettings.ImageDescriptor.Width, mapFunc.DisplaySettings.ImageDescriptor.Height);
        PointN ags_map_point = ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Converter.FromAdfPoint(adf_map_point);

        //Step2:插入点到Shp文件中去。要打开WS
        //第一个图层是点,第二个图层是线,第三个图层是面。这里就不判断,主要在于功能的实现
        ILayer pLayer = pMap.get_Layer(0);
        IFeatureLayer pFeatureLyr = pLayer as IFeatureLayer;
        IFeatureClass pFeatCls = pFeatureLyr.FeatureClass;
        IDataset pDataset = pFeatCls as IDataset;
        IWorkspace pWS = pDataset.Workspace;
        IWorkspaceEdit pWorkspaceEdit = pWS as IWorkspaceEdit;
        pWorkspaceEdit.StartEditing(false);
        pWorkspaceEdit.StartEditOperation();
        IFeatureBuffer pFeatureBuffer;
        IFeatureCursor pFeatureCuror;
        IFeature pFeature;
        IPoint pPoint;
        pFeatureBuffer = pFeatCls.CreateFeatureBuffer();
        pFeatureCuror = pFeatCls.Insert(true);
        pFeature = pFeatureBuffer as IFeature;
        pPoint =(IPoint) pSOC.CreateObject("esriGeometry.Point");
        pPoint.X = ags_map_point.X;
        pPoint.Y = ags_map_point.Y;
        IGeometry pPointGeo = pPoint as IGeometry;
        pFeature.Shape = pPointGeo;
        pFeatureCuror.InsertFeature(pFeatureBuffer);
        
        pWorkspaceEdit.StopEditOperation();
        pWorkspaceEdit.StopEditing(true);        
        mapCtrl.Refresh();     
    }
    #endregion
}
  
添加线的代码


using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using ESRI.ArcGIS.ADF.Web.UI.WebControls.Tools;
using ESRI.ArcGIS.ADF.Web.UI.WebControls;
using ESRI.ArcGIS.ADF.ArcGISServer;
using ESRI.ArcGIS.Server;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Display;
using System.Collections;
using ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer;
using ESRI.ArcGIS.Geodatabase;
/// <summary>
/// AddPolylineFeature 的摘要说明
/// </summary>
public class AddPolylineFeature : IMapServerToolAction
{
public AddPolylineFeature()
{
  //
  // TODO: 在此处添加构造函数逻辑
  //
}
    #region IMapServerToolAction 成员
    public void ServerAction(ToolEventArgs args)
    {
        //Step1:根据客户端定义的动作,将屏幕坐标点转换成地图坐标点
        //并初始化一些常用的参数
        ESRI.ArcGIS.ADF.Web.UI.WebControls.Map mapCtrl;
        mapCtrl = (ESRI.ArcGIS.ADF.Web.UI.WebControls.Map)args.Control;
        PolylineEventArgs peal = (PolylineEventArgs)args;
        System.Drawing.Point[] screen_points = peal.Vectors;
        MapFunctionality mapFunc = (MapFunctionality)mapCtrl.GetFunctionality(0);
        MapResourceLocal mapResLocal = mapFunc.Resource as MapResourceLocal;
        ESRI.ArcGIS.ADF.ArcGISServer.MapDescription mapDesc;
        mapDesc = mapFunc.MapDescription;
        IServerContext pSOC;
        IMapServer pMapServer;
        IMap pMap;
        pSOC = mapResLocal.ServerContextInfo.ServerContext;
        pMapServer = pSOC.ServerObject as IMapServer;
        IMapServerObjects pMapServerObjs = pMapServer as IMapServerObjects;
        pMap = pMapServerObjs.get_Map(pMapServer.DefaultMapName);

        IPointCollection pPointColl;
        pPointColl = (IPointCollection)pSOC.CreateObject("esriGeometry.Polyline");
        for (int i = 0; i < screen_points.Length; i++)
        {
            IPoint pPoint;
            ESRI.ArcGIS.ADF.Web.Geometry.Point mappnt = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(screen_points, mapCtrl.Extent, (int)mapCtrl.Width.Value, (int)mapCtrl.Height.Value);
            pPoint = (IPoint)pSOC.CreateObject("esriGeometry.Point");
            pPoint.X = mappnt.X;
            pPoint.Y = mappnt.Y;
            object missingVal = System.Reflection.Missing.Value;
            pPointColl.AddPoint(pPoint, ref missingVal, ref missingVal);
        }
        IGeometry pPolylineGeo = pPointColl as IGeometry;

        //Step2:插入点到Shp文件中去。要打开WS
        //第一个图层是点(0),第二个图层是线(1),第三个图层是面(2)。这里就不判断,主要在于功能的实现
        ILayer pLayer = pMap.get_Layer(1);
        IFeatureLayer pFeatureLyr = pLayer as IFeatureLayer;
        IFeatureClass pFeatCls = pFeatureLyr.FeatureClass;
        IDataset pDataset = pFeatCls as IDataset;
        IWorkspace pWS = pDataset.Workspace;
        IWorkspaceEdit pWorkspaceEdit = pWS as IWorkspaceEdit;
        pWorkspaceEdit.StartEditing(false);
        pWorkspaceEdit.StartEditOperation();
        IFeatureBuffer pFeatureBuffer;
        IFeatureCursor pFeatureCuror;
        IFeature pFeature;
        pFeatureBuffer = pFeatCls.CreateFeatureBuffer();
        pFeatureCuror = pFeatCls.Insert(true);
        pFeature = pFeatureBuffer as IFeature;
        pFeature.Shape = pPolylineGeo;
        pFeatureCuror.InsertFeature(pFeatureBuffer);
        pWorkspaceEdit.StopEditOperation();
        pWorkspaceEdit.StopEditing(true);
        mapCtrl.Refresh();     
    }
    #endregion
}
编辑面的代码


using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using ESRI.ArcGIS.ADF.Web.UI.WebControls.Tools;
using ESRI.ArcGIS.ADF.Web.UI.WebControls;
using ESRI.ArcGIS.ADF.ArcGISServer;
using ESRI.ArcGIS.Server;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Display;
using System.Collections;
using ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer;
using ESRI.ArcGIS.Geodatabase;
/// <summary>
/// AddPolygonFeature 的摘要说明
/// </summary>
public class AddPolygonFeature : IMapServerToolAction
{
public AddPolygonFeature()
{
  //
  // TODO: 在此处添加构造函数逻辑
  //
}
    #region IMapServerToolAction 成员
    public void ServerAction(ToolEventArgs args)
    {
        //Step1:根据客户端定义的动作,将屏幕坐标点转换成地图坐标点
        //并初始化一些常用的参数
        ESRI.ArcGIS.ADF.Web.UI.WebControls.Map mapCtrl;
        mapCtrl = (ESRI.ArcGIS.ADF.Web.UI.WebControls.Map)args.Control;
        PolygonEventArgs peag = (PolygonEventArgs)args;
        System.Drawing.Point[] screen_points = peag.Vectors;
        MapFunctionality mapFunc = (MapFunctionality)mapCtrl.GetFunctionality(0);
        MapResourceLocal mapResLocal = mapFunc.Resource as MapResourceLocal;
        ESRI.ArcGIS.ADF.ArcGISServer.MapDescription mapDesc;
        mapDesc = mapFunc.MapDescription;
        IServerContext pSOC;
        IMapServer pMapServer;
        IMap pMap;
        pSOC = mapResLocal.ServerContextInfo.ServerContext;
        pMapServer = pSOC.ServerObject as IMapServer;
        IMapServerObjects pMapServerObjs = pMapServer as IMapServerObjects;
        pMap = pMapServerObjs.get_Map(pMapServer.DefaultMapName);


        IPointCollection pPointColl;
        pPointColl = (IPointCollection)pSOC.CreateObject("esriGeometry.Polygon");
        for (int i = 0; i < screen_points.Length; i++)
        {
            IPoint pPoint;
            ESRI.ArcGIS.ADF.Web.Geometry.Point mappnt = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(screen_points, mapCtrl.Extent, (int)mapCtrl.Width.Value, (int)mapCtrl.Height.Value);
            pPoint = (IPoint)pSOC.CreateObject("esriGeometry.Point");
            pPoint.X = mappnt.X;
            pPoint.Y = mappnt.Y;
            object missingVal = System.Reflection.Missing.Value;
            pPointColl.AddPoint(pPoint, ref missingVal, ref missingVal);
        }
        IGeometry pPolylineGeo = pPointColl as IGeometry;

        //Step2:插入点到Shp文件中去。要打开WS
        //第一个图层是点(0),第二个图层是线(1),第三个图层是面(2)。这里就不判断,主要在于功能的实现
        ILayer pLayer = pMap.get_Layer(2);
        IFeatureLayer pFeatureLyr = pLayer as IFeatureLayer;
        IFeatureClass pFeatCls = pFeatureLyr.FeatureClass;
        IDataset pDataset = pFeatCls as IDataset;
        IWorkspace pWS = pDataset.Workspace;
        IWorkspaceEdit pWorkspaceEdit = pWS as IWorkspaceEdit;
        pWorkspaceEdit.StartEditing(false);
        pWorkspaceEdit.StartEditOperation();
        IFeatureBuffer pFeatureBuffer;
        IFeatureCursor pFeatureCuror;
        IFeature pFeature;
        pFeatureBuffer = pFeatCls.CreateFeatureBuffer();
        pFeatureCuror = pFeatCls.Insert(true);
        pFeature = pFeatureBuffer as IFeature;
        pFeature.Shape = pPolylineGeo;
        pFeatureCuror.InsertFeature(pFeatureBuffer);
        pWorkspaceEdit.StopEditOperation();
        pWorkspaceEdit.StopEditing(true);
        mapCtrl.Refresh();     
    }
    #endregion
}

分享到:
评论
1 楼 niwowl 2011-12-09  
Threw an exception while working with the server The DCOM connection to the remote object has been disconnected

//保存对象
pFeature.store();

这句报的错,为什么啊!

相关推荐

    ArcGIS Server 10.3.rar_arcgis server_arcgis server 10.3_arcgis

    总之,ArcGIS Server 10.3是一个功能强大的GIS服务器平台,通过ECP文件实现合法授权,为用户提供地图服务、地理处理服务和数据管理等功能,并在10.3版本中优化了性能、大数据处理和云部署。结合其他ArcGIS产品,它...

    ArcGIS Server 10.4.zip

    4. 支持多种数据格式:ArcGIS Server 10.4支持多种GIS数据格式,如Shapefile、GeoTIFF、CAD等,方便数据导入和导出。 5. Web GIS平台:与ArcGIS Online和Portal for ArcGIS无缝集成,构建全面的Web GIS解决方案。 ...

    基于ArcGIS的Python编程秘笈(第2版)+随书数据+笔记.zip

    《基于ArcGIS的Python编程秘笈(第2版)》是一本深入探讨如何利用Python进行地理信息系统(GIS)开发的专业书籍。随着Python在GIS领域的广泛应用,掌握Python在ArcGIS中的运用已经成为许多GIS专业人员和爱好者的必备...

    基于Arcgis Engine10.1实现的SDE数据库连接等功能

    本项目基于ArcGIS Engine 10.1,实现了对SDE(Spatial Database Engine)数据库的连接以及一些核心功能,旨在提供类似ArcCatalog的操作体验。ArcCatalog是Esri公司出品的用于管理地理空间数据的桌面应用,而通过...

    ArcGis Server开发Web GIS入门教程

    这可以通过编辑现有的 MXD 文件或者创建一个新的 MXD 文件来实现。具体步骤如下: 1. 打开 ArcMap 并加载所需的地理数据(例如 Shapefile)。 2. 对地图进行必要的编辑和样式设置,如调整图层顺序、设置符号等。 3....

    Arcgis SERVER网络分析代码包括测试数据

    ArcGIS Server的路径分析功能基于网络分析服务,能够提供实时的、基于Web的路径查找服务。在服务器端,你需要将`DHRoute.mxd`中的网络数据集发布为一个服务,然后在ArcGIS Server Manager中配置并启用这个服务。一旦...

    ArcGIS操作基于GIS文件格式

    **ArcGIS操作基于GIS文件格式** ArcGIS,全称Arc Geographic Information System,是Esri公司开发的一款强大的地理信息系统(GIS)软件,广泛应用于地理数据的处理、分析和展示。在ArcGIS中,地理信息通常以多种GIS...

    ArcGIS Server 10.4.ecp

    3. **数据管理**:提供对多种数据格式的支持,包括Shapefile、Geodatabase、CAD、栅格数据等,并具备数据整合、编辑、版本控制等功能。 4. **安全性与权限管理**:具备强大的身份验证和授权机制,确保只有授权的...

    开源webgis 整套 兼容arcgis

    2. 集成方式:通过WMS、WFS-T等接口,开源WebGIS可以消费ArcGIS Server提供的地图服务和地理信息服务,实现数据的读取、编辑和管理。 3. 自主配图切片:开源GIS可以创建自己的地图切片服务,与ArcGIS Server的动态...

    ArcGIS Server Flex API 1.3 离线帮助

    1. **API概述**:Flex API是一个基于ActionScript 3.0的库,它包含了用于创建地图服务、图层、控件、工具以及与ArcGIS Server通信的类。它使得开发者能够轻松地在Adobe Flex环境中集成GIS功能。 2. **安装与配置**...

    基于ArcGIS+Engine的开发原理和方法的探讨

    4. **数据创建与编辑**:支持数据输入、地理编码、读写Shapefile文件等。 5. **应用程序开发**:可以开发独立的GIS应用程序。 6. **控件开发**:支持开发自定义的GIS控件。 #### 三、开发方法探讨 ##### 3.1 开发...

    ArcGIS Engine开发Demo+数据文件

    5. 编辑功能:支持对地理数据进行添加、修改和删除操作。 6. 分析工具:包括缓冲区分析、网络分析、地形分析等高级GIS功能。 7. 三维地图:支持创建和显示三维地图,进行三维分析。 8. 打印和导出:可以将地图输出为...

    arcgis105_16101.zip

    由于 "arcgis105_16101.zip" 的具体内容未知,上述内容是基于ArcGIS 10.5的一般特性进行的阐述。实际解压后的文件可能会涉及到特定的更新、修补程序或特定用途的数据集,这些都需要根据文件内容来具体分析。

    教你如何精通ArcGIS10

    此外,通过ArcGIS的三维功能,可以构建立体地图,增强对地表特征的理解。 ArcGIS10还支持编程,通过使用ArcObjects SDK或集成开发环境(IDE),如Visual Studio,可以编写基于Java、JavaScript的自定义脚本或应用...

    arcgis 移动产品介绍

    - **同步与管理**:与ArcGIS Server或Portal for ArcGIS无缝集成,实现数据的同步和管理。 - **定制应用**:支持基于模板快速创建定制化的移动应用,满足特定业务场景的需求。 - **高级分析工具**:集成了一系列高级...

    ArcGIS 10.2 操作SQLite

    用户可以通过ArcGIS Online或ArcGIS for Server来访问和操作这些基于SQLite的数据服务。 6. **性能优化**:尽管SQLite是轻量级的,但通过合理设计数据库结构(如索引创建、数据分区等)和优化查询语句,仍能提升其...

    ArcGIS-介绍及操作入门

    用户可以通过添加图层来扩展地图,例如添加Shapefile文件、Layer文件或栅格数据。ArcMap还提供了数据视图和版面视图,以支持不同的地图工作流程。 ArcGIS软件不仅仅是一个简单的制图工具,它还是一个强大的地理空间...

    基于arcpy开发的arcgis工具

    2. **ArcGIS Geoprocessing Service**:`arcpy` 可用于开发Web服务,将GIS处理功能发布到ArcGIS Server上,供其他应用或用户远程调用。 3. **Python Add-ins**:结合`arcpy` 和ArcGIS的Python Add-ins框架,可以开发...

Global site tag (gtag.js) - Google Analytics