当前位置:文档之家› OpenLayers体系结构

OpenLayers体系结构

OpenLayers体系结构由于OpenLayers是采用JavaScript实现的,不存在包的概念,但是它可以通过命名空间来实现类似包的功能。

另外,JavaScript不存在继承的感念,也不存在私有、公有、保护等概念,OpenLayers中所谓的继承其实就是将基类中的所有属性和方法复制到子类中去。

OpenLayers的命名空间如下:一、OpenLayers命名空间:如上图所示,OpenLayers是整个webgis系统的最外层命名空间,所有的地理信息系统相关web程序都在此命名空间下,在此命名空间下又创建了其他的命名空间来管理相关功能的程序。

在这个命名空间下定义了一些基础类和基类来构建整个框架。

1、class OpenLayers.MapMap类实例化的对象为地图容器,可以向地图容器里面添加图层和控件。

属性2、class OpenLayers.MarkerOpenLayers命名空间下的Marker类可以被实例化为marker对象,用于标注地图上的位置,marker对象是由LonLat 对象和Icon对象组合而成的。

markers一般被添加到一个叫做yer.Markers的特殊图层中。

需要注意的是,如果你在一个marker中使用了一个icon,也就是说,你不能在其他的marker中在使用它——一旦你使用了这个icon,你应该clone()这个icon然后在另外的marker中使用这个icon。

3、class OpenLayers.PopupPopup类实例化一个弹出窗口,通常被添加到地图容器中。

构造函数4、class OpenLayers.IconIcon为图标类,图标指定用来在地图上显示Marker 的图像。

构造函数5、class OpenLayers.Format各种format类的基类,它的子类实现reading/writing方法。

属性方法6、OpenLayers.RequestOpenLayers.Request命名空间下包含两个常用的AJAX方法,通过这两个方法可以方便的实现XMLHttpRequests功能。

方法7、class OpenLayers.FeatureFeature是几何信息和属性的结合体,在OpenLayers.Feauter中主要是包括一个标记和经纬度。

属性方法二、BaseType命名空间:在BaseTypes命名空间下定义了一些基本类型的类,如LonLat、Size等。

1、class OpenLayers.LonLatLonLat是以经度和纬度表示的地理坐标点。

注意:进行地图投影时通常将经度与地图的x 坐标联系起来,将纬度与y 坐标联系起来。

构造函数2、class OpenLayers.PixelPixel是以像素坐标表示的地图上的一点。

在地图坐标系统中,x坐标向右增大,y坐标向下增大。

构造函数属性方法3、class OpenLayers.SizeSize是地图矩形区域的大小(以像素表示)。

大小对象有两个参数:width 和height。

宽度是点的x 坐标的差值,高度是y 坐标的差值。

构造函数属性方法三、Control命名空间:OpenLayers命名空间下面定义了Control基类,Control命名空间下面的所有类都继承于Control基类。

每个具体的控件类实现地图的一项具体操作。

控件影响地图的显示和行为,它允许拖动和放大缩小地图以控制地图的比例尺,默认的控件是被添加到地图上的,尽管如此,也可以通过传递可选参数将其加入到地图外部的DIV中。

1、class BM.Control.TMeasureDistanceTMeasureDistance为测距控件,它实现OpenLayers.Control接口,因此可用OpenLayers.map.addControl()方法添加到地图中。

可能会增加控件定位的参数或方法事件2、class BM.Control.TMeasurePolygonTMeasurePolygon为测面积控件,它实现OpenLayers.Control接口,因此可用OpenLayers.Map.addControl()方法添加到地图中。

可能会增加控件定位的参数或方法方法事件3、class BM.Control.TPanZoomBarPanZoomBar为缩放移动控件,继承于OpenLayers中的PanZoomBar,主要工作为修改样式,使图标跟以前GZGIS中对应的控件一样,增加设置最大级别和最小级别的功能,它实现了OpenLayers.Control接口,因此可用OpenLayers.Map.addControl()方法添加到地图中。

4、class BM.Control.TOverviewMapOverviewMap为缩略图控件(鹰眼控件),可继承于OpenLayers中的OverviewMap,主要工作为修改样式,由于OpenLayers.OverviewMap实现了OpenLayers.Control接口,因此可用OpenLayers.Map.addControl()方法添加到地图中。

