`

北京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的参数作相应的修改,大家有什么问题可以在这里提出来!

 

 

分享到:
评论
3 楼 ruxianjun 2011-10-13  
为何我的无法实现组件的注册呢?也就是步骤2.
在vs10中只需要勾上为com互操作注册就能生成.tlb文件.
为何我的提示以下错误:
[img]
C:\Users\lenovo\Desktop\12.jpg
[/img]
2 楼 barcelona 2009-08-12  
行 35:         double area = pAear.GetArea(TextBox1.Text.ToString());
1 楼 barcelona 2009-08-12  
请问你的这个例子我把identity的参数修改后,点确定会出现这个错误:
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

源错误:


行 33:         IActcArea pAear = soe as IActcArea;
行 34:        
行 35:         double area = pAear.GetArea(TextBox1.Text.ToString());
行 36:
行 37:         serverContext.ReleaseContext();


源文件: e:\BeiJingTraining\BeiJingTraining\UseExtensionGisServer.aspx.cs    行: 35


是不是还需要修改什么?
还有这一步中(4、停止province服务,右键切换到Service Properties的Capabilities,将SOEServer打上钩),我怎么找不到SOEServer?

相关推荐

    arcgis server 开发中文培训资料

    《ArcGIS Server开发中文培训资料》是一份专为学习和掌握ArcGIS Server开发技术而设计的综合教程。ArcGIS Server是Esri公司推出的地理信息系统(GIS)服务器产品,它允许开发者将地理信息和分析功能集成到各种应用...

    ESRI公司ArcGIS Server应用开发培训(ForDotNet Web开发)

    ArcGIS Server应用开发培训主要针对使用Microsoft .NET框架开发Web应用程序的专业人士,由ESRI中国(北京)有限公司提供。此教程旨在帮助开发者深入理解和实践如何利用ArcGIS Server创建高效的GIS解决方案。 ArcGIS...

    ArcGIS Server 开发平台介绍

    ### ArcGIS Server 开发平台介绍 #### 一、概述 ArcGIS Server 是一款由 Esri 公司开发的企业级地理信息系统(GIS)应用服务平台。它支持多种操作系统环境,包括 Red Hat Enterprise Linux AS/ES 3.0、SUSE Linux ...

    ArcGIS Server开发指南基于Flex和.Net源码

    ArcGIS Server开发指南基于Flex和.Net数据随书光盘内容.分两个文件上传。

    ArcGis Server开发Web GIS入门教程

    "ArcGis Server开发Web GIS入门教程" ArcGIS Server 是一款功能强大且灵活的 GIS 服务器软件,支持多种类型的服务,通过发布这些应用,可以开发定制功能,基于服务的 Web GIS 应用。在本文中,我们将介绍 ArcGIS ...

    ArcGIS Server开发中文培训资料

    使用ArcGIS Server(.NET)来开发应用 ArcGIS Server 配置 开发ArcGIS Server应用的基础 使用ADF Web 控件开发 扩展ADF 模板 ArcGIS Server Web services

    arcgisserver开发实验1

    在ArcCatalog中发布地图服务时,需要以agsadmin组的用户身份登录计算机,然后添加ArcGISServer服务。在ArcGIS Server Manager中发布地图服务时,需要通过登录页面输入用户名和密码进行访问。 接下来是WebADF Ajax...

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

    《ArcGIS Server开发从入门到精通》第三篇主要聚焦于如何高效地利用ArcGIS Server进行地理信息系统(GIS)的开发和应用。ArcGIS Server是Esri公司提供的一个强大的GIS服务发布和管理平台,它允许开发者将地理数据和...

    ArcGIS Server开发指南--基于Flex和.NET源码.part1

    ArcGIS Server开发指南--基于Flex和.NET源码每一部分

    北京中科信软 ArcGIS_Server培训

    在ArcGIS Server培训课程中,学习者将深入了解ArcGIS Server Web应用程序开发框架(ADF),这是构建可利用多种GIS服务的Web应用程序的开发框架。ADF提供了丰富的类库和API,通过这些API可以有效地访问GIS服务。培训...

    ArcGIS Server开发指南--基于Flex和.NET源码.part2

    ArcGIS Server开发指南--基于Flex和.NET源码第二部分

    ArcGIS Server开发.pdf

    《ArcGIS Server开发.pdf》是关于地理信息系统(GIS)领域中的一个重要组件——ArcGIS Server的详细指南。ArcGIS Server是Esri公司推出的一款强大的地图服务发布和管理平台,它允许开发者将地理数据转换为可在线访问...

    ArcGIS Server开发商培训

    【ArcGIS Server开发商培训】 ArcGIS Server是一款由Esri公司开发的强大地理信息系统(GIS)服务器,它允许开发者和GIS专业人员在Web环境下发布、管理和共享地理空间数据与服务。此"ArcGIS Server开发商培训"专注于...

    Arcgis server for java开发入门

    《ArcGIS Server for Java开发入门》是一份宝贵的资源,它为初学者提供了全面而深入的指导,帮助他们踏入GIS(地理信息系统)与Java技术相结合的世界。ArcGIS Server是Esri公司的一款强大的地理空间服务平台,它允许...

    arcgis server 10.3 开发服务器授权文件

    arcgis server 10.3 开发服务器授权文件。 arcgis server 10.3 的授权文件,可视为没有时间限制的授权。虽然这个版本挺古老的,但功能上基本可以满足日常开发了。 必须吐槽一下esri,他们对开发者实在太不友好了,...

    解决arcgis server跨域问题

    解决arcgis server跨域问题: 1、停掉ArcGIS Server的服务。 2、 打开&lt;ArcGIS Server&gt; \framework\runtime\tomcat\conf\web.xml,注册跨域bean 3、lib下拷贝 cors-filter-2.5.jar java-property-utils-1.9.1.jar包 4...

    arcgis server 10.2.2许可文件.zip

    ArcGIS Server是Esri公司开发的一款强大的地理信息系统(GIS)服务器软件,它允许用户在互联网、内联网或局域网环境下发布、管理和共享地理空间数据。在这个场景中,我们关注的是ArcGIS Server 10.2.2的许可文件,它...

    ArcGIS Server开发Flyingis

    ### ArcGIS Server开发知识点概述 #### 一、ArcGIS Server简介 - **定义与功能**:ArcGIS Server 是一款由 ESRI 公司开发的企业级地理信息系统 (GIS) 平台,主要用于发布、管理和访问地理空间数据和服务。该平台...

Global site tag (gtag.js) - Google Analytics