Flyingis

Fusion Center Lab.

ArcIMS + ArcEngine 生成等值线图

    作者:Flyingis

    上周做了一个ArcIMS + ArcEngine生成等值线图的一个demo,整个思路可以用来完成任意ArcIMS + ArcEngine开发的程序,开发思路比较简单:

    1.计算机上同时可以调用arcims服务和arcengine开发包。
    2.做个简单的arcims程序,可以显示地图及对地图的常规操作(放大、缩小、平移、图例等),可以参考blueviewer或其他已有的成型例子。
    3.用arcengine写等值线生成的代码,提供arcims需要的入口参数,返回结果是生成等值线shape文件,然后在arcims网站服务器端调用该功能方法,用动态图层的方法在页面上显示该shape。
    4.在网页上添加一个参数输入口,例如textbox,后台程序根据输入的值来生成该值对应的等值线图,用ajax异步刷新地图,实际速度很快。

    小结一下,就是三步,arcims程序、engine服务器端程序、两者之间的桥接(网页的服务器端)。

    开发过程中也容易碰到一些问题,主要体现在这些方面:

    1.arcengine写的方法在页面的服务器端调用,但是这些方法通过什么形式存在呢,一种是联合调试,在一个解决方案中添加两个工程,一个是 arcims工程,一个是arcengine工程;一种是将代码封装为dll,但这种方式打包可能会碰到一些麻烦,如arcims用 asp.net/C#,engine用VC++.net,engine程序打包后可能会碰到无法调用COM的问题;还有一种最直接的,全部用一种语言写, engine功能方法放在网站的App_Code文件夹里。

    2.已有点状数据,及根据点数据的业务字段生成grid栅格图,arcengine接受到arcims传过来的参数后,在已有的栅格图基础上生成 shape等值线,arcims通过动态图层添加等值线,这样等值线不能写到内存中,一是因为arcims不能读内存,二是访问量大了内存也吃不消。如果将等值线写到硬盘上如本地文件,只能通过AO自身的命名法(对生成的每一个等值线文件名最后一位数字加1)来生成等值线,这样的好处是每个用户访问不会相互冲突,缺点是会在本地生成大量的shape文件,即使该shape没有被用户使用了,还是会因为arcims后台进程占用无法删除,带来数据上的冗余,可以考虑一下是否有更好的方式来处理?当然,如果等值图上差异值比较少,一共二三十条等值线,完全可以将等值线全部做好后供arcims来调用,有点缓存的意思,免去了engine的工作减轻服务器负担,但毕竟不是正途,server在这一点就容易处理的多。

最后看看效果图:

posted on 2007-08-21 11:05  Flyingis  阅读(2832)  评论(2编辑  收藏  举报

导航