2010-07-15

应用Google Map API(Flash版)显示来访者的位置

最近学习强大的Google Map API(Flash版),根据L4cd.net的教程做了个显示访客地理位置的flash。

具体的教程见:

http://blog.l4cd.net/post-show-your-location-in-the-google-map-by-flash.html/comment-page-1#comment-805

这个是flex版本的,如果用纯as3参见作者另一边关于纯as3访问Webservice的方法

讲的很详细,很受益。

纯As3版code

package
{
	import com.google.maps.InfoWindowOptions;
	import com.google.maps.LatLng;
	import com.google.maps.LatLngBounds;
	import com.google.maps.Map;
	import com.google.maps.MapEvent;
	import com.google.maps.MapMouseEvent;
	import com.google.maps.MapType;
	import com.google.maps.overlays.Marker;
	import com.google.maps.services.ClientGeocoder;
	import com.google.maps.services.GeocodingEvent;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.geom.Point;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	/**
	 * ...
	 * @author cuckoo
	 */
	public class GuestLocation extends Sprite
	{
		private var map:Map;
		private var geocoder:ClientGeocoder;
		private var ip:String;
		private var local:String;
		public function GuestLocation()
		{
			map = new Map();
			map.key = "your api key";//申请地址http://code.google.com/intl/zh-CN/apis/maps/signup.html
			map.setSize(new Point(stage.stageWidth, stage.stageHeight));
			map.addEventListener(MapEvent.MAP_READY, onMapReady);
			addChild(map);
		}
 
		private function onMapReady(e:MapEvent):void
		{
			map.enableScrollWheelZoom();
			var xmlList:XMLList;
			var loader:URLLoader = new URLLoader();
			loader.load(new URLRequest("http://webservice.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx/getGeoIPContext"));
			loader.addEventListener(Event.COMPLETE, function(e:Event):void
			{
				xmlList = XML(e.target.data).children();
				ip = xmlList.children()[0];
				local = xmlList.children()[1];
				geocoder = new ClientGeocoder();
				geocoder.addEventListener(GeocodingEvent.GEOCODING_SUCCESS, onSuccess);
				geocoder.addEventListener(GeocodingEvent.GEOCODING_FAILURE, onFailure);
				geocoder.geocode(local);
				trace("loader");
			});
		}
 
		private function onSuccess(e:GeocodingEvent):void
		{
			var placemarks:Array = e.response.placemarks;
			if (placemarks.length > 0)
			{
				map.setCenter(placemarks[0].point, 7, MapType.NORMAL_MAP_TYPE);
				var marker:Marker = new Marker(placemarks[0].point);
				marker.addEventListener(MapMouseEvent.CLICK, function(e:MapMouseEvent):void
				{
					marker.openInfoWindow(new InfoWindowOptions( { title:"欢迎来到cuckoo studio", content:"来自\n" + local + "\n" + ip + "\n的访客" } ));
				});
				map.addOverlay(marker);
				map.openInfoWindow(placemarks[0].point, new InfoWindowOptions( {title:"欢迎来到cuckoo studio",content:"来自\n" + local + "\n" + ip + "\n的访客" } ));
			}
		}
 
		private function onFailure(e:GeocodingEvent):void
		{
			trace("获取地理位置失败");
		}
	}
 
}

见到几个有意思的地图应用

8bitcity,用来做坦克游戏,来个世界大战应该蛮有意思吧

8bitcity New York

8bitcity New York

车行天下,这个使用了Google Map 的3D功能,结合PV3d引擎

bus on earth

bus on map

艾菲尔铁塔

Eiffel

Eiffel

说点啥吧