Запустил программу, поставил галочки 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); больше не попадает. Что я делаю не так?
Круто! А какой компонент используется для отображения карт, TWebBrowser?
Формулу для расчета по прямой я уже нашел (не думаю что она вообще может быть полезной ) А вот не поделитесь с общественностью кодом для расчета расстояния по дороге? (коли не жалко)
PS. ZuBy, вообще ничего что я в этой теме столько пишу?
если посмотреть в исходный код внимательно то можно обнаружить что дистанция стоит 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);
для геолокации не нужен браузер, просто запросы через TidHttp
бывает полезной, кое где у меня используется
пока это соответствует теме думаю никто против не будет
компонентом могу поделится, но для того чтобы все заработало подготовьте API key Google, Appid, Appcode для Here Maps
я позже выложу ссылку сюда