Перейти к содержанию
Fire Monkey от А до Я
  • 0

TLocationSensor - GPS трекер


Вопрос

  • Модераторы

Здравствуйте!

 

Вот начал разбираться с TLocationSensor, хочу сделать трекер для себя

И вот с чем столкнулся.

 

Разъясните пжлста суть этих значении

Accuracy - точность, с этим понятно

Distance - дистанция между срабатыванием OnLocationChanged?

Optimize - оптимизация чего?

 

Они как-то влияют на событие

OnLocationChanged(Sender: TObject;  const OldLocation, NewLocation: TLocationCoord2D);

Есть ли у них минимальные и максимальные значения?

 

Я так понимаю компоненту неважно откуда идут данные AGPS\ГЛОНАСС\GPS?

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

пока gps сырой, я столкнулся с тем что нельзя определить когда есть сигнал от gps когда нет. то есть нет события пропажи и появления сигнала. есть событие только изменения координат и все. то есть нельзя определить пропал gps сигнал или появился.

Ссылка на комментарий
  • 0

ZuBy, а мне например непонятно что такое accuracy (точность)? Как он влияет на выдаваемые координаты GPS?

 

PS. Вообще задача GPS-трекера очень интересная - если телефон на андроиде, то всегда можно узнать например где ребенок или пожилой человек.

Ссылка на комментарий
  • 0
  • Модераторы

ZuBy, а мне например непонятно что такое accuracy (точность)? Как он влияет на выдаваемые координаты GPS?

 

PS. Вообще задача GPS-трекера очень интересная - если телефон на андроиде, то всегда можно узнать например где ребенок или пожилой человек.

Я особо не понял, что оно даёт. В андроиде вообще отказался от TLocationSensor'a. Использую нативные способы получения. Дело в том что перезапрашивать данные приходится всё равно несколько раз, чтобы пришли точные

Ссылка на комментарий
  • 0

В андроиде вообще отказался от TLocationSensor'a. Использую нативные способы получения. Дело в том что перезапрашивать данные приходится всё равно несколько раз, чтобы пришли точные

Что за нативные способы? Можно код, если не секрет? 

Ссылка на комментарий
  • 0
  • Модераторы

 

В андроиде вообще отказался от TLocationSensor'a. Использую нативные способы получения. Дело в том что перезапрашивать данные приходится всё равно несколько раз, чтобы пришли точные

Что за нативные способы? Можно код, если не секрет? 

 

вот оригинальный код, я же себе сделал компонент сразу с геокодингом и реверс геокодингом (через три сервиса here maps, google maps, yandex maps) +расчёт дистанции по дороге через google +расчёт дистанции по прямой

AndroidGPS.zip

Изменено пользователем ZuBy
Ссылка на комментарий
  • 0

вот оригинальный код

 

Запустил программу, поставил галочки GPS Enabled, Network Enabled, жму Load Providers и получаю широту и долготу. Но после этого они больше не меняются (хоть я конечно и сижу на месте перед окном :) ) в отличии от варианта когда используется LocationSensor (с ним у меня маркер постоянно движется туда сюда). Почему так?

 

 

я же себе сделал компонент сразу с геокодингом и реверс геокодингом 

 

Я тоже сделал реверс геокодинг вот так:

  private
    FGeocoder: TGeocoder;
    procedure OnGeocodeReverseEvent(const Address: TCivicAddress);

procedure TForm1.OnGeocodeReverseEvent(const Address: TCivicAddress);
begin
  TThread.Queue(nil, procedure
  begin
    Info.Text:='';
    LbiAdminArea.ItemData.Detail      := Address.AdminArea;
    LbiCountryCode.ItemData.Detail    := Address.CountryCode;
    LbiCountryName.ItemData.Detail    := Address.CountryName;
    LbiFeatureName.ItemData.Detail    := Address.FeatureName;
    LbiLocality.ItemData.Detail       := Address.Locality;
    LbiPostalCode.ItemData.Detail     := Address.PostalCode;
    LbiSubAdminArea.ItemData.Detail   := Address.SubAdminArea;
    LbiSubLocality.ItemData.Detail    := Address.SubLocality;
    LbiThoroughfare.ItemData.Detail   := Address.Thoroughfare;
    LbiSubThoroughfare.ItemData.Detail:= Address.SubThoroughfare;
  end);
end;



procedure TForm1.LSensorLocationChanged(Sender: TObject; const OldLocation,
  NewLocation: TLocationCoord2D);
begin
 ///. ..
    try // реверсивная геолокация 
      if not Assigned(FGeocoder) then   
      begin
        if Assigned(TGeocoder.Current) then
          FGeocoder := TGeocoder.Current.Create;
        if Assigned(FGeocoder) then
          FGeocoder.OnGeocodeReverse := OnGeocodeReverseEvent;
      end;

      if Assigned(FGeocoder) and not FGeocoder.Geocoding then
        FGeocoder.GeocodeReverse(NewLocation);
    except
      Info.Text:='Ошибка Geocoder';
      ClearAdress();
      FGeocoder.Free; FGeocoder:=nil;
    end;
end;

 

И работает хорошо, но до первой ошибки. Если связь по WiFi или GPRS обрывается, то вываливается ошибка о Timeout-е и после этого на строку FGeocoder.GeocodeReverse(NewLocation); больше не попадает. Что я делаю не так?

 

 

я же себе сделал ... (через три сервиса here maps, google maps, yandex maps) 

 

Круто! А какой компонент используется для отображения карт, TWebBrowser?

 

 

+расчёт дистанции по дороге через google +расчёт дистанции по прямой

 

Формулу для расчета по прямой я уже нашел (не думаю что она вообще может быть полезной :) ) А вот не поделитесь с общественностью кодом для расчета расстояния по дороге? (коли не жалко)  ;)

 

 

