北京ArcGis Server开发培训例子(整理)

前段时间到北京去参加了ArcGis Server应用开发的培训,发现基本上的例子都和Flyingis上面的Arcgsi Server 开发系列的文章一样,只有最后两个例子没有。由于培训方不提供源代码,所有在培训时做的试验例子都无法拷出来。唉,没有办法,只有培训完回来以后,重新整理一下放上来,以备查!

 

整理的例子包括

1、Web ADF 编程——查询功能的实现

2、Graphics data sources——高亮功能的实现

3、ArcGIS Server data sources——Buffer功能的实现

4、自定义Tool

5、自定义Task

6、扩展Arcgis Server

 

由于前面5个例子在Flyingis的博客里都作了详细的介绍,我这里就不作介绍了,这里主要介绍最后一个例子,扩展Arcgis Server。

 

目标:

扩展Arcgis Server,根据省份名称,得到省份面积

当然这里只是一个例子,大家可以做很复杂的扩展

 

试验前准备:

1、准备一个全国各省的地图数据

2、创建一个province的地图文档

3、通过province的地图文档发布一个地图服务

 

试验步骤:

1、编写实现IServerObjectExtension的类,也就是你想添加的功能,新建DAANSOE项目,添加一个class文件,改名为GetArea.cs,代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.EnterpriseServices;
using ESRI.ArcGIS.ADF.ArcGISServer;
using ESRI.ArcGIS.Server;
using System.Runtime.InteropServices;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;


namespace DAANSOE
{
    [Guid("560680E2-1DFB-438c-BA66-27A144BECE55")]
    public interface IActcArea
    {
        double GetArea(string sql);
    }

    [AutomationProxy(true), ClassInterface(ClassInterfaceType.AutoDual), Guid("68F301BC-7A2F-44ea-A8B1-042431321719")]
    public class SOEServer : ServicedComponent, IActcArea, IServerObjectExtension
    {

        private IServerObjectHelper m_SOH;


        #region IActcArea 成员

        /*次方法为测试时候的方法
        public double GetArea(double x, double y)
        {
            return x + y;
        }
        */

        public double GetArea(string sql)
        {
            IMapServer mapServer = m_SOH.ServerObject as IMapServer;
            IMapServerObjects mapServerObjs = mapServer as IMapServerObjects;
            IMap map = mapServerObjs.get_Map(mapServer.DefaultMapName);
            IFeatureLayer pflayer = map.get_Layer(0) as IFeatureLayer;
            IFeatureClass pfc = pflayer.FeatureClass;

            ISpatialFilter psf = new SpatialFilterClass();
            psf.WhereClause = sql;
            psf.SpatialRel = ESRI.ArcGIS.Geodatabase.esriSpatialRelEnum.esriSpatialRelIntersects;

            IFeatureCursor pfCursor = pfc.Search(psf as IQueryFilter, false);
            IFeature pfeature = pfCursor.NextFeature();

            if (pfeature == null)
                return -2;
            IPolygon polygon = pfeature.Shape as IPolygon;

            IArea pArea = polygon as IArea;

            return pArea.Area;
        }

        #endregion

        #region IServerObjectExtension 成员

        void IServerObjectExtension.Init(IServerObjectHelper pSOH)
        {
            m_SOH = pSOH;
        }

        void IServerObjectExtension.Shutdown()
        {
            m_SOH = null;
        }

        #endregion
    }

}

 

2、使用Regasm注册Server Object Extension

进入vs2005的命令提示框:

E:\Program Files\Microsoft Visual Studio 8\VC>

 

将当前目录切换到你上面那个dll所在的目录:

E:\project\北京培训\BeiJingTraining\Exercise11\DAANSOE\bin\Debug>

 

执行如下命令进行注册:

regasm /tlb:DAANSOE.tlb /codebase DAANSOE.dll

 

执行完成后可以到dll目录下验证相应的.tlb是否生成

 

(如果要注销注册,使用 regasm /u DAANSOE.dll /tlb DAANSOE.tlb /codebase 命令)

 

3、注册Server Object Extension到Gis Server

我们将通过一段代码将Server Object Extension注册到Gis Server中。

新建一个Console项目,命令为RegisterToGisServer,在Main方法里添加如下代码:

