摘自http://blog.chinaunix.net/uid-7450016-id-2625954.html
Google Maps API 除了提供能被 Ajax 应用程序调用的 JavaScript 接口之外,还提供了能被 Flash 应用程序调用的 Flex 语言接口。本文就将介绍如何用 Google Maps API for Flash 来开发基于 Flash 的地图应用程序。
Flex 是 Abode 公司贡献的一个开源框架,用于快速构建和维护高度交互并具有丰富表现力的互联网应用( Rich Internet Application )。这些 RIA 应用程序既可以通过 Adobe Flash Player 部署在所有主流的浏览器上,也可以通过 AIR(Adobe Integrated Runtime) 部署在所有主流操作系统的桌面上。
一个 Flex 应用程序通常有 ActionScript 和 MXML 两种代码组成。ActionScript 是一种面向对象的脚本语言,符合 ECMAScript 标准,用于实现 Flex 应用程序的逻辑;MXML 是一种类似于 HTML 和 XML 的标记语言,用于构建 Flex 应用程序的用户界面。Flex 应用程序最终需要被编译成 SWF 文件以运行在 Adobe Flash Player 或 AIR 上。
本文并不详细讲述 MXML 和 ActionScript 的语法,如想了解这两种语言的用法,可以查看 参考资源 中的相关教程。
|
|
Google Maps API for Flash 使得 Flex 开发人员能够把 Google Map 嵌入到 Flex 应用程序中。该 API 提供了很多实用的工具用来操控 Google Map。利用该 API,您可以处理地图事件、添加地图控件、在地图上添加标记、或者在地图上面画线,也可以利用 Geocoding 将地址转换成经纬度数据。笔者写作期间 Google Maps API for Flash 还不支持 AIR 环境,只能在 Flash Player 里运行。
|
|
开发 Flex应用程序,您需要安装 Flex SDK或者Flex Builder。前者是开源软件,没有提供 IDE 界面,您需要使用命令行来编译MXML 和 AcitionScript代码;后者是基于 Eclipse 的一个 Flex IDE,提供了诸如代码提示、自动完成、Flex 应用程序调试等很多方便的功能。本文将以 Flex Builder 为例,介绍如何搭建 Flex 开发环境以开发 Google 地图应用程序。
首先您需要到 Google 站点 上申请一个免费的 Google Maps API key。它会提示您输入“My web site URL”,为了本机测试,我们输入本机地址“http://127.0.0.1”,然后点击确认按钮之后就会看到申请的 key 了。注意如果希望您的地图应用程序能在您自己的网站上运行,需要填写真正的网站域名。
下载 Google Maps API for Flash SDK
去 Google 站点 下载 Google Maps API for Flash SDK 到本地硬盘并解压。解压后在 lib 目录下会有两个 swc 文件,这些 swc 文件包含开发 Google Maps API for Flash 应用程序要用到的所有 ActionScript 类。在用 Flex 开发 Google 地图应用程序时,必须把后缀为 _flex 的 swc 文件加到项目的 Library path 中。
假定您已经有了 Flex Builder(可以从 Adobe 网站 下载 Flex Builder 试用版)。打开 Flex Builder,创建一个新的 Flex 工程。由于目前 Google Maps API for Flash 还不支持 AIR,所以应用类型选择为 Web Application。创建完 Flex 工程后,右键点击这个工程,在弹出菜单中选择 Properties。在 Properties 窗口中选择 Flex Build Path,再选择 Library path, 在此点击 Add SWC 按钮选择前面解压后得到的 map_flex_*.swc 文件即可,如图 1 所示。
到此,环境就准备好了,接下来就可以动手用 Flex Builder 开发 Google 地图应用程序了。
|
|
在 Flex 应用程序中使用 Google Maps API for Flash
下面介绍用 Google Maps API for Flash 开发一个 Hello World 应用程序。在上面建好的 Flex 工程中创建一个 MXML Application,命名为 SimpleMAP。把清单 1 所示的代码加到 SimpleMAP 中,作为 <mx:application> 的子节点,另外还需要将 key 值替换为您申请到的 key。<maps:Map> 声明了一个 Google 地图对象,ActionScript 代码可以用它的id引用这个地图对象。
<maps:Map xmlns:maps="com.google.maps.*" id="map" mapevent_mapready="onMapReady(event)" width="100%" height="100%" key=" ABQIAAAAEUQL_IqwWX4ZOcEtw0r7whRi_j0U6kJrkFvY4-OX2XYmEAa76BQc0gZPMJROw3owe9BMoRHM0FER_A" /> |
这个地图对象初始化的时候会调用 onMapReady()
方法,在该方法中设置地图的坐标和类型,如清单 2 所示。
private function onMapReady(event:MapEvent):void { //设置地图显示的坐标,以及地图显示的类型. //MapType有4种类型分别是 //HYBRID_MAP_TYPE 混合模式, //NORMAL_MAP_TYPE 标准模式, //PHYSICAL_MAP_TYPE自然地图模式, //SATELLITE_MAP_TYPE卫星模式 this.map.setCenter( new LatLng(39.92,116.46)/*经纬度*/, 14, MapType.NORMAL_MAP_TYPE); } |
查看 SimpleMAP.mxml 的完整代码,请到 代码下载 部分下载示例代码 source.zip。编写好 SimpleMAP 后,右键点击该文件,选择 Run as>Flex application,运行结果如图 2 所示。
图 2. Flex 开发的第一个 Google 地图应用程序
|
|
进一步介绍 Google Maps API for Flash
上面仅仅是一个非常简单的 Hello World 应用程序,用到了 Google Maps API for Flash 的一些基本功能,下面将进一步介绍 Google Maps API for Flash 的其它高级功能。
您可以修改上面的 onMapReady
方法,在地图上添加一些控件用于缩放、移动、切换地图类型以及显示一个地图缩略图。代码如清单 3 所示。
... //显示一个方向的按钮,用来移动地图 map.addControl( new PositionControl( new PositionControlOptions())); //显示一个地图的缩略图 map.addControl( new OverviewMapControl( new OverviewMapControlOptions() ) ); //显示一个刻度条用来放大和缩小地图 map.addControl( new ZoomControl( new ZoomControlOptions() ) ); //在地图上显示地图的4种类型,可以随意切换 map.addControl( new MapTypeControl( new MapTypeControlOptions() ) ); ... |
运行后,如图 3 所示,在左边添加了一个按照刻度来缩放地图的控件,在右上角增加了地图类型切换的控件,在右下角显示了地图的缩略图。
通过刻度条来缩放地图不是很方便,Google MAP API 提供了鼠标滚轮缩放地图的功能,在 onMapReady
方法里添加清单4所示代码,就可以实现鼠标滚轮缩放地图。
... map.enableScrollWheelZoom(); map.enableContinuousZoom(); ... |
完整的代码请查看 代码下载 部分 source.zip 中的 SimpleMAP2.mxml。
您可以用 map 对象的 openInfoWindow
方法将一个信息窗口显示在地图上面,代码如清单 5 所示。
var address:LatLng = new LatLng(this.getCenter().lat(),this.getCenter().lng()); map.openInfoWindow( address, new InfoWindowOptions({title: "Hello", content: "这是我在丹东的家"}) ); |
InfoWindowOptions
对象为消息窗口提供了一些参数来确定消息窗口的内容和格式。如 title 是消息窗口的标题,content 为消息窗体的内容。如果希望标题显示为 html ,可以设置 titleHTML 参数。如果想改变 title 的格式可以通过改变 titleFormat 来实现,窗体的内容也可以设置 contentHTML、contentFormat 参数。清单 5 的代码运行后如图 4 所示。
如果您觉得该方法提供的消息窗口不够漂亮,也可以自定义消息窗口。这需要你创建一个继承 Sprite 类的 ActionScript 类,完整代码请查看 代码下载 部分 source.zip 中的 MyInfoWindowSprite.as,清单 6 的代码演示了如何调用自定义的消息窗口。
var customContent:MyInfoWindowSprite = new MyInfoWindowSprite(); var options:InfoWindowOptions = new InfoWindowOptions({customContent: customContent}); //将窗体实例赋给 InfoWindowOptions 类 marker.addEventListener(MapMouseEvent.CLICK, function (event:MapMouseEvent):void { //通过 marker 弹出自定义窗体 marker.openInfoWindow(options); |
自定义的消息窗口的效果如图5所示。
Polyline
类的作用是在地图上划线,您只需要将坐标数组传给 Polyline,再将 Polyline 添加到地图中即可,线段将根据坐标数组的位置数据连接起来显示在地图上. 清单7的代码演示了如何在地图上画直线。完整代码请查看 代码下载 部分 source.zip 中的 SimpleMAP3.MXML。
map.addEventListener(MapMouseEvent.MOUSE_DOWN, function(e:MapMouseEvent):void { //定义一个标志, //true 表明鼠标点击的坐标是直线的起始点, //false 表明鼠标点击的坐标是直线结束点 if (this.isStartPoint == undefined){ this.isStartPoint = true; } if(this.isStartPoint){ this.startLatLng = e.latLng; }else{ this.endLatLng = e.latLng; //先声明一个数组,用于存放坐标数据 var array:Array = new Array(); //将坐标添加到数组里面 array.push(this.startLatLng,this.endLatLng); //声明线条的样式, //Color 是线条的颜色, //alpha 是线条的透明度, //thickness 是线条的宽度 var strokeStyle:StrokeStyle = new StrokeStyle({color:0xFF0000,alpha: 0.1,thickness:5}); var polylineOption:PolylineOptions = new PolylineOptions({strokeStyle:strokeStyle}); //声明Polyline var polyline:Polyline = new Polyline(array,polylineOption); //添加 Polyline 到 map 对象里 map.addOverlay(polyline); } this.isStartPoint = ! this.isStartPoint; }); |
运行后,在地图上用鼠标点击两个不同的点,这两点之间就会画上一条直线。多次点击两个不同的点,可以画折线,如图 6 所示。
|
编写 Flex 地图应用程序时,定位 Google 地图的中心位置, 在地图上放置 marker 都需要事先知道位置的经纬度数据。这对用户并不方便,我们习惯用的是地址,能记住的也是地址,而不是经纬度数据。如何解决这个问题呢,Google Maps API for Flash 提供了将地址转换为经纬度的 API — ClientGeocoder。
ClientGeocoder 要求与 Google server 进行异步通信以得到地址的经纬度数据。用 ClientGeocoder 编程需要按顺序执行下面三个步骤:
- 创建 ClientGeocoder 对象的实例。ClientGeocoder 支持多个国家的地址转换,如果要转换中国的地址,创建 ClientGeocode 对象实例的时候,加上参数 "CN" 即可;
- 注册 ClientGeocoder 实例的事件监听器。有两个事件:
GEOCODING_SUCCESS
和GEOCODING_FAILURE
。 前者表示地址转换成功,GeocodingEvent 将返回转换后的经纬度数据;后者表示地址转换失败,GeocodingEvent 将返回错误代码; - 调用
ClientGeocoder.geocode()
方法发起地址转换的请求到 Google Server。
清单 8 演示了如何用 ClientGeocoder 进行编程,如果地址转换成功将在地图上创建一个 Marker,如果地址转换失败则弹出提示窗口。
清单 8. 使用 ClientGeocoder 进行地址到经纬度的转换
//先创建ClientGeocoder实例 var geocoder:ClientGeocoder = new ClientGeocoder("CN"); //注册地址转换成功事件的listener geocoder.addEventListener( GeocodingEvent.GEOCODING_SUCCESS,geocodingSuccess); //注册地址转换失败事件的listener geocoder.addEventListener( GeocodingEvent.GEOCODING_FAILURE,geocodingFailure); //发送地址转换请求 geocoder.geocode(address); private function geocodingSuccess(event:GeocodingEvent):void { trace(event.response.placemarks[0].address); var placemarks:Array = event.response.placemarks; if (placemarks.length > 0) { //得到返回数组的第一个对象,也就是转换后的经纬度数据 var placemark:Object = placemarks[0]; //设置地图中心坐标 this.setCenter(placemark.point); createMarker( placemark.point,event.response.placemarks[0].address); } } private function createMarker(point:LatLng,city:String):void { //创建 marker 对象,draggable: true 表示可以在地图上拖动 marker = new Marker(point, new MarkerOptions({draggable: true})); var customContent:MyInfoWindowSprite = new MyInfoWindowSprite(); customContent.addEventListener("close", function(event:Event):void { marker.closeInfoWindow(); }); this.addOverlay(marker); } private function geocodingFailure(event:GeocodingEvent):void { Alert.show("Conversion fails"); } |
|
|
有了 Google Maps API Flash, Flex 开发人员就可以像 JavaScript 开发人员一样将 Google Map 嵌入到 Web 应用程序中,不同的是 JavaScript 开发人员用的是 Google Maps API for JavaScript 版本,Flex 开发人员用的是 Google Maps API for Flash 版本。
本文仅代表作者本人观点,不代表 IBM 公司观点。
|
|
source.zip | 7 KB | HTTP |
关于下载方法的信息 |
学习
- 访问 Flex 的官方网站:获取 Flex 最新信息。
- 访问 Google Maps API for Flash 的官方网站:获取最新信息。
- 访问 ActionScript 技术中心:获取 ActionScript 的知识。
- “Web 2.0 用户界面技术”(developerWorks,2007 年 2 月):本文要讨论一系列 Web 2.0 用户界面技术,让您构建的应用程序具有比浏览器更好的用户体验。
- “Flex 开发入门”(developerWorks,2009 年 1 月):本文介绍 Flex 开发的基础知识:包括如何搭建开发环境,如何调试,以及如何建立和部署简单的 Flex 项目。
- “使用 Flex SDK 实现一个 Facebook 相册”(developerWorks,2008 年 12 月):本篇教程将在 Adobe Flex 中开发一个 Facebook 应用程序,它可以以幻灯片的形式显示用户的 Facebook 相册。
- “ActionScript 3.0 闪亮登场!”(developerWorks,2007 年 4 月):ActionScript 3.0 是一种强大的面向对象编程语言,它标志着 Flash Player Runtime 演化过程中的一个重要阶段。
- “解决 Google 地图编程内的中文地名翻译问题”(developerWorks,2009 年 1 月):最新的 Google Maps API 版本不太擅长解析中文地名,非常不便于中国用户在其应用程序中使用。在本篇文章中,我们给出了一个可行的解决方案,再加上其他的一些 Web 服务,就能用目前的这个 Google Maps API 解析中文地名。
- 通过 developerWorks Web 开发专区 内有关 Web 技术的文章和教程(包括本专栏之前的各期文章)扩展您的站点开发技能。
获得产品和技术
- 从 Adobe 网站下载最新的 Flex SDK。
- 从 Adobe 网站下载 Flex Builder 的试用版。
- 从 Google API 网站获得最新的 Google Maps API for Flash SDK。
-
IBM 试用软件:使用这些可直接从 developerWorks 下载的软件构建您的下一个开发项目。
讨论
- 通过参与 developerWorks blog 加入 developerWorks 社区。
相关推荐
3. **集成地图组件**:在Flex项目中,你需要创建一个GoogleMap组件,这通常涉及到导入Google Maps API库,并在MXML代码中定义组件实例。 4. **地图事件处理**:使用ActionScript编写事件监听器,以便用户与地图交互...
本篇文章将深入探讨如何使用Flex来实现Google Map功能。 首先,`lib`目录可能包含Flex SDK和Google Maps for Flex的相关库文件。在Flex中,我们需要引入这些库才能访问和操作Google Maps API。Google Maps for Flex...
总结,`flex Google Map API`的结合使用,为开发者提供了丰富的工具,以创建具有强大地图功能的富互联网应用。通过深入理解这两个技术,开发者可以构建出高效、交互性强且富有创新的地理位置应用。`GoogleMapSample`...
Flex版Google Map API是Google为Adobe Flex开发者提供的接口,它允许开发者在Flex应用程序中集成Google Maps服务,提供交互式的地图体验。Flex是一种基于ActionScript 3.0的开放源代码框架,用于构建富互联网应用...
Flex Google Map桌面地图应用程序是一款基于Adobe Flex技术构建的软件,用于在个人计算机上展示和操作Google Maps服务。Flex是Adobe开发的一种开源的富互联网应用程序(RIA)框架,它允许开发者创建具有高度交互性和...
本项目“googleMap-Flex”聚焦于使用Google Map API在Flex环境中实现这一功能,Flex是一个用于构建富互联网应用(RIA)的开源框架,基于Adobe AIR和Flash Player运行时。 在Flex中使用Google Map API,首先需要获取...
别人写的一个Map类 ,用着还可以 适合 flex新手学习
通过阅读这个文件,初学者可以了解这些flex实例的背景和目标,以及如何将它们应用到自己的学习过程中。 CairngormStore这个名字暗示了这个实例可能与Cairngorm框架有关,Cairngorm是Flex中一个著名的MVC(模型-视图...
8. **调试与优化**:源代码实例还可以帮助你学习如何调试Flex应用,找出并修复代码中的错误,同时了解如何优化性能,比如减少内存消耗和提升渲染速度。 9. **集成开发环境(IDE)**:Flex通常与Flash Builder或...
该库以其高效和可扩展性著称,适合开发类似Google Map的交互式地图应用。** ### 一、Flex技术简介 Flex是Adobe公司推出的一种基于MXML和ActionScript的开放源代码框架,主要用于构建富互联网应用程序(RIAs)。它...
Flex 4 是 Adobe 开发的一个开源框架,专用于构建富网络应用(Rich Internet Applications, RIA),这些应用能够在 Adobe Flash Player 或 Adobe AIR 运行时环境中运行,支持跨浏览器、跨桌面和跨操作系统。Flex 4 ...
这个“Flex应用实例 - Flex做的旅游系统”是一个很好的学习资源,它展示了Flex在实际项目中的应用,特别是对于旅游行业的信息化管理。 在旅游系统中,Flex的主要优势在于其强大的数据可视化和用户交互能力。以下是...
在本"Flex在Web中的应用实例"中,我们将深入探讨Flex如何在Web环境中实现动态、响应式的用户界面。 一、Flex的基础概念 Flex是一个开源的开发框架,主要由MXML和ActionScript两部分组成。MXML是一种标记语言,用于...
GoogleMap for Flex是一款专为Adobe Flex开发者设计的库,它允许开发人员在Flex应用程序中集成和操作Google Maps服务。这个库提供了丰富的API,使得在Flex环境中创建交互式地图应用变得轻而易举。本文将深入探讨其...
开发者通过学习并实践网上的GoogleMap教程,创建了这个项目,以便于理解和掌握如何在Flex环境中集成和操作谷歌地图API。 首先,我们来看看Flex3是如何与谷歌地图API结合的。谷歌地图API提供了JavaScript版本和Flash...
在本压缩包"Flex实例 Flex基础 Web+Flex+LCDS Flex跟Java交互"中,我们可以深入探讨Flex的基础知识、Web与Flex的集成、LCDS的使用以及Flex如何与Java进行数据交互。 1. **Flex基础**:Flex提供了一整套组件库,包括...
Flex实例股票交易系统是一个基于Adobe Flex技术开发的交互式金融应用,主要面向开发者和学习者,提供了一套完整的股票交易平台的实例,以便于理解和实践Web前端的金融数据展示和交易功能。Flex是一种强大的富互联网...
通过学习这个"Flex+Hibernate实例",开发者可以深入理解如何在Flex应用中集成后端数据库服务,提升Web应用的交互性和数据处理能力。这个实例对于想在RIA领域深入发展的开发者来说,无疑是一份宝贵的参考资料。