Чтобы использовать датчик геопозиционирования, создайте экземпляр объекта Geolocation и зарегистрируйте отправляемое им событие
update
. Событие
update
является объектом события Geolocation. Событие имеет восемь свойств:
-
altitude
: высота в метрах.
-
heading
: направление движения (относительно истинного сервера) в градусах.
-
horizontalAccuracy
: точность по горизонтали в метрах.
-
latitude
: широта в градусах.
-
longitude
: долгота в градусах.
-
speed
: скорость в метрах в секунду.
-
timestamp
: число миллисекунд на момент события, начиная с инициализации среды выполнения.
-
verticalAccuracy
: точность нивелирования в метрах.
Свойство
timestamp
является объектом int. Остальные свойства являются объектами Number.
Здесь приводится основной пример отображения данных геопозиционирования в текстовом поле:
var geo:Geolocation;
if (Geolocation.isSupported)
{
geo = new Geolocation();
geo.addEventListener(GeolocationEvent.UPDATE, updateHandler);
}
else
{
geoTextField.text = "Geolocation feature not supported";
}
function updateHandler(event:GeolocationEvent):void
{
geoTextField.text = "latitude: " + event.latitude.toString() + "\n"
+ "longitude: " + event.longitude.toString() + "\n"
+ "altitude: " + event.altitude.toString()
+ "speed: " + event.speed.toString()
+ "heading: " + event.heading.toString()
+ "horizontal accuracy: " + event.horizontalAccuracy.toString()
+ "vertical accuracy: " + event.verticalAccuracy.toString()
}
Чтобы воспользоваться этим примером, перед использованием кода создайте текстовое поле
geoTextField
и добавьте его в список отображения.
Можно настроить необходимый интервал времени для событий геопозиционирования, вызвав метод
setRequestedUpdateInterval()
объекта Geolocation. В этом методе используется один параметр
interval
, который представляет собой запрошенный интервал обновления в миллисекундах:
var geo:Geolocation = new Geolocation();
geo.setRequestedUpdateInterval(10000);
Фактическое время между обновлениями геопозиционирования может быть больше или меньше этого значения. Любое изменение в интервале обновления затрагивает все зарегистрированные прослушиватели. При отсутствии вызова метода
setRequestedUpdateInterval()
приложение получает обновления на основе интервала, заданного в устройстве по умолчанию.
Пользователь может запретить приложению получать доступ к данным геопозиционирования. Например, в устройстве iPhone выводится запрос, когда приложение пытается получить данные геопозиционирования. В ответ на запрос пользователь может запретить приложению доступ к данным геопозиционирования. Объект Geolocation отправляет событие
status
, когда пользователь запрещает доступ к данным геопозиционирования. Кроме того, для свойства
muted
объекта Geolocation устанавливается значение
true
, когда датчик геопозиционирования недоступен. Объект Geolocation отправляет событие
status
при изменении свойства
muted
. Следующий код показывает способ обнаружения отсутствия доступа к данным геопозиционирования:
package
{
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.GeolocationEvent;
import flash.events.MouseEvent;
import flash.events.StatusEvent;
import flash.sensors.Geolocation;
import flash.text.TextField;
import flash.text.TextFormat;
public class GeolocationTest extends Sprite
{
private var geo:Geolocation;
private var log:TextField;
public function GeolocationTest()
{
super();
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
setUpTextField();
if (Geolocation.isSupported)
{
geo = new Geolocation();
if (!geo.muted)
{
geo.addEventListener(GeolocationEvent.UPDATE, geoUpdateHandler);
}
geo.addEventListener(StatusEvent.STATUS, geoStatusHandler);
}
else
{
log.text = "Geolocation not supported";
}
}
public function geoUpdateHandler(event:GeolocationEvent):void
{
log.text = "latitude : " + event.latitude.toString() + "\n";
log.appendText("longitude : " + event.longitude.toString() + "\n");
}
public function geoStatusHandler(event:StatusEvent):void
{
if (geo.muted)
geo.removeEventListener(GeolocationEvent.UPDATE, geoUpdateHandler);
else
geo.addEventListener(GeolocationEvent.UPDATE, geoStatusHandler);
}
private function setUpTextField():void
{
log = new TextField();
var format:TextFormat = new TextFormat("_sans", 24);
log.defaultTextFormat = format;
log.border = true;
log.wordWrap = true;
log.multiline = true;
log.x = 10;
log.y = 10;
log.height = stage.stageHeight - 20;
log.width = stage.stageWidth - 20;
log.addEventListener(MouseEvent.CLICK, clearLog);
addChild(log);
}
private function clearLog(event:MouseEvent):void
{
log.text = "";
}
}
}
Примечание.
Устройства iPhone первого поколения, которые не оснащены блоком GPS, отправляют события
update
только в редких случаях. В этих моделях объект Geolocation может отправлять только одно или два первоначальных события
update
. После этого сообщения
update
отправляются в случае значительного изменения данных.
Проверка наличия поддержки геопозиционирования
Используйте свойство
Geolocation.isSupported
, чтобы проверить наличие поддержки этой функции в среде выполнения:
if (Geolocation.isSupported)
{
// Set up geolocation event listeners and code.
}
В настоящее время геопозиционирование поддерживается только в приложениях на основе ActionScript для iPhone и в пакете Flash Lite 4. Если в среде выполнения свойство
Geolocation.isSupported
принимает значение
true
, то поддержка геопозиционирования существует.
В некоторых моделях iPhone блок GPS не предусмотрен. В этих моделях используются другие средства (например, триангуляция мобильного телефона) для получения данных о географическом расположении. В этих моделях и в любых моделях iPhone с отключенным блоком GPS объект Geolocation может отправлять только одно или два первоначальных события
update
.