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

GPS


Martifan

Вопрос

Доброго времени сутки
пишу аппликацию где используется GPS (компонент TLocationSensor) вроде работать нормально но время от времени он маркер мгновенно перескакивает на другие координаты и обратно возвращается но когда я пользуюсь компонентом
TMapView "синяя точка" стабильно показывает мои координаты в чем проблема кто знает?
Ссылка на комментарий

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

  • 0

Есть такая фигня... тоже мешает это... думаю, что в какой-то момент вместо спутника выдаются координаты определенные по базовым станциям сотового оператора. 

В телефонах/планшетах бывает такая настройка: использовать Только GPS, GPS и сотовые сети. Если бы можно было из программы узнавать откуда пришли координаты на сенсор было бы понятно что с этим делать. Может кто что подскажет?

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

да но как все это по делу использовать?

Если знать как определяются координаты (по ЖПС или по сотовым вышкам), то можно выбирать какие координаты использовать, а какие отбрасывать...

 

Узнать тип сенсора можно вот так 

function getLocationSensorType(const ASensor : TLocationSensor) : String;
begin
  with ASensor do
  case Sensor.SensorType of
    TLocationSensorType.GPS: result           := 'GPS';
    TLocationSensorType.Static: result        := 'Static';
    TLocationSensorType.Lookup: result        := 'Lookup';
    TLocationSensorType.Triangulation: result := 'Triangulation';
    TLocationSensorType.Broadcast: result     := 'Broadcast';
    TLocationSensorType.DeadReckoning: result := 'DeadReckoning';
    TLocationSensorType.Other: result         := 'Other';
    else result                               := 'Unknown';
  end;
end;

procedure TFrmMain.LocationSensorLocationChanged(Sender: TObject;
  const [Ref] OldLocation, NewLocation: TLocationCoord2D);
var
  Lat,Lon:String;
  lSensorType : String;
begin
  Lat:=Format('%2.6f',[NewLocation.Latitude]);
  Lon:=Format('%2.6f',[NewLocation.Longitude]);
  lSensorType := GetLocationSensorType(LocationSensor); 
  Memo1.Lines.Add('Lat='+Lat+' Lon='+Lon+' lSensorType='+lSensorType);
end;

однако он мне выдает lSensorType=GPS всегда, даже в случае отключения GPS на устройстве... не знаю почему  :blink:

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

или можно как то поймать координаты "синего точки" на TMapView?

Если верить сообщению ZuBy, то видимо никак не получить координат "синей точки" из MapView

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

а еще один вопрос:

можно ли узнать координаты так чтобы не было включен GPS в телефоне а то очень батарейку убивает я помню на Delphi XE5 этого можно было сделать

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

пробовал дожидался очень долго но без GPS не возвращает координаты а с GPS бывает что неправильно возвращает координат кто нибудь знает как с этим бороться на компоненте TMapView работать нормально

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

Есть такая фигня... тоже мешает это... думаю, что в какой-то момент вместо спутника выдаются координаты определенные по базовым станциям сотового оператора. 

 

Ну надо же, а я уж уверовал что в dx10 починили TLocationSensor и стал грешить на это https://habrahabr.ru/post/257443/ (хотя тут указано про вышки, но...) и на то что у некоторых планшеты с плохим сенсором

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

 

да но как все это по делу использовать?

Если знать как определяются координаты (по ЖПС или по сотовым вышкам), то можно выбирать какие координаты использовать, а какие отбрасывать...

 

Узнать тип сенсора можно вот так 

function getLocationSensorType(const ASensor : TLocationSensor) : String;
begin
  with ASensor do
  case Sensor.SensorType of
    TLocationSensorType.GPS: result           := 'GPS';
    TLocationSensorType.Static: result        := 'Static';
    TLocationSensorType.Lookup: result        := 'Lookup';
    TLocationSensorType.Triangulation: result := 'Triangulation';
    TLocationSensorType.Broadcast: result     := 'Broadcast';
    TLocationSensorType.DeadReckoning: result := 'DeadReckoning';
    TLocationSensorType.Other: result         := 'Other';
    else result                               := 'Unknown';
  end;
end;

procedure TFrmMain.LocationSensorLocationChanged(Sender: TObject;
  const [Ref] OldLocation, NewLocation: TLocationCoord2D);
var
  Lat,Lon:String;
  lSensorType : String;
begin
  Lat:=Format('%2.6f',[NewLocation.Latitude]);
  Lon:=Format('%2.6f',[NewLocation.Longitude]);
  lSensorType := GetLocationSensorType(LocationSensor); 
  Memo1.Lines.Add('Lat='+Lat+' Lon='+Lon+' lSensorType='+lSensorType);
end;

однако он мне выдает lSensorType=GPS всегда, даже в случае отключения GPS на устройстве... не знаю почему  :blink:

 

а тут Triangulation это и есть тип сенсора от вышек?

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

Видимо да

Triangulation sensor.

For example, a sensor that calculates the user location based on the proximity of cellular phone towers.

http://docwiki.embarcadero.com/Libraries/XE8/en/System.Sensors.TLocationSensorType Изменено пользователем Rusland
Ссылка на комментарий
  • 0

Видимо да

Triangulation sensor.

For example, a sensor that calculates the user location based on the proximity of cellular phone towers.

http://docwiki.embarcadero.com/Libraries/XE8/en/System.Sensors.TLocationSensorType

 

Это я тоже нашел но как его использовать?

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

Так благодаря этому можно отсеивать эти координаты от вышек дабы увеличить точность ... я так понял это из за  них появляются левые координаты которые +- до 2 км.

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

Так благодаря этому можно отсеивать эти координаты от вышек дабы увеличить точность ... я так понял это из за  них появляются левые координаты которые +- до 2 км.

как раз вопрос в том что как этого сделать

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

я ещё не тестил, но судя по коду предоставленному Русланом, как то так:

 

procedure TFrmMain.LocationSensorLocationChanged(Sender: TObject;
  const [Ref] OldLocation, NewLocation: TLocationCoord2D);
var
  Lat,Lon:String;
  lSensorType : String;
begin
  lSensorType := GetLocationSensorType(LocationSensor);
  if lSensorType = 'Triangulation' then exit;
  Lat:=Format('%2.6f',[NewLocation.Latitude]);
  Lon:=Format('%2.6f',[NewLocation.Longitude]);
  // выполняем что то там
end;
Изменено пользователем beklexx
Ссылка на комментарий
  • 0

 

я ещё не тестил, но судя по коду предоставленному Русланом, как то так:

 

procedure TFrmMain.LocationSensorLocationChanged(Sender: TObject;
  const [Ref] OldLocation, NewLocation: TLocationCoord2D);
var
  Lat,Lon:String;
  lSensorType : String;
begin
  lSensorType := GetLocationSensorType(LocationSensor);
  if lSensorType = 'Triangulation' then exit;
  Lat:=Format('%2.6f',[NewLocation.Latitude]);
  Lon:=Format('%2.6f',[NewLocation.Longitude]);
  // выполняем что то там
end;

 

да но верху написали что он все время возвращает GPS

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

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

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

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

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

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

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

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

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

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