Вопрос

Вопрос простой - есть какие-то встроенные методы, которые позволяют определять пройденное расстояние? Оно понятно, что можно искать расстояние между двумя точками, но вдруг уже до нас что-то придумали. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

3 ответа на этот вопрос

  • 0

встроенных нету, по прямой можно рассчитать так

function GetDistance(const aStart, aEnd: TMapCoordinate): Real;
const
  Radius = 6372795;
  PiDiv180 = Pi / 180;
var
  CosLatStart, SinLatStart, CosLatEnd, SinLatEnd, Delta, CosDelta, SinDelta, X, Y: Real;
begin
  try
    CosLatStart := Cos(aStart.Latitude * PiDiv180);
    CosLatEnd := Cos(aEnd.Latitude * PiDiv180);
    SinLatStart := Sin(aStart.Latitude * PiDiv180);
    SinLatEnd := Sin(aEnd.Latitude * PiDiv180);
    Delta := (aEnd.Longitude * PiDiv180) - (aStart.Longitude * PiDiv180);
    CosDelta := Cos(Delta);
    SinDelta := Sin(Delta);
    Y := Sqrt(((CosLatEnd * SinDelta) * (CosLatEnd * SinDelta)) + ((CosLatStart * SinLatEnd - SinLatStart * CosLatEnd * CosDelta)
      * (CosLatStart * SinLatEnd - SinLatStart * CosLatEnd * CosDelta)));
    X := SinLatStart * SinLatEnd + CosLatStart * CosLatEnd * CosDelta;
    Result := Round(ArcTan2(Y, X) * Radius);
  except
    Result := MaxSingle; // сравнивать с MaxSingle, вдруг ошибка произошла
  end;
end;

 

Евгений Корепов и Kitty понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Спасибо, примерно так и считаю сейчас, но точность не устраивает. Просто сидя на месте можно "намотать" не одну сотню метров, видимо за счет погрешности измерения. Вообще есть еще мысль при каждом OnLocationChange прибавлять к счетчику Distance метров, но боюсь, что работать не будет корректно по той же причине....

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

погрешность измерения GPS 10-15 метров в идеальных условиях. нередки случаи и 50-100

соответственно, при каждом измерении размах отклонения может достигнуть (погрешность * 2) м

