欢迎来到天天文库
浏览记录
ID:8971143
大小:56.50 KB
页数:12页
时间:2018-04-13
《webgis应用开发(附源码)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、另辟渠道的webgis应用开发(附源码) 在用ARCIMS开发webgis中小型应用程序的时候,我相信很多人和我一样,就是如何将保存在简单数据库(如ACCESS)里的一些专题点信息该如何体现在地图上,这些点多则有3000,4000,另外还可通过地图操作(添加,平移)进行专题点编辑。如果直接用HTMLVIEWER,这可是个不大不小的难题。一开始,我们使用了ACETATELAYER方式进行处理,效果不甚理想,在局域网中多用户并发访问时就有明显的速度瓶颈,更何况INTERNET上。 如下代码就是在此问题上做出的一种解决方案尝试,即部分地图信息客户端化。目前我正在开发,只是部
2、分调试仅在局域网中通过,并没有完全成熟,在线面上还是处理开发阶段。现在介绍一下代码的基本思想,希望大家能够加以讨论。该代码使用JAVASCRIPT开发,它以基础图层地图图片为底图,在此之上进行图层扩展,客户端形成一套小型的webgis,与ARCIMS同步刷新,形成无缝整合,给人感觉就是一个整体的webgis系统。该代码在对象层次关系上模拟ACTIVEXCONNECTOR的重点对象。通过不同refresh函数与基础图层同步更新(为提高客户端速度,开放了很多refresh方式,即只refresh发生改变的对象坐标位置,当然放大缩小平移之类的操作就需要整个客户端refresh,因为每个点都发生
3、了位置变化)。之所以如此层次化,一方面是为了增强代码的可读性和可维护性,另一方面通过封装具体VML代码实现来简化开发过程。这样一来,可以大大减轻服务端的处理,客户端和服务端同时处理,提高地图的运行速度。 我想重点说明的是,如果将部分地图信息移到客户端,必然需要自主开发一些原本集成好的功能(比如说在FeatureLayer中的WHEREEXPRESSION,BUFFER等功能)用于客户端。以BUFFER为例,圆形如何画,必然是vml的oval,可以把它作为一个特殊地图图层来看待,它是一个圆,而不是点,线,区(折线),这就是图层类型扩展。同样的道理还用在监控(关于监控的需求可查看htt
4、p://www.gisempire.com/bbs/dispbbs.asp?BoardID=23&ID=14998),它是一种特殊的点层,它具体表现内容更丰富,所以也可以把它看成一种图层类型。 当然,之所以费尽心思放在客户端做,还有个很重要的目的就是为了解决地图特殊信息的可编辑。首先说明,此方法对基础图层的属性是无能为力的,它仅是用于在客户端生成的专题信息。 以本代码为例,客户端添加一个新点则需要先在相关对象中add,还需要通过数据库的方式将点保存。如果移动某客户端生成点,则显示客户端的移动过程,然后更改该对象的left和top到XY即可。另外要注意的是,客户端gismap对
5、象中的所有涉及点的坐标都是地图坐标,所以经常需要屏幕坐标和地图坐标之间的转换,以前我说过,现在就不多说了,代码也体现比较明显。 以下是未完成代码的详细内容,以后会将很多实现补充上来,希望给有此需求的人员带来启示,并欢迎大家跟贴讨论,恭请候教。functionGisMap(){ vari; this.control=drawonmap; //控件名称 this.visible=true; //是否显示 this.mapXMin=0; //地图最小X this.mapYMin=0; //地图最小Y this.m
6、apXMax=0; //地图最大X this.mapYMax=0; //地图最大Y this.layers=newLayers(); //图层集合对象///返回含屏幕坐标的point对象 this.fromMapPoint=function(mapX,mapY) { varpoint=newPointObject(); point.x=getJX(mapX); point.y=getWY(mapY); returnpoint; }; ///返回含地图坐标的point对象 this.toMapPoint=f
7、unction(screenX,screenY) { varpoint=newPointObject(); point.x=getScrX(screenX); point.y=getScrY(screenY); returnpoint; }; //获得地图坐标 functiongetJX(scrX) { return(this.mapXMin+parseInt(scrX)/(document.
此文档下载收益归作者所有