Identity identity = new Identity("username", "888888", "domain");
            AGSServerConnection connection = new AGSServerConnection("fmc-pca187", identity);
            connection.Connect();

            IServerObjectAdmin2 soa = connection.ServerObjectAdmin as IServerObjectAdmin2;
            IServerObjectExtensionType soe = soa.CreateExtensionType();
            soe.CLSID = "DAANSOE.SOEServer";
            soe.Name = "SOEServer";
            soe.Description = "Test Application";
            soa.AddExtensionType("MapServer", soe);

 运行这段代码,执行完后可以到<ArcGIS Server Install Location>\server\system folder 打开ServerTypesExt.dat进行验证

 

4、停止province服务,右键切换到Service Properties的Capabilities,将SOEServer打上钩,重新启动province服务

 

5、使用Server Object Extension

新建一个web应用,新建一个aspx页面,改名为UseExtensionGisServer.aspx,加入相应控件,在button的click事件里实现如下代码:

Identity identity = new Identity("username", "888888", "domain");
        AGSServerConnection connection = new AGSServerConnection("fmc-pca187", identity);
        connection.Connect();

        IServerObjectManager som = connection.ServerObjectManager as IServerObjectManager;
        IServerContext serverContext = som.CreateServerContext("province", "MapServer");
        IServerObjectExtensionManager soem = serverContext.ServerObject as IServerObjectExtensionManager;
        IServerObjectExtension soe = soem.FindExtensionByTypeName("SOEServer");

        IActcArea pAear = soe as IActcArea;
        double area = pAear.GetArea(TextBox1.Text.ToString());

        serverContext.ReleaseContext();
        Response.Write("<script>alert(" + area.ToString() + ");</script>");

 预览效果如下:

 

至此,如果上面一切顺利的话,整个功能就完成了,单击确定 ,就可以弹出四川省的面积。

 

注意事项:

如果Server Object Extension注册到Arcgis Server以后,又启动了province服务,这个时候要重新生成DAANSOE的话,需要把province停掉,不然会抱错,然后重新使用regasm工具注册修改后的dll。

 

最后,我把以上几个例子的整个项目作为附件上传上来,这些例子都是我在本机调试通过的,大家下载以后需要对identity的参数作相应的修改,大家有什么问题可以在这里提出来!

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程简介 : ArcGIS Server包含了一系列软件和集中管理的GIS Web应用程序的开发框架。本高级课程介绍了ArcGIS Server Web应用程序开发框架(ADF),并教授学员如何开发ArcGIS Server Web应用程序以使用多种GIS服务。学员将学习有用的类库、API及ArcGIS Server开发流程。在课程练习中,学员将创建应用程序,使用ADF Web控件来整合多种数据源、执行查询、执行新添的geoprocessing任务。学员还将学到如何使用自定义按钮和工具来扩展Web ADF,以及如何使用server对象扩展模块扩展GIS服务器。 学员收益: 理解ArcGIS Server Web ADF的组成 学习如何使用Web地图应用程序模板 在Web应用程序中使用ArcGIS Server API 使用ASP.NET Web控件开发自定义Web应用程序 开发自定义命令和工具 使用task框架创建和部署自定义web任务 使用server对象扩展模块 培训内容: 建立Web ADF应用程序:Web ADF开发者资源;Web地图应用程序模板的组织;使用Web地图应用程序模板的优点。 使用Web ADF控件:ResourceManager控件;Mapping控件;web控件与MapControl控件关联;ImageBlending选项。 Web ADF编程:使用数据源、资源和函数;普通数据源API。 图形数据源编程:元素与要素图形图层;几何体;渲染;符号化;刷新图形图层。 ArcGIS Server数据源编程SOAP和ArcObjects API;Value和Proxy对象;网络和本地资源;在COM与Web ADF类型间转换;管理状态。 创建自定义命令和工具:扩展Web ADF工具条;客户端与服务器动作;ToolEventArgs;Postbacks和callbacks;使用CallbackResults。 Web ADF任务框架:TaskManager和TaskResults;配置任务。 创建自定义任务:Itask;扩展FloatingPanelTask;使用TaskResults;整合任务至Visual Studio和ArcGIS Server Manager。 Geoprocessing:GeoprocessingFunctionaility; GPServer; Geoprocessor;geoprocessing任务的定制与使用。 扩展GIS服务器:COM有用对象;服务器对象扩展;部署服务器对象扩展的条件;在Web应用程序上使用服务器对象扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值