属性5、class BM.Control.TNavigationTNavigation为导航控件,该控件将分类导航,一个导航控件中包含一到多个TNavPage实例。

该控件实现了OpenLayers.Control接口,可由OpenLayers.Map.addControl()方法加载到地图中。

6、class BM.Control.TGotoTGoto为定位控件,根据用户输入的经纬度定位地图。

//调用事例//1、不设置标题//map.addControl(new BM.Control.TGoTo());//2、设置标题//var gotoControl = new BM.Control.TGoTo();//gotoControl.setTitle("标题");//map.addControl(gotoControl);7、class BM.Control.TDivTreeTDivTree为复选框树行控件,被添加到DOM元素中,无需实现OpenLayers.Control接口,与地图无关。

构造函数8、class BM.Control.TTreeTTree为复选框树的数据结构,可以获得数组形式的所有节点和树形式的所有节点,可以获得包含自己的树对象。

不需用户进行实例化,TDivTree自动调用。

9、class BM.Control.TTreeNodeTTreeNode为复选框节点类。

四、Feature命名空间:特征元素是几何信息(geometry)和地理信息(attribute)的结合体,从类结构来看它实际上是marke类和lonlat 类的组合。

1、class OpenLayers.Feature.VectorVector类使用OpenLayers.Geometry类描述其几何特征,它有一个数据对象的attributes属性,和一个style属性,默认的style属性在<OpenLayres.Feature.Vector.style>中定义。

构造函数方法五、Format命名空间:Format命名空间下定义了一系列的解析器用于将特征元素格式化为具体格式的标准数据,然后利用格式化后的标准数据与采用此标准实现的服务器端交互。

例如,WFS请求过程中,客户端和服务器端统一采用GML格式的数据进行交互,所以客户端用Format命名空间下的GML类将具体的特征元素格式化为GML数据发送到服务器端或将服务器端传送过来的GML数据解析为特征元素显示在地图上。

Format命名空间下的类都继承了format基类,重写了它的read/write方法。

1、class OpenLayers.Format.XML解析XML数据的类,继承于OpenLayers.Format类。

参考openlayers/XML example.htm例子。

六、Geometry命名空间:Geometry是对地理学对象的描述,此命名空间下的类都继承了OpenLayers命名空间下的Geometry基类,具体子类描述了各种具体的地理学对象,例如Point、Line、Polygon分别描述了能用点、线、面指代的具体地理学对象。

1、class OpenLayers.Geometry所有具体geometry对象的基类,Geometry命名空间下面的所有类都直接或间接的继承了Geometry类,所有具体能够实例化的类定义了所有geometry对象都应该有的属性和方法。

方法2、class OpenLayers.Geometry.Rectangle矩形几何对象,继承于Geometry基类。

(暂不支持)构造函数属性方法3、class OpenLayers.Geometry.Point点的几何对象,继承于Geometry基类。

4、class OpenLayers.Geometry.Collection该集合类继承了Geometry类。

OpenLayers中的多点、多线线、、面、多面其实是点的集合,继承了该集合类,使其既继承了Geometry的属性和方法,又具备了Collection类的属性和方法。

集合,顾名思义就是一系列Geometry对象的集合,这些Geometry对象存储在集合对象的components属性中,components属性可以作为参数传递给集合的构造函数。

当新的Geometry对象被加入到集合中时并不是加入它的副本。

当从集合中移除Geometry对象需要该集合对象的引用。

集合对象中的getArea()方法和getLength()方法只不过是对集合对象中的所有Geometry对象各自的距离和面积求和。

构造函数5、class OpenLayers.Geometry.MultiPoint多点是点的集合对象,MultiPoint继承于Collection类。

下面的属性和方法只列出重写的部分,其他的请参考父类。

构造函数属性6、class OpenLayers.Geometry.CurveCurve(曲线)类继承于MultiPoint类,它的点被看做是连接的,提供的getLength()方法是相连两点间的距离的累加。

方法7、class OpenLayers.Geometry.LineString线类继承于曲线类,一旦添加了两个点,就不能再少于两个点。

(线至少有两个点)构造函数方法8、class OpenLayers.Geometry.LinearRingLinearRing是特殊的LineString,它是闭合的,当加入一个新的点的时候它会自动的闭合,不用你去与第一个点连接。

相关主题