можно считать это встроенным свойством системы ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Похожие публикации

    • Автор: MikeWuzHere
      Подкинуло начальство  задачку, да не простую. Приложение должно в фоне мониторить gps, собирать данные о батарее, логировать и потом сливать на сервер. Все это будет нащадно жрать батарею, понимаю, но начальству нужен именно этот вариант. Перейду к вопросам:
      1.Нужно пилить сервис, но исходя из прошлых тем - таймер не работает, слипы не вариант, как сделать так, чтоб сервис просыпался каждые 5 минут/15 минут/ 1 час ?
      2.Мониторинг GPS, тут решение вроде нашел в этой ветке для seattle, как лучше всего собирать и хранить данные для отправки? (до этого все сохранял в простых .txt)
      3.Работают ли компоненты indy корректно в сервисе? срабатывают ли except'ы и как правильно мониторить подключение к сети? 
      Проблема еще и в том, что программа должна работать более менее стабильно и если опыт написания простых приложений у меня есть, то с сервисами уже пару месяцев не могу подружиться..
      Всем бобра!
    • Автор: Rusland
      Есть два планшета Lenovo Tab 2 A7-30DC (назовем их A и Б). Есть написанная на Berlin программа с MapView.
      По умолчанию у обоих стояла ОС Android 4.4.2. На A я обновил операционку до максимальной официальной версии 5.0.1, на Б оставил 4.4.2
      На Б программа худо-бедно работает, но на MapView не показывает синюю точку - текущее местоположение (сторонние программы GPS Status, Яндекс Навигатор GPS координаты ловят нормально). Пробовал компилировать на Seattle - тоже самое. LocationSensor сначала неправильно показал координаты, ошибся на 300км, но после перезапуска программы стал показывать правильно. Почему MapView не показывает, не понимаю.
      На А программа зависает при попытке поставить метку на MapView или нарисовать маршрут получаю Segmentation fault.
      Вот, например:
      procedure TFrmMain.SetMarkerOnMap(Id:integer;NaimObj,AdrObj:String;Lat,Lon:Double); var Descrip: TMapMarkerDescriptor; MyLocation: TMapCoordinate; begin TThread.Queue(TThread.CurrentThread, procedure begin try if (MapView.Visible) then begin MyLocation:=TMapCoordinate.Create(Lat,Lon); Descrip:=TMapMarkerDescriptor.Create(MyLocation); Descrip.Icon:=ImObjBlueMarker.Bitmap; Descrip.Draggable:=False; Descrip.Title:=NaimObj; Descrip.Snippet:='['+Id.ToString+'] '; if (AdrObj<>'') then Descrip.Snippet:=Descrip.Snippet+AdrObj; MyMarker:=MapView.AddMarker(Descrip); // тут Segmentation fault LMarkers.Add(MyMarker); end; except end; end); end; Как решить проблему?
       
       
    • Автор: Pax Beach
      Здравствуйте, коллеги!
      Я не хочу, чтобы в моем приложении пользователь мог подставлять фиктивные координаты своего местоположения, используя для этого функцию разработчика "mock location".
      Помогите пожалуйста правильным кодом или советом, как определять, включена ли данная функция на устройстве, чтобы соответственно ее обрабатывать?
       
    • Автор: Pax Beach
      Коллеги, подскажите пожалуйста, как в Delphi из своего приложения перейти к настройкам устройства Android, в частности Wi-Fi и GPS?
      По нажатию кнопки пытаюсь выполнить такой код (нашел по теме на просторах), ничего не происходит ни в отладчике ни на экране. А, по идее, должна открыться Activity «Способ определения координат».
      var Intent: JIntent; WiFIServiceNative: JWifiManager; begin Intent := TJIntent.Create; Intent.setClassName(StringToJString('com.android.settings'), StringToJString('com.android.settings.widget.SettingsAppWidgetProvider')); Intent.addCategory(TJIntent.JavaClass.CATEGORY_ALTERNATIVE); Intent.setData(StrToJURI('3')); TAndroidHelper.Activity.sendBroadcast(Intent); ... Вот еще, здесь же пытаюсь программно выключить Wi-Fi — приложение вылетает с ошибкой «...class segmentation fault (11).», в отладчике методы Wi-Fi менеджера выполняются бесконечное количество раз, пока не вылетает указанная ошибка, т.е. нажатие F8 возвращает обратно на ту же строчку выполнения метода.
      WiFIServiceNative := JWifiManager(TAndroidHelper.Activity.getSystemService(TJContext.JavaClass.WIFI_SERVICE)); if Assigned(WiFIServiceNative) then begin memo1.Lines.Add('Has Wifi manager'); memo1.Lines.Add('Wifi state: ' + IntToStr(WiFIServiceNative.getWifiState)); memo1.Lines.Add('Try to Wi-Fi off:'); if WiFIServiceNative.setWifiEnabled(false) then memo1.Lines.Add(' - OK') else memo1.Lines.Add(' - FAIL');  
      Прошу вашей помощи — как правильно работать с настройками Android?
       
      Приложение пустое — кнопка и мемо.
      Permissions для проекта такие:
      <!-- This is the platform API where NativeActivity was introduced. --> <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_CALENDAR" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" />  
    • Автор: MikeWuzHere
      Есть проект, который ловит координаты широты и долготы через локейшн сервис, может поймать даже при выключенном GPS и это большая проблема. Как поставить приоритетность? дело в том, что если телефон получает данные о местоположении с помощью сотовой сети, то в программе проходит проверка включенности GPS и она стартует с "плохими" координатами.. Если в настройках телефона отключить использование для местоположения сотовой сети и включить использование ТОЛЬКО GPS то все работает, но клиент не будет разбираться в этом
    • Автор: MikeWuzHere
      Есть приложуха, которая должна тащить широту и долготу ТОЛЬКО с использованием gps. Это она делает, но мне нужно условие, которое будет проверять, включен ли GPS в настройках самого смартфона. Качал с разных сайтов примеры для старых версий, но почему то на моей 10ке они все не проходят сборку.. Использую LocationSensor. 
    • Автор: Rusland
      Как вызвать стандартные настройки GPS чтобы пользователь мог самостоятельно включить геолокацию?
    • Автор: Martifan
      Доброго времени сутки пишу аппликацию где используется GPS (компонент TLocationSensor) вроде работать нормально но время от времени он маркер мгновенно перескакивает на другие координаты и обратно возвращается но когда я пользуюсь компонентом TMapView "синяя точка" стабильно показывает мои координаты в чем проблема кто знает?
    • Автор: Rusland
      Как узнать точное время со спутника?
    • Автор: zairkz
      Всем здоровья, вообщем ситуация следующая имеется телефон без GPS датчика, но нужны координаты. 
       
      Подскажите как можно их вытащить
      Например при отображении MapView на ней кнопочка MyLocation которая даже без датчика достаточно точно показывает местоположения. 
       
      Вообщем как вытащить эти координаты UserLocation не отображая карту (может в системных данных где то)?
      Или как программно нажать MyLocation, чтобы после центрирования карты получить координаты MapView.Position?
       
      Реверс Геокодинг по вайфай или мобильным данным (ip-адрес) совсем не то. 
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу