地理位置
地理位置,API能够定位到设备的一些信息。
地理位置类
flash.events.GeolocationEvent
权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION">
File loaction 是指与GPS的通行,Corase loaction 是指与网络的通信。接下我们将会对这两个概念做详细的介绍。
在开发或者测试的过程中,设置【设置】|【位置和安全】|使用GPS卫星 和 【设置】|【位置和安全】|【使用无线网络】 都为选
中状态。
//判断是否支持定位
import flash.events.GeolocationEvent;
if(Geolocation.isSupported)
//Geolocation.supported
我们写一个简单的应用程序来监听Geolocation 的事件的更新。设置Geolocation为类的实例变量,不是局部变量,以保证我们在使
用他的
时候没有被GC回收。
import flash.events.GeolocationEvent;
private var geolocation:Geolocation;
if(Geolocation.isSupported)
{
geolocation=new Geolocation();
geolocation.addEventListener(GeolocationEvent.UPDATE,onTravel);
}
private function onTravel(event:GeolocationEvent):void
{
trace(event.latitude)
trace(event.longitude)
}
用户可以设置启用与禁用GPS装置,所以应用程序必须检查muted 属性,在初始化程序的时候需要访问该属性,还有一种情况是
在程序运行时监听更新的状态。
import flash.events.StatusEvent;
if(!geolocation.muted)
{
geolocation.addEventListener(StatusEvent.STATUS,onStatusChange);
}
else
{
//inform the user to turn on the location sensor
}
function onStatusChange(event:StatusEvent):void
{
trace("status"+event.code)
if(event.code=="Geolocation.Muted")
{
//inform the user to turn on the location sensor
}
}
GeolocationEvent
GeolocationEvent.UPDATE 事件在第一次创建时就会被触发。如果设备在移动或者其他方式使设备位置发生变化的话,这个事件也
会被触发。
这样刷新的频率会比较快,为了保护电池的寿命,可以通过设置setRequestUpdateInterval ,使刷新的频率降低,因为你的应用程
序本身不需要刷新很快。
Geolocation.setRequestUpdateInterval(10000);
event.latitude event.longitude 表示经纬度
event.horizontalAccuracy event.verticalAccuracy 单位是米
event.timeStamp 是以毫秒为单位,计算从程序初始化到移动的时间。
event.altitude 单位是米,event.speed 单位是米/秒
全球定位系统 和网络
GPS 或者是WIFI 是否打开
flash.net.NetworkInfo 类提供了 在电脑以及设备上的网络接口。权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE">
//检查是否支持
if(NetworkInfo.isSupported)
{
//network information supported
}
NetworkInfo 存储了一些网络接口。
var network:NetwrkInfo=NetworkInfo.networkInfo;
for each(var object:NetworkInterface in network.findInterfaces())
{
trace(object.name);
}
方向地理编码
我们从设备获取的仅仅是经纬度,只有在地图中会比较有用。有一种技术就是反向地理编码,传递过去经纬度,发送过来的是地址
。
查看一下的实例:
权限:
<uses-permission android:name="android.permission.INTERNET"/>
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.GeolocationEvent;
import flash.events.StatusEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
import flash.sensors.Geolocation;
public class ReverseGeo extends Sprite
{
private const YAHOO_URL:String = "http://where.yahooapis.com/geocode";
private const ID:String = "YOUR_ID";
private var _geo:Geolocation;
private var _loader:URLLoader;
public function ReverseGeo()
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
if (Geolocation.isSupported)
{
init();
}
}
private function init():void
{
_geo = new Geolocation();
_geo.addEventListener(GeolocationEvent.UPDATE, onUpdate);
}
private function onUpdate(event:GeolocationEvent):void
{
var request:URLRequest = new URLRequest(YAHOO_URL);
var variables:URLVariables = new URLVariables();
variables.q = event.latitude.toString() + "\n" + event.longitude.toString();
variables.gflags = "R";
variables.appid = ID;
request.data = variables;
request.method = URLRequestMethod.GET;
_loader = new URLLoader();
_loader.addEventListener(Event.COMPLETE, onLocationLoaded);
_loader.addEventListener(IOErrorEvent.IO_ERROR, onError);
_loader.load(request);
}
private function onLocationLoaded(event:Event):void
{
trace("*** event", event);
_loader.removeEventListener(Event.COMPLETE, onLocationLoaded);
_geo.removeEventListener(GeolocationEvent.UPDATE, onUpdate);
var xml:XML = new XML(event.target.data);
trace(xml);
var city:String = xml.Result.city.text();
var country:String = xml.Result.country.text();
trace(city, country);
}
private function onError(event:IOErrorEvent):void
{
trace("*** error", event);
}
}
地图
提供地图服务的有 Google Maps,Yahoo Maps,Bing Maps 等等。
加载google 地图:
<uses-permission android:name="android.permission.INTERNET">
import flash.events.GeolocationEvent;
import flash.net.navigateToURL;
import flash.net.URLRequest;
import flash.sensors.Geolocation;
private function onLocationUpdate(event:GeolocationEvent):void
{
geolocation.removeEventListener(GeolocationEvent.UPDATE,onLocationUpdate);
var long:String=event.longitde.toString();
var lat:String=event.latitude.toString();
navigateToURL(new URLRequest("http://maps.google.com/?q="+lat+","+long));
}
静态地图
静态地图提供了一种比较好的解决方案。在AIR程序中时比较轻量级的显示地图。他是对一个位置的快照,但是不能平移和缩放,但
是可以
根据GPS很快的加载。
Yahoo 静态地图
import flash.display.Loader;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.GeolocationEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.sensors.Geolocation;
public class StaticMap extends Sprite
{
private const YAHOO_URL:String = "http://local.yahooapis.com/MapsService/V1/mapImage";
private const ID:String = "YOUR_ID";
private var _geo:Geolocation;
public function StaticMap()
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
if (Geolocation.isSupported)
{
init();
}
}
private function init():void
{
_geo = new Geolocation();
_geo.addEventListener(GeolocationEvent.UPDATE, onUpdate);
}
// get current latitude and longitude
private function onUpdate(event:GeolocationEvent):void
{
trace("travel", event.latitude, event.longitude);
var request:String = "?app)
{
degree *= -1;
}
return degree;
}
}
速度
结论
地理位置,API能够定位到设备的一些信息。
地理位置类
flash.events.GeolocationEvent
权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION">
File loaction 是指与GPS的通行,Corase loaction 是指与网络的通信。接下我们将会对这两个概念做详细的介绍。
在开发或者测试的过程中,设置【设置】|【位置和安全】|使用GPS卫星 和 【设置】|【位置和安全】|【使用无线网络】 都为选
中状态。
//判断是否支持定位
import flash.events.GeolocationEvent;
if(Geolocation.isSupported)
//Geolocation.supported
我们写一个简单的应用程序来监听Geolocation 的事件的更新。设置Geolocation为类的实例变量,不是局部变量,以保证我们在使
用他的
时候没有被GC回收。
import flash.events.GeolocationEvent;
private var geolocation:Geolocation;
if(Geolocation.isSupported)
{
geolocation=new Geolocation();
geolocation.addEventListener(GeolocationEvent.UPDATE,onTravel);
}
private function onTravel(event:GeolocationEvent):void
{
trace(event.latitude)
trace(event.longitude)
}
用户可以设置启用与禁用GPS装置,所以应用程序必须检查muted 属性,在初始化程序的时候需要访问该属性,还有一种情况是
在程序运行时监听更新的状态。
import flash.events.StatusEvent;
if(!geolocation.muted)
{
geolocation.addEventListener(StatusEvent.STATUS,onStatusChange);
}
else
{
//inform the user to turn on the location sensor
}
function onStatusChange(event:StatusEvent):void
{
trace("status"+event.code)
if(event.code=="Geolocation.Muted")
{
//inform the user to turn on the location sensor
}
}
GeolocationEvent
GeolocationEvent.UPDATE 事件在第一次创建时就会被触发。如果设备在移动或者其他方式使设备位置发生变化的话,这个事件也
会被触发。
这样刷新的频率会比较快,为了保护电池的寿命,可以通过设置setRequestUpdateInterval ,使刷新的频率降低,因为你的应用程
序本身不需要刷新很快。
Geolocation.setRequestUpdateInterval(10000);
event.latitude event.longitude 表示经纬度
event.horizontalAccuracy event.verticalAccuracy 单位是米
event.timeStamp 是以毫秒为单位,计算从程序初始化到移动的时间。
event.altitude 单位是米,event.speed 单位是米/秒
全球定位系统 和网络
GPS 或者是WIFI 是否打开
flash.net.NetworkInfo 类提供了 在电脑以及设备上的网络接口。权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE">
//检查是否支持
if(NetworkInfo.isSupported)
{
//network information supported
}
NetworkInfo 存储了一些网络接口。
var network:NetwrkInfo=NetworkInfo.networkInfo;
for each(var object:NetworkInterface in network.findInterfaces())
{
trace(object.name);
}
方向地理编码
我们从设备获取的仅仅是经纬度,只有在地图中会比较有用。有一种技术就是反向地理编码,传递过去经纬度,发送过来的是地址
。
查看一下的实例:
权限:
<uses-permission android:name="android.permission.INTERNET"/>
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.GeolocationEvent;
import flash.events.StatusEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
import flash.sensors.Geolocation;
public class ReverseGeo extends Sprite
{
private const YAHOO_URL:String = "http://where.yahooapis.com/geocode";
private const ID:String = "YOUR_ID";
private var _geo:Geolocation;
private var _loader:URLLoader;
public function ReverseGeo()
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
if (Geolocation.isSupported)
{
init();
}
}
private function init():void
{
_geo = new Geolocation();
_geo.addEventListener(GeolocationEvent.UPDATE, onUpdate);
}
private function onUpdate(event:GeolocationEvent):void
{
var request:URLRequest = new URLRequest(YAHOO_URL);
var variables:URLVariables = new URLVariables();
variables.q = event.latitude.toString() + "\n" + event.longitude.toString();
variables.gflags = "R";
variables.appid = ID;
request.data = variables;
request.method = URLRequestMethod.GET;
_loader = new URLLoader();
_loader.addEventListener(Event.COMPLETE, onLocationLoaded);
_loader.addEventListener(IOErrorEvent.IO_ERROR, onError);
_loader.load(request);
}
private function onLocationLoaded(event:Event):void
{
trace("*** event", event);
_loader.removeEventListener(Event.COMPLETE, onLocationLoaded);
_geo.removeEventListener(GeolocationEvent.UPDATE, onUpdate);
var xml:XML = new XML(event.target.data);
trace(xml);
var city:String = xml.Result.city.text();
var country:String = xml.Result.country.text();
trace(city, country);
}
private function onError(event:IOErrorEvent):void
{
trace("*** error", event);
}
}
地图
提供地图服务的有 Google Maps,Yahoo Maps,Bing Maps 等等。
加载google 地图:
<uses-permission android:name="android.permission.INTERNET">
import flash.events.GeolocationEvent;
import flash.net.navigateToURL;
import flash.net.URLRequest;
import flash.sensors.Geolocation;
private function onLocationUpdate(event:GeolocationEvent):void
{
geolocation.removeEventListener(GeolocationEvent.UPDATE,onLocationUpdate);
var long:String=event.longitde.toString();
var lat:String=event.latitude.toString();
navigateToURL(new URLRequest("http://maps.google.com/?q="+lat+","+long));
}
静态地图
静态地图提供了一种比较好的解决方案。在AIR程序中时比较轻量级的显示地图。他是对一个位置的快照,但是不能平移和缩放,但
是可以
根据GPS很快的加载。
Yahoo 静态地图
import flash.display.Loader;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.GeolocationEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.sensors.Geolocation;
public class StaticMap extends Sprite
{
private const YAHOO_URL:String = "http://local.yahooapis.com/MapsService/V1/mapImage";
private const ID:String = "YOUR_ID";
private var _geo:Geolocation;
public function StaticMap()
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
if (Geolocation.isSupported)
{
init();
}
}
private function init():void
{
_geo = new Geolocation();
_geo.addEventListener(GeolocationEvent.UPDATE, onUpdate);
}
// get current latitude and longitude
private function onUpdate(event:GeolocationEvent):void
{
trace("travel", event.latitude, event.longitude);
var request:String = "?app)
{
degree *= -1;
}
return degree;
}
}
速度
结论