PS. ZuBy, вообще ничего что я в этой теме столько пишу?

Изменено пользователем Rusland
Ссылка на комментарий
  • 0
  • Модераторы

 

вот оригинальный код

 

Запустил программу, поставил галочки GPS Enabled, Network Enabled, жму Load Providers и получаю широту и долготу. Но после этого они больше не меняются (хоть я и сижу на месте перед окном :) ) в отличии от варианта когда используется LocationSensor (с ним у меня маркер постоянно движется туда сюда). Почему так?

 

 

я же себе сделал компонент сразу с геокодингом и реверс геокодингом 

 

Я тоже сделал реверс геокодинг вот так:

  private
    FGeocoder: TGeocoder;
    procedure OnGeocodeReverseEvent(const Address: TCivicAddress);

procedure TForm1.OnGeocodeReverseEvent(const Address: TCivicAddress);
begin
  TThread.Queue(nil, procedure
  begin
    Info.Text:='';
    LbiAdminArea.ItemData.Detail      := Address.AdminArea;
    LbiCountryCode.ItemData.Detail    := Address.CountryCode;
    LbiCountryName.ItemData.Detail    := Address.CountryName;
    LbiFeatureName.ItemData.Detail    := Address.FeatureName;
    LbiLocality.ItemData.Detail       := Address.Locality;
    LbiPostalCode.ItemData.Detail     := Address.PostalCode;
    LbiSubAdminArea.ItemData.Detail   := Address.SubAdminArea;
    LbiSubLocality.ItemData.Detail    := Address.SubLocality;
    LbiThoroughfare.ItemData.Detail   := Address.Thoroughfare;
    LbiSubThoroughfare.ItemData.Detail:= Address.SubThoroughfare;
  end);
end;



procedure TForm1.LSensorLocationChanged(Sender: TObject; const OldLocation,
  NewLocation: TLocationCoord2D);
begin
 ///. ..
    try // реверсивная геолокация 
      if not Assigned(FGeocoder) then   
      begin
        if Assigned(TGeocoder.Current) then
          FGeocoder := TGeocoder.Current.Create;
        if Assigned(FGeocoder) then
          FGeocoder.OnGeocodeReverse := OnGeocodeReverseEvent;
      end;

      if Assigned(FGeocoder) and not FGeocoder.Geocoding then
        FGeocoder.GeocodeReverse(NewLocation);
    except
      Info.Text:='Ошибка Geocoder';
      ClearAdress();
      FGeocoder.Free; FGeocoder:=nil;
    end;
end;

 

И работает хорошо, но до первой ошибки. Если связь по WiFi или GPRS обрывается, то вываливается ошибка о Timeout-е и после этого на строку FGeocoder.GeocodeReverse(NewLocation); больше не попадает. Что я делаю не так?

 

 

я же себе сделал ... (через три сервиса here maps, google maps, yandex maps) 

 

Круто! А какой компонент используется для отображения карт, TWebBrowser?

 

 

+расчёт дистанции по дороге через google +расчёт дистанции по прямой

 

Формулу для расчета по прямой я уже нашел (не думаю что она вообще может быть полезной :) ) А вот не поделитесь с общественностью кодом для расчета расстояния по дороге? (коли не жалко)  ;)

 

 

PS. ZuBy, вообще ничего что я в этой теме столько пишу?

 

 

Rusland

Почему так?

 

если посмотреть в исходный код внимательно то можно обнаружить что дистанция стоит 10, а в родном TLocationSensor = 0

попробуйте поменять это значение и увидите разницу

    FLocationManager.requestLocationUpdates(TJLocationManager.JavaClass.GPS_PROVIDER, 10000, 10, locationListener,
      TJLooper.JavaClass.getMainLooper);
    FLocationManager.requestLocationUpdates(TJLocationManager.JavaClass.NETWORK_PROVIDER, 10000, 10, locationListener,
      TJLooper.JavaClass.getMainLooper);
Круто! А какой компонент используется для отображения карт, TWebBrowser?

для геолокации не нужен браузер, просто запросы через TidHttp

 

Формулу для расчета по прямой я уже нашел (не думаю что она вообще может быть полезной

бывает полезной, кое где у меня используется

 

 

PS. ZuBy, вообще ничего что я в этой теме столько пишу?

пока это соответствует теме думаю никто против не будет :)

 

компонентом могу поделится, но для того чтобы все заработало подготовьте API key Google, Appid, Appcode для Here Maps

я позже выложу ссылку сюда

Ссылка на комментарий
  • 0
 

если посмотреть в исходный код внимательно то можно обнаружить что дистанция стоит 10, а в родном TLocationSensor = 0

попробуйте поменять это значение и увидите разницу

Действительно  :) заменил на 0 и он стал также быстро менять координаты (правда пока не пробовал вывести на карту). Кстати, меня несколько разочаровало что с LocationSensor на карте отображается маркер-дергунчик - то есть когда я пешком иду по улице с телефоном, то перемещение не плавное, а как бы скачками (а вот приложения типа Яндекс.Навигатор при этом идут без рывков)... может тут будет плавнее.

 

компонентом могу поделится, но для того чтобы все заработало подготовьте API key Google, Appid, Appcode для Here Maps

я позже выложу ссылку сюда

Было бы замечательно! ApiKey естественно имеется. А вот про остальные пока не в курсе, буду читать. Про сервис Here вообще узнал впервые от вас ) Посмотрел их карту, довольно шустрая. В общем пошел пока изучать :)

 

PS. Знаю еще карту  openstreetmap, но не знаю есть ли у нее свой API

 

PPS. App_Id и App_Code получил (бесплатно выдаются лишь на 90 дней) ))

Изменено пользователем Rusland
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...