zoukankan      html  css  js  c++  java
  • ArcIMS 连接器.NET Link 使用方法

     作者:Flyingis[url=http://www.blogjava.net/flyingis/][/url]

        前几天马维峰写了一篇关于ArcIMS文章——《[url=http://www.cnblogs.com/maweifeng/archive/2006/07/28/462417.html]浅析ArcIMS[/url]》,主要分析了ArcIMS的基本体系结构和几种二次开发模式的简单对比,比笔者之前的《ArcIMS体系结构》分析的透彻许多。

        ArcIMS二次开发,关注最多的无非是它的连接器(connector)和ArcXML。在这些连接器中,Servlet Connector通过纯粹的ArcXML文件来传输请求和响应,ColdFusion Connector在其自身的运行环境中使用自定义tags来产生ArcXML请求和响应,Java Connector和ActiveX Connector比较类似,通过一组API(Java Connector还有标签库)来产生ArcXML请求和响应,它们是面向对象的开发方式,比较符合一般程序员的思维习惯。.NET Link比较特殊,最初我认为它和Java Connector、ActiveX Connector一样,通过一系列API来定义、生成ArcXML文件中的节点与属性,但事实上并非如此,简单来说,它仅仅是对XML文件的一种搭配与组装,使用.NET Framework中对XML文件的操纵方式拼装出所需的ArcXML请求,并接受ArcIMS应用服务器的响应,其参考手册中只有服务连接和 AxlRequest相关的几个类的说明,也难怪ESRI为什么要给它要取名为.NET Link,而不是.NET Connector。

        离ArcGIS 9.2正式发布已经没有多长时间,.NET Link能否得到改进至少像它的前辈ArctiveX Connector一样还不清楚。.NET Link的这种开发方式使得开发人员需要更多的关注ArcXML_reference,下面将简单说明.NET Link的使用方法。

        首先,需要将.NET Link的程序集引用到开发环境中,我使用的是Visual Studio 2005,需要说明的是ArcIMS 9/9.1 的.NET Link在VS2003和VS2005中都能工作的很好,兼容性不错。这样ESRI.ArcIMS.Server.dll就加入了项目中。

        第二步,建立到ArcIMS应用服务器的连接。

    using ESRI.ArcIMS.Server
    ……
    ServerConnection connection = new ServerConnection();
    connection.Host = "localhost";
    connection.AppServerPort = 5300;
    connection.Scheme = Scheme.TCP;

        如果需要建立一个HTTP连接,端口为80,可以将以上语句改为

    connection.Scheme = Scheme.HTTP;
    connection.Host = "http://www.yourdomain.com";
    connection.URIPort = 80;

        第三步,发送一个ArcXML请求。在.NET Link中发送ArcXML请求,其实质就是对ArcXML文件的一种拼装。

    // 获取默认的地图服务
    connection.ServiceName = "ServerSample";
    // 建立一个 XML String,即 axl
    string sAXLText;
    // 在 sAXLText 中写入定制的 axl 文件
    sAXLText = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><ARCXML version=\"1.1\">";
    sAXLText = sAXLText + "<REQUEST><GET_IMAGE><PROPERTIES>";
    sAXLText = sAXLText + "<IMAGESIZE width=\"300\" height=\"250\"/>";
    sAXLText = sAXLText + "<ENVELOPE minx=\"-132.0\" miny=\"25.0\" maxx=\"-57.0\" maxy=\"50.0\" />";
    sAXLText = sAXLText + "<LEGEND display=\"false\" />";
    sAXLText = sAXLText + "</PROPERTIES></GET_IMAGE></REQUEST></ARCXML>";
    string response = conArcIMS.Send(sAXLText);

        最后,需要处理ArcXML响应。

    System.Xml.XmlDocument axlResponse = new System.Xml.XmlDocument();
    axlResponse.LoadXml(response);
    if (axlResponse.GetElementsByTagName("OUTPUT").Count == 1)
    {
        // 从 ArcIMS 应用服务器响应中获取 "OUTPUT" XmlNode 节点的集合,并且节点只有一个
        System.Xml.XmlNodeList nodeOutput = axlResponse.GetElementsByTagName("OUTPUT");
        // 获取这个节点的 url 属性值
        imageURL = nodeOutput[0].Attributes["url"].Value;
    }

        最后获得的imageURL就是之前客户端用户发送请求需要服务器返回的图片地址,用户每次对地图操作后看到的结果,其本质就是一张张图片。

        现在思路比较清晰了,ArcIMS地图服务发布后,其展现的内容主要是由开发中所定制的ArcXML文件的内容所决定,开发人员需要面对大量ArcXML 中的子元素及其属性设置,对于面向对象的开发而言显然是笨了一些,但从原理上来说,还是比较简单的,关键就是要看开发人员对ArcXML文档的熟悉程度了。

        使用.NET Link进行ArcIMS二次开发的过程中,对ArcXML的子元素和属性进行操纵与设置不是一件令人愉快的事,但其中真正的困难还要数客户端大量javascript脚本的应用和数据传递,有机会拿一两个简单例子讨论一下。posted on 2006-07-30 21:36 Flyingis 阅读(2355) 评论(29)  编辑  收藏 所属分类: ArcIMS

    评论#1楼  2006-07-30 22:47 双鱼座 感觉.NET Link就是一鸡肋。当初我把它当着法宝一样推荐给了我的同事使用。呵呵,结果同事被这个东西折腾个半死。最后换成了System.Net下的对象来通信,既稳定又省事。   回复  引用  查看    
    #2楼  2006-07-31 02:00 edison1024 靠。。。。我没怎么玩过arcims,不过我看这文章介绍后,这个所谓的.net link简直就是多此一举,画蛇添足。

    如果web服务器与应用服务器部署在同一台机器,这多了一层的通讯完全是在走弯路。如果是异地部署,框架里大把通讯类可以轻松完成这种字符串的传送,封装这个ServerConnection没什么营养。而这种看似简单的封装如果在对网络异常考虑不足的时候,用他的人绝对被玩死。

    哦?好像楼上和我想的一样,hehe
      回复  引用  查看    
    #3楼  2006-07-31 02:02 edison1024 哦,顺便问一下,有没有谁了解arcims支不支持WMS,WFS   回复  引用  查看    
    #4楼 [楼主] 2006-07-31 18:41 Flyingis @双鱼座
    不是项目在.net平台下做,我肯定用javaconnector来实现了,.NET Link这种开发方式就是这么笨!

    @edison1024
    ArcIMS 有 wmsconnector 的支持,用JSP实现的,需要的话我把自带的例子发给你。   回复  引用  查看    
    #5楼  2006-08-06 00:24 edison1024 哦,不用了,其实我一直在好奇ESRI对OGC规范支持的持一种什么态度,虽然它一只在推动OGC   回复  引用  查看    
    #6楼 [楼主] 2006-08-07 22:16 Flyingis 一个不恰当的比方,这个就好比之前Oracle支持开源的态度,始终没办法像IBM一样来大力扶持开源,总希望靠开源来推动自己的商业市场。   回复  引用  查看

    #7楼 [TrackBack] 2007-01-23 16:32 刚刚 本系列随笔将和大家一起来开发GIS中的项目中的某些环节。这次的随笔是关于使用VS.Net2003来编写ArcIMS中所用到的ArcXML文档的,不知道所提到的两种方法哪种更好?
    [引用提示]刚刚引用了该文章, 地址: http://www.cnblogs.com/lijigang/archive/2007/01/23/628088.html   回复  引用  查看    
    #8楼  2007-04-04 20:26 cindy [未注册用户] ShapeWorkspace("citiesWorkspace", @"C:\Inetpub\wwwroot\sample_data\NorthAmerica")


    例子中有一个这样的函数,不太清楚这个函数是什么意思
    是指将NorthAmerica李的.shp文件转换为一个叫citiesWorkspace的workspace吗?


    我执行这一段代码之后发现地图上这个图层没有加载上来
    不知道是什么原因

    而且我并没有在axl文档中发现< MAP dynamic="true" >
    所以我把axl文档中这一行给改成这样了,
    不知道对不对
    请你帮我解释一下
    谢谢   回复  引用  查看    
    #9楼 [楼主] 2007-04-05 09:26 Flyingis @cindy
    1.ShapeWorkspace定义shape数据源的目录。
    2.当需要加入新的动态图层时,需要在request中将map dynamic属性设置为true。   回复  引用  查看    
    #10楼  2007-04-09 22:00 cindy [未注册用户] to flyinggis
    使用9.2的控件toc
    想达到这样的效果,点击checkbox,想作除了控制图层的显示之外的操作
    比如说两个相互叠加的图层就不能同时显示
    看到在toc的属性里有OnNodeLegendClicked属性,写了个函数




    在javascript里是这样定义的


    <script language="javascript" type="text/javascript">
    function checkup()
    {
    for(int i=0;i<10;i++)
    {
    printf(i);
    }
    }

    </script>


    但是每次编译都会出错,说找不到checkuo函数的定义
    是怎么回事?

    这种OnNodeLegendClicked函数应该怎么定义呢?

    esri公司应该包装的就是和html控件差不多的控件吧
    我就是按照这种方式来作的啊

      回复  引用  查看

    #11楼 [楼主] 2007-04-12 11:43 Flyingis @cindy
    "两个相互叠加的图层就不能同时显示"
    是两个什么类型的图层呢?点在面上就是很正常的显示方式。

    js代码没有printf,只有alert。   回复  引用  查看    
    #12楼  2007-06-01 15:30 皮皮 [未注册用户] 我在安装arcims9.0的时候,为什么会没有.net link runtime。   回复  引用  查看    
    #13楼 [楼主] 2007-06-01 15:34 Flyingis @皮皮
    需要先安装visual studio 2003 / 2005   回复  引用  查看    
    #14楼  2007-06-01 15:36 皮皮 [未注册用户] 我想问一下,为什么在安装arcims9.0的时候,没有.net link runtime这一项啊。因为要用到,所以很急,能不能帮帮忙指点一下啊。谢谢了。   回复  引用  查看    
    #15楼  2007-06-01 15:37 皮皮 [未注册用户] 我已经安装了visual studio 2005 ,可还是没有啊。   回复  引用  查看

    #16楼 [楼主] 2007-06-01 21:23 Flyingis 必须先安装Visual Studio 2005,然后再安装ArcIMS。   回复  引用  查看    
    #17楼  2007-06-04 08:57 皮皮 [未注册用户] 我的就是先安装了Visual Studio 2005后又安装的ArcIMS。我在别的网站上看到ArcIMS 9要求有.NET Framework 1.1和.NET Framework 1.1 SDK的情况下才能安装.NET Link和开发帮助。是这样吗??我这只有.NET Framework 2.0.没有.NET Framework 2.0 SDK,是不是需要安装.NET Framework 2.0 SDK??还有,安装.NET Framework 2.0 SDK会不会对vs2005的应用造成影响啊。
      回复  引用  查看    
    #18楼  2007-06-04 09:25 @皮皮 [未注册用户] 你可能是选择的典型安装,要完全安装才有这个!你可以在安装向导中选择"修改(Modify)",下一步,然后选择点击"Application server connectors",就会看到.net link runtime,选中即可.我也遇到过这种问题,呵呵!   回复  引用  查看    
    #19楼  2007-06-04 09:37 皮皮 [未注册用户] 你说的是在修改是在安装arcims还是vs2005中??   回复  引用  查看    
    #20楼  2007-06-04 09:45 @皮皮 [未注册用户] 我的qq是26771237,在那里说好了.   回复  引用  查看

    #21楼  2007-06-04 09:53 皮皮 [未注册用户] 那要不要安装.NET Framework 2.0 SDK??
    我在安装的时候,出现这样的字句:the following features cannot be installed on this machine due to missing dependencies:.net link runtime and developer help.是不是因为没有安装.NET Framework 2.0 SDK??   回复  引用  查看    
    #22楼  2007-06-04 09:59 @皮皮 [未注册用户] .net 也要安装,否则不叫.net link了,在arcims中有安装.net link中的选项(在server connector 中可以看到),默认是不安装的,要手动选择.   回复  引用  查看    
    #23楼 [楼主] 2007-06-04 10:55 Flyingis @皮皮
    典型安装里是没有选择.net link的,需要手动选择。你安装了vs2005就会自动安装.net framework sdk 2.0,你安装了vs2005为什么没有sdk呢?   回复  引用  查看    
    #24楼 [楼主] 2007-06-05 10:11 Flyingis 想起来了,ims9.0需要.net framework sdk1.1   回复  引用  查看    
    #25楼  2007-06-10 13:49 皮皮 [未注册用户] 我想问一下,怎么把arcims引用的vs2005里面。
    哪有arcims中文教材??   回复  引用  查看

    #26楼 [楼主] 2007-06-14 14:00 Flyingis @皮皮
    在vs2005中添加引用,在ArcIMS目录中找到.net_link的dll。
    中科永生有ArcIMS的中文教材,还有就是各种webgis书籍,最好还是看帮助文档,分析一下blueviewer或htmlviewer的代码。   回复  引用  查看    
    #27楼  2007-09-25 00:06 sdf [未注册用户] @皮皮
      回复  引用  查看    
    #28楼  2007-11-13 16:08 summershasha [未注册用户] 如何将ArcIMS与VS2003连接。我现在找不到ArcIMS怎样用C#来写程序。急于做一个信息服务,需要用C#写程序使ArcIMS发布的网络地图能够获取到数据库中数据,请帮帮忙啊!!   回复  引用  查看    
    #29楼 [楼主] 2007-11-16 09:17 Flyingis @summershasha
    将.net_link dll动态库添加到vs2003工程中,然后就可以调用连接arcims服务器的方法了,C#主要写的是arcxml。   回复  引用  查看


  • 相关阅读:
    Python 创建包含列表的元组
    Python 创建特殊元组tuple
    Bean named 'XXX' is expected to be of type [XXX] but was actually of type [com.sun.proxy.$Proxy7
    小米手机安装Google框架
    前端框架
    Microsoft Project项目管理工具
    Spring AOP无法拦截Controller的原因
    sql分页优化
    npm和Node.js简介
    启动OpenOffice服务
  • 原文地址:https://www.cnblogs.com/googlegis/p/2979116.html
Copyright © 2011-2022 走看看