`
stulpnn
  • 浏览: 68242 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

OpenScales实现的思想

阅读更多
OpenScales实现的思想:
先画一下大概的体系结构图:

下面先说一下OpenScales的大体实现思想,OpenScales将各种GIS上的类,如map,layer,bounds,control,handler都再封装一下,封装后的类继承自Group或者UIComponent,然后持有封装前的类作为属性。例如:FxBounds是对Bounds的封装,FxBounds继承自UIComponent,然后有一个属性是Bounds。这样的好处就使继承自UIComponent后可以直接写在MXML标签中,而且访问其bounds属性可以得到值。所以我们看到的主页面就是这样一种情况:
<fx1:FxMap id="fxmap" height="100%" width="100%" proxy="http://openscales.org/proxy.php?url=">
<fx1:FxMaxExtent west="5.60075" south="47.2441" east="15.425" north="55.0317" projection="EPSG:4326" />
<layer:FxWMS name="Germany" url="http://wms.wheregroup.com/cgi-bin/mapserv?map=/data/umn/germany/germany.map"
layers="Germany" format="image/jpeg" />
<fx1:FxExtent west="5.60075" south="47.2441" east="15.425" north="55.0317" projection="EPSG:4326" />
<mouse:FxDragHandler/>
<mouse:FxWheelHandler/>
<control:PanZoom x="10" y="10"/>
</fx1:FxMap>
application下加入FxMap(继承自Group),然后将layer,extent,control甚至handler(当然都是封装后的,例如layer封装成FxLayer)一股脑的以child的形式加入到FxMap中。不仅构建方便而且一目了然。
下面分析一下这些组件以child加入FxMap后如何发挥作用。这里最重要的代码就是FxMap的onCreationComplete函数,当FxMap和各种它的child都初始化完之后,将执行onCreationComplete函数,这个函数做了以下几件事:
1.初始化map,然后加入到FxMap里
this._map = new Map(this.width, this.height);
var mapContainer:SpriteVisualElement = new SpriteVisualElement();
this.addElementAt(mapContainer, 0);
mapContainer.addChild(this._map);
2.遍历FxMap的child,如果child的类型是:FxMaxExtent,则将FxMaxExtent的bounds属性赋给map的maxExtent属性。
this._map.maxExtent = (element as FxMaxExtent).bounds;
3.再次遍历FxMap的child,如果child的类型是:
 FxLayer,则执行FxMap.addFxLayer,进而执行map.addLayer()。这也是最重要最复杂的一块,在后面详细讲
 FxControl,则执行FxMap.map.addControl()
 IControl,则执行FxMap.map.addControl(),
后两者的区别暂时还没研究
for(i=0; i<this.numElements; i++) {
element = this.getElementAt(i);
if (element is FxLayer) {
this.addFxLayer(element as FxLayer);
} else if (element is FxControl) {
this._map.addControl((element as FxControl).control);
} else if (element is IControl) {
this._map.addControl(element as IControl, false);
}
}
4.再遍历,如果是FXAbstractSecurity,将security和map,layer联系上,说明security也可以像layer、control什么的都以mxml标签的形式加入到FxMap里。使用起来很方便。
5.接下来的重要代码是:
if (mapCenter || (! isNaN(this._zoom))) {
this._map.moveTo(mapCenter, this._zoom);
}
说它重要是因为,显示图层的代码就在map.moveTo里。
加载第一个图层时执行完map.addlayer后就已经显示出来了,因为第一个图层被设置为baselayer,在setbaselayer函数中有map.moveTo,所以显示了出来。
而如果在FxMap中加了两个图层,第二个图层在执行map.addlayer时并不会显示,到上面的代码部分才会显示出来。
6.再次遍历,若果child中有FxExtent,则将map缩放到定义的FxExtent。
for(i=0; (!extentDefined) && (i<this.numElements); i++) {
element = this.getElementAt(i);
if (element is FxExtent) {
this._map.zoomToExtent((element as FxExtent).bounds);
extentDefined = true;
}
}
7.前面layer,extent,control都和map有上联系了,可是handler还没联系上,所以最后,调用setMapRecursively(this)。这个函数的作用就是,将FxMap下的child和child的child如果是control或者handler的都和map联系起来。这里就明白了为什么FxHandler以标签的形式加入到FxMap里就能体现它的功能。
  • 大小: 7.4 KB
分享到:
评论

相关推荐

    OpenScales图层控制 DataGrid checkBox

    在本篇内容中,我们将探讨如何使用 **OpenScales** 实现图层控制功能,并通过 **DataGrid** 显示图层信息。 **图层控制** 是GIS应用中的一个关键特性,允许用户管理地图上可见的不同图层。这包括添加、删除、调整...

    openscales简介

    ### OpenScales简介 OpenScales是一款开源的地图前端...无论是初学者还是有经验的开发人员都能从中受益,实现复杂的功能和美观的视觉效果。随着社区的不断壮大和发展,OpenScales将在未来提供更多功能和更好的支持。

    OpenScales学习

    OpenScales的核心思想在于对GIS概念的封装与抽象。框架将地图、图层、边界、控制组件和事件处理器等GIS概念封装为可直接在MXML中使用的组件,并通过继承UIComponent或Group类来实现。这种设计简化了GIS应用的开发...

    openscales-openscales

    5. **自定义和扩展**:OpenScales的灵活性体现在其高度可定制性,开发者可以根据需求扩展或修改默认功能,例如自定义地图标记图标、创建新的图层类型、或者实现特定的地理分析算法。 6. **与其他技术的整合**:在...

    openscales 示例

    "openscales 示例"是一个关于OpenScales库的实践项目,旨在帮助开发者更好地理解和应用这个库。OpenScales是一个开源的GIS(地理信息系统)框架,它提供了在多种平台和环境中处理地图和地理数据的能力。这个压缩包...

    OpenScales访问GeoWebCache的切片

    这是通过在OpenScales项目中添加一个名为`GeoWebCacheTileCache`的新类实现的,这个类继承自`Tile.Grid`。通过创建这个扩展类,OpenScales客户端应用能够向GeoWebCache请求预生成的地图切片,而不是实时渲染地图图像...

    Openscales 入门

    "Openscales 入门"是关于开源数据可视化和分析库Openscales的基础教程。这个库主要设计用于帮助开发者和数据科学家更便捷地在Web应用中展示和操作大规模数据集。通过学习 Openscales,你可以掌握如何在网页上创建...

    OpenScales开发工具包

    OpenScales是一个优秀的前台地图框架,开发者可以用来开发各种网络版、手机版和桌面版的地图程序。 她是基于ActionSctip 3 和 Flex写的,能够支持各种标准的地图服务,比如WMS、WFS、TMS、OSM等。 她是开源的、免费...

    openscales 自定义工具包括放大缩小等

    当我们谈到“openscales 自定义工具包括放大缩小等”时,这意味着我们可能在探讨如何利用openscales的功能来实现地图的交互操作,特别是如何通过自定义方法来增加缩放功能。 在openscales中,虽然默认的API可能没有...

    openscales-1.2-beta3 官方开发文档

    openscales 目前最新开发开源包 附有事例 1.2-beta3

    OpenScales代码结构分析

    通过对OpenScales的代码结构进行分析,我们可以更好地理解其设计理念和实现机制。 basetypes:自定义基础数据类型 basetypes是OpenScales代码结构中的一部分,负责定义基础数据类型。这些数据类型是 GIS 应用程序...

    openscales 拉框缩放地图

    本文将深入探讨OpenScales如何实现地图的拉框缩放操作,以及其背后的原理和技术细节。 OpenScales库的核心是其灵活的架构,它允许用户自定义地图数据源、渲染方式和交互行为。在地图拉框缩放功能上,OpenScales通过...

    openscales开发工具包

    4. 层级管理:OpenScales支持多层地图管理,可以轻松地叠加不同数据层,实现地图的分层展示和交互。 5. 可扩展性:通过插件机制,开发者可以轻松扩展其功能,满足特定项目需求。 二、应用场景 1. Web GIS应用:...

    openscales 参考示例工程

    **OpenScales参考示例工程详解** OpenScales是一个开源的JavaScript库,它为Web应用程序提供了强大的地图功能。这个库特别适用于那些希望在网站或应用中集成交互式地图的开发者。OpenScales支持多种地图服务提供商...

    openscales学习笔记8.24

    4. **用户交互**:通过JavaScript API,开发者可以实现地图的缩放、平移、标记添加、热点区域等交互功能。 5. **地图叠加层管理**:OpenScales允许在地图上叠加不同类型的图层,如卫星图层、地形图层、矢量图层等,...

    OpenScales添加导航工具条 OpenScaleViewer (源码案例)

    参照openscales已有的一些Handler,自己写了一个Navigation,用来实现地图的放大、缩小、漫游、全屏显示、前后视图等功能,来完善openscales地图的基本操作。 大概的思路是,参照ZoomBoxHandler,写一个...

    OpenScales2.2 Map.as

    OpenScales2.2 Map.as 适用于OpenScales移动项目

    openscales-1.1.4 (源码 案例)

    openScale 的自我介绍中,就提到 openLayer ,感觉真的和网上说的一样: openScale 是 对openLayer 的AS 翻译。 openLayer 相当牛逼,个人觉得……与 google map 的JS版对比。openLayer 将我所能想到的地图操作都加...

    flex openscales 绘制热度图

    标题提到的"flex openscales 绘制热度图"是指使用OpenScales库在Flex应用中实现热度图的绘制。热度图,也称为热力图或密度图,是一种通过颜色深浅来表示数据分布密度或者强度的图形表示方式,常用于数据分析和地理...

    OpenScales基本功能事例

    OpenScales是一个开源的GIS(地理信息系统)库,它允许开发者在Flex或ActionScript项目中轻松地集成地图功能。在这个基本功能事例中,我们将深入探讨如何使用OpenScales库创建一个包含多个关键组件的地图应用。 ...

Global site tag (gtag.js) - Google Analytics