本例子中将实现利用google map for flex 实现北京内社区和服务中心的个数 ,当点击某个某个分类的时候,实现位置的定位,当鼠标划过坐标的时候,显示先关基本信息,这时候需要map_flex_1_20.swc这个包,
下载地址为:http://code.google.com/intl/zh-CN/apis/maps/documentation/flash/
项目结构图为:
相信大家怎么创建一个flex和java项目 google一下就知道了 这里不讲述了
GoogleMapDemo.mxml 代码如下 ,里面详细的注解
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:maps="com.google.maps.*" creationComplete="{initTree()}">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.ListEvent;
import com.google.maps.styles.FillStyle;
import com.google.maps.styles.StrokeStyle;
import com.google.maps.overlays.MarkerOptions;
import com.google.maps.overlays.Marker;
import com.google.maps.InfoWindowOptions;
import com.google.maps.controls.OverviewMapControlOptions;
import com.google.maps.controls.OverviewMapControl;
import com.google.maps.controls.MapTypeControl;
import com.google.maps.controls.PositionControl;
import com.google.maps.controls.ZoomControl;
import com.google.maps.LatLng;
import com.google.maps.Map;
import com.google.maps.MapEvent;
import com.google.maps.MapMouseEvent;
import com.google.maps.MapType;
//用于初始化地图 里面精度和纬度都是真实 是我在网上查的
private var beijing:ArrayCollection = new ArrayCollection(
[
{lat:39.93,lng:116.41,label:"A",name:"东城区",tip:"东城区:\n 社区:18\n 服务中心:20"},
{lat:39.88,lng:116.42,label:"B",name:"崇文区",tip:"崇文区:\n 社区:18\n 服务中心:29"},
{lat:39.93,lng:116.36,label:"C",name:"西城区",tip:"西城区:\n 社区:17\n 服务中心:45"},
{lat:39.89,lng:116.37,label:"D",name:"宣武区",tip:"宣武区:\n 社区:23\n 服务中心:26"},
{lat:39.93,lng:116.47,label:"E",name:"朝阳区",tip:"朝阳区:\n 社区:21\n 服务中心:28"},
{lat:39.85,lng:116.33,label:"F",name:"丰台区",tip:"丰台区:\n 社区:10\n 服务中心:27"},
{lat:39.9,lng:116.1,label:"G",name:"石景山区",tip:"石景山区:\n 社区:18\n 服务中心:26"},
{lat:39.9,lng:116.3,label:"H",name:"海淀区",tip:"海淀区:\n 社区:18\n 服务中心:24"},
{lat:39.9,lng:116,label:"I",name:"门头沟区",tip:"门头沟区:\n 社区:44\n 服务中心:30"},
{lat:39.72,lng:115.98,label:"J",name:"房山区",tip:"房山区:\n 社区:18\n 服务中心:20"},
{lat:39.85,lng:116.7,label:"K",name:"通州区",tip:"通州区:\n 社区:58\n 服务中心:20"},
{lat:40.13,lng:116.65,label:"L",name:"顺义区",tip:"顺义区:\n 社区:78\n 服务中心:20"},
{lat:40.22,lng:116.2,label:"M",name:"昌平区",tip:"昌平区:\n 社区:28\n 服务中心:20"},
{lat:39.73,lng:116.33,label:"N",name:"大兴区",tip:"大兴区:\n 社区:18\n 服务中心:20"},
{lat:40.32,lng:116.62,label:"O",name:"怀柔区",tip:"怀柔区:\n 社区:18\n 服务中心:20"},
{lat:40.13,lng:117.1,label:"P",name:"平谷区",tip:"平谷区:\n 社区:18\n 服务中心:20"},
{lat:40.37,lng:116.85,label:"Q",name:"密云县",tip:"密云县:\n 社区:18\n 服务中心:20"},
{lat:40.47,lng:115.97,label:"R",name:"延庆县",tip:"延庆县:\n 社区:18\n 服务中心:20"}
]
);
//初始化左边的tree
private function initTree():void{
var treeStr:String = "<root label='北京地区'>";
for each(var area:Object in beijing){
treeStr +="<node label='"+area.label+area.name+"' lat='"+area.lat+"' lng='"+area.lng+"' tip='"+area.tip+"'>" +
"</node>";
}
treeStr +="</root>";
var treeData:XML = new XML(treeStr);
treeId.dataProvider = treeData;
}
private function onMapReady(event:Event):void {//加载地图
//设置地图显示的坐标,以及地图显示的类型.
/**
* MapType有4种类型分别是
HYBRID_MAP_TYPE 混合模式,
NORMAL_MAP_TYPE 标准模式,
PHYSICAL_MAP_TYPE自然地图模式,
SATELLITE_MAP_TYPE卫星模式
-----------------------------------
new LatLng(39.92,116.46)纬度和经度
**/
this.map.setCenter(new LatLng(39.92,116.46), 10, MapType.NORMAL_MAP_TYPE);
/**添加控件开始**/
map.addControl(new ZoomControl);
map.addControl(new PositionControl);
map.addControl(new MapTypeControl);
/**添加控件结束**/
//鼠标滚轮实现地图缩放
map.enableScrollWheelZoom();
map.enableContinuousZoom();
//显示一个地图的缩略图
map.addControl( new OverviewMapControl( new OverviewMapControlOptions()) );
//添加地图显示图标
for each(var area:Object in beijing){
var mark:Marker = new Marker(
new LatLng(area.lat,area.lng),
new MarkerOptions({
strokeStyle: new StrokeStyle({color: 0x987654}),
fillStyle: new FillStyle({color: 0x223344, alpha: 0.8}),
radius: 12,
hasShadow: true,
label:area.label,
tooltip:area.tip
})
);
map.addOverlay(mark);
}
/**
var address:LatLng
= new LatLng(this.map.getCenter().lat(),this.map.getCenter().lng());
map.openInfoWindow(
address,
new InfoWindowOptions({title: "提示", content: "这是北京"})
);
//var mark:Marker = new Marker(new MarkerOptions());
this.map.addEventListener(MapMouseEvent.CLICK,
function(event:MapMouseEvent):void{
map.openInfoWindow(
event.latLng,
new InfoWindowOptions({title: "提示", content: "这是北京"})
);
});**/
}
private function openCanvas(event:ListEvent):void{
var note:Object = event.currentTarget.selectedItem;
//树枝节点 打开下面的子节点,menuTree.dataDescriptor默认返回DefaultDataDescriptor类的实例
//DefaultDataDescriptor。isBranch(note)返回该节点是否包含子节点或者isBranch设置为true都将
//返回true
if(treeId.dataDescriptor.isBranch(note)){
/**打开或关闭分支项目。分支项目打开后,如果它的子项目分支已处于打开状态,
则它将还原它们的打开和关闭状态。如果设置 dataProvider 之后立即调用 expandItem(),
则您可能看不到正确的行为。您应该等待对组件进行验证或调用 validateNow()。
menuTree.isItemOpen(note): 如果指定的项目分支处于打开状态(显示其子项),则返回 true。
* */
treeId.expandItem(note, !treeId.isItemOpen(note), true);
return;
}
//点击的item 转换成(XML)节点
var tempX:XML=XML(note);
change(tempX.attribute("lat"),tempX.attribute("lng"),tempX.attribute("tip"));
}
private function change(lat:Number,lng:Number,tip:String):void{
areaName.text = tip;
this.map.setCenter(new LatLng(lat,lng), 13, MapType.NORMAL_MAP_TYPE);
}
]]>
</mx:Script>
<mx:Panel x="60" y="28" width="1196" height="569" layout="absolute" title="mapDemo" fontSize="12">
<mx:HDividedBox x="5" y="5" width="100%" height="100%">
<mx:Canvas width="274" height="100%">
<mx:Tree height="407" width="266" id="treeId" labelField="@label" itemClick="openCanvas(event)" x="0"></mx:Tree>
<mx:TextArea id="areaName" width="264" height="61" editable="false" y="415" text="这里显示相信信息"/>
</mx:Canvas>
<maps:Map sensor="true" xmlns:maps="com.google.maps.*" id="map" mapevent_mapready="onMapReady(event)" width="70%" height="100%"
key="ABQIAAAABCDVNA4EUPvF9L7VfsWt6RRpgffdUlOOBwaqFsBhQWcsgun-4BRLiJuK-JzW_4RAkt0SeYkzJaOlmA"/>
</mx:HDividedBox>
</mx:Panel>
</mx:Application>
页面结果图为: