уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Использование датчика местоположения (TLocationSensor) в Delphi пр разработке мобильных приложений — это практически «Hello, world» для тех разработчиков, которые решили научиться разрабатывать свои приложения как для Windows, так и для Android и iOS. И, хотя, разработка под мобильные устройства в Delphi не такая уж тривиальная задача, тем не менее, чтение координат положения устройства — это одна из простейших операций. Этот пример показывает вам, как использовать компонент TLocationSensor для чтения местоположения устройства и вывода GPS-координат в режиме реального времени. Также в примере показано, как отображать Карты Google в веб-браузере, чтобы точно определить расположение устройства на реальной карте.

Основная информация по библиотеке
Вкладка палитры компонентов Sensors
Исходник официального примера и документация SourceForge DocWiki
В какой версии Delphi появился Delphi XE4

Компоненты главной формы приложения

Тестовое приложение использует следующие компоненты:

  • TLocationSensor — компонент датчика местоположения
  • TWebBrowser — веб-браузер для вывода карты Google.
  • TListBox — список, содержащий пять элементов TListBoxItems:
    • TListBoxItem1, называемый lbLocationSensor, содержит следующие элементы управления:
      • Компонент TSwitch, называемый swLocationSensorActive
    • TListBoxItem2, называемый lbTriggerDistance, содержит следующие элементы управления:
      • Два TButtons
      • Компонент TNumberBox, называемый nbTriggerDistance.
    • TListBoxItem3, называемый lbAccurancy, содержит следующие элементы управления:
      • Два TButtons.
      • Компонент TNumberBox, называемый nbAcurrancy.
    • TListBoxItem4, называемый lbLatitude.
    • TListBoxItem5, называемый lbLongitude.
    • ToolBar с компонентом TLabel.

Внешний вид главной формы приложения представлен на рисунке ниже:

Главная форма приложения location.PNG

Главная форма приложения location.PNG

Реализация

Изменении значения в поле Trigger Distance осуществляется при кликах по кнопкам «+» и «-«. При этом, обработчики кнопок выглядят элементарно:

procedure TLocationForm.Button1Click(Sender: TObject);
begin
  nbTriggerDistance.Value := nbTriggerDistance.Value - 1;
end;
 
procedure TLocationForm.Button2Click(Sender: TObject);
begin
  nbTriggerDistance.Value := nbTriggerDistance.Value + 1;
end;

При этом, когда происходит изменение в поле nbTriggerDistance (компонент TNumberBox), то срабатывает следующее событие:

procedure TLocationForm.nbTriggerDistanceChange(Sender: TObject);
begin
  { set the triggering distance }
  LocationSensor1.Distance := nbTriggerDistance.Value;
end;

Свойство Distance компонента TLocationSensor — это минимальное расстояние, которое требуется датчику местоположения для запуска обновления данных местоположения. Датчик местоположения может отслеживать изменения местоположения и запускать OnLocationChanged каждый раз, когда происходит изменение местоположения. Если вы можете установить параметр LocationChange в значение LocationThangeType.lctSmall, которое указывает на то, что для запуска события OnLocationChanged не требуется значительных изменений местоположения. Также вы можете использовать Distance, чтобы указать горизонтальное расстояние в метрах от текущего местоположения, которое достаточно для запуска OnLocationChanged. Например, если Distance равен 2.5, то после вызова OnLocationChanged в точке A, OnLocationChanged не запускается снова, пока устройство, работающее с вашим приложением, не переместится на две с половиной метра (или больше) от точки A.

Аналогичным образом устроена работа и для поля Accuracy. События OnClick на кнопках:

procedure TLocationForm.Button3Click(Sender: TObject);
begin
  nbAccuracy.Value := nbAccuracy.Value - 1;
end;
 
procedure TLocationForm.Button4Click(Sender: TObject);
begin
  nbAccuracy.Value := nbAccuracy.Value + 1;
end;

Событие при изменении значения в поле nbAcurrancy:

procedure TLocationForm.nbAccuracyChange(Sender: TObject);
begin
  { set the precision }
  LocationSensor1.Accuracy := nbAccuracy.Value;
end;

Уровень точности (в метрах) данных географического местоположения, предоставляемых датчиком местоположения. Устройство, на котором работает ваше приложение, не может быть дальше указанного количества метров от географического местоположения, указанного датчиком местоположения. Вы можете изменить это значение, чтобы указать желаемую точность в метрах. Датчики делают все возможное, чтобы достичь требуемой точности, но фактическая точность не гарантируется. Вы должны указать минимальную точность, которая работает для вашего приложения; чем выше точность, тем больше времени и мощности требуется датчику для определения местоположения. Если точность неизвестна или не поддерживается, ее значение равно NaN.
Основная работа приложения продемонстрирована в примере в обработчике события OnLocationChanged компонента TLocationSensor — именно здесь происходит вывод текущих координат (Широта и долгота в GPS) и загрузка в TWebBrowser карты Google:

procedure TLocationForm.LocationSensor1LocationChanged(Sender: TObject;
  const OldLocation, NewLocation: TLocationCoord2D);
const
  LGoogleMapsURL: String = 'https://maps.google.com/maps?q=%s,%s';
var
  ENUSLat, ENUSLong: String; // holders for URL strings
begin
  ENUSLat := NewLocation.Latitude.ToString(ffGeneral, 5, 2, TFormatSettings.Create('en-US'));
  ENUSLong := NewLocation.Longitude.ToString(ffGeneral, 5, 2, TFormatSettings.Create('en-US'));
  { convert the location to latitude and longitude }
  lbLatitude.Text := 'Latitude: ' + ENUSLat;
  lbLongitude.Text := 'Longitude: ' + ENUSLong;
 
  { and track the location via Google Maps }
  WebBrowser1.Navigate(Format(LGoogleMapsURL, [ENUSLat, ENUSLong]));
end;

Описанный выше пример Delphi для работы с датчиком местоположения TLocationSensor раскрывает основы определения положения вашего устройства. Немного более подробные примеры по определению местоположения в Delphi Вы можете узнать из этой статьи блога WebDelphi.

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
5 2 голоса
Рейтинг статьи
Подписаться
Уведомить о
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии