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

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

  • Модераторы

Выходит ошибка (если смотреть дебагером): raised exception class EInvalidCast with message 'Invalid class typecast' при втором вызове процедуры отрисовки маршрута (в MapView1MapClick).

 
          // удаляем старые
          if Assigned(myTapMarker) then
            myTapMarker.Remove;
          if Assigned(myPolyLine) then
            myPolyLine.Remove; // <- вот тут, когда myPolyLine не nil

 

По F7 выяснилось что ошибка происходит в модуле FMX.Maps.Android:

procedure TAndroidMapPolyline.Remove;
begin
  inherited;
  TUIThreadCaller.InvokeIfNotNil<JPolyline>(procedure (P: JPolyline) begin
      P.remove;
    end, FJavaPolyline);
  FMapView.RemoveMapObject(JStringToString(FJavaPolyline.getId)); // <- здесь
end;

Отчего это?

какая делфи?

Ссылка на комментарий
  • 2 месяца спустя...
  • Модераторы

а что именно не понятно?

1) создаём

mEngine := TMapsEngine.Create;

2) указываем что будем использовать

mEngine.SetOptionsYandex(''); 
mEngine.SetOptionsGoogle(GoogleAPI);
mEngine.SetOptionsHere(HereAPI, HereAPP);

3) получаем данные по координатам

mEngine.Geocoding(myCoordLoc, myGeoLoc);

4) получаем координаты по адресу

mEngine.GeocodingReverse(myGeoLoc, myCoordLoc);

5) отрисовать маршрут

mEngine.SetOptionsGoogleDistance(GoogleDistance); // тут !!distance!! api_key google
mEngine.GoogleDistance(myCoordLoc, myCoordTap, myRoutePoints, myRouteInfo); // данные о маршруте

Примера нет, т.к. я уже им не пользуюсь (из-за android 6.0, в нём нет поддержки open-ssl на которых работает indy)

 

 

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

Примера нет, т.к. я уже им не пользуюсь (из-за android 6.0, в нём нет поддержки open-ssl на которых работает indy)

Можно узнать подробности про отсутствие open-ssl в android 6? Indy компоненты нельзя будет использовать? Как тогда быть если нужен SSL?

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

 

Примера нет, т.к. я уже им не пользуюсь (из-за android 6.0, в нём нет поддержки open-ssl на которых работает indy)

Можно узнать подробности про отсутствие open-ssl в android 6? Indy компоненты нельзя будет использовать? Как тогда быть если нужен SSL?

 

вот тут обсуждалось

я решил проблему через сервер, на php пишу всё что нужно (геокодинг, дистанцию и прочие ssl запросы)

получаю уже сформированный json и кстати так намного удобней и правильней

Ссылка на комментарий
  • 1 месяц спустя...

 

У меня ведь работает, смотрите что то не так указали. Может местами поменяли

Сегодня начал определять адрес через HERE (код не менял) :)

Кстати вчера вечером программа повисла когда я сел в автобус (несколько раз нажимал Подождать, но программа не очнулась). Возможно дело в том что интернет на телефоне очень слабый (GPRS).

 

 

 

А можно этот компонент установить в С++ Builder?

Вам просто нужно добавить MapsEngine.pas (предварительно убрав точку в названии файла) в свой проект: Project -> Add to project

При компиляции C++Builder сам создаст заголовочный файл MapsEngine.hpp, делаете #include "MapsEngine.hpp" и сможете использовать класс TMapsEngine.

 

PS. А лучше переходите на Delphi, народу больше на нем сидит  :P

 

 

PPS. А сейчас у Абракадабры идет вебинар по использованию TMapView (зарегистрироваться не успел). Кто-нибудь знает этот вебинар потом можно будет где-то посмотреть?

 

А можете подсказать как его использовать в Builder XE8 ?

Не могу понять, как:

1) создаём

mEngine := TMapsEngine.Create;

2) указываем что будем использовать

mEngine.SetOptionsYandex('');

mEngine.SetOptionsGoogle(GoogleAPI);

mEngine.SetOptionsHere(HereAPI, HereAPP);

3) получаем данные по координатам

mEngine.Geocoding(myCoordLoc, myGeoLoc);

4) получаем координаты по адресу

mEngine.GeocodingReverse(myGeoLoc, myCoordLoc);

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

Получается, что этот компонент использовать уже нельзя (из-за Android 6)?

Или все же можно, если использовать https://indy.fulgan.com/ZIP/SSL.zip ?

да, на андроид 6.0 не выйдет. нужно ждать пока индейцы допилят до boringSSL

 

 

А можете подсказать как его использовать в Builder XE8 ?

 

Не могу понять, как:

1) создаём

mEngine := TMapsEngine.Create;

2) указываем что будем использовать

mEngine.SetOptionsYandex('');

mEngine.SetOptionsGoogle(GoogleAPI);

mEngine.SetOptionsHere(HereAPI, HereAPP);

3) получаем данные по координатам

mEngine.Geocoding(myCoordLoc, myGeoLoc);

4) получаем координаты по адресу

mEngine.GeocodingReverse(myGeoLoc, myCoordLoc);

и собственно вопрос, что не понятно?

Ссылка на комментарий
  • 1 месяц спустя...
В 02.11.2015 в 10:59, Rusland сказал:

Отчего это?

Посмотрел описание класса

https://developers.google.com/android/reference/com/google/android/gms/maps/model/Polyline#developer-guide

Может getId в вашем случае не JString возвращает?

И я Java не очень знаю, но метод все-таки со скобками лучше вызывать, а не как свойство.

 

Ссылка на комментарий
  • 6 месяцев спустя...

Исправил на NetHTTPClient все работает на  Delphi 10 Seattle и на Андроид 6.0.1

 

 

Maps.Engine.zip

Изменено пользователем aleksandrguru
Ссылка на комментарий
  • Модераторы
9 часов назад, aleksandrguru сказал:

Исправил на NetHTTPClient все работает на  Delphi 10 Seattle и на Андроид 6.0.1

Maps.Engine.zip

Благодарю, все руки не доходили выложить исправленную версию

Ссылка на комментарий
10 часов назад, aleksandrguru сказал:

Исправил на NetHTTPClient все работает на  Delphi 10 Seattle и на Андроид 6.0.1

 

 

Maps.Engine.zip

А от IdURI избавиться не удалось?

Str := TIdURI.URLEncode(Format(GoogleURLGeoReverse, [GetFormattedString(aData), aGoogleKey]));

 

Ссылка на комментарий
  • Модераторы
3 минуты назад, Rusland сказал:

А от IdURI избавиться не удалось?


Str := TIdURI.URLEncode(Format(GoogleURLGeoReverse, [GetFormattedString(aData), aGoogleKey]));

 

использовать 

//uses System.NetEncoding
TNetEncoding.URL.Encode()

 

Ссылка на комментарий
  • 2 месяца спустя...
В 18.08.2015 в 11:25, Равиль Зарипов (ZuBy) сказал:

Компонент TMapsEngine

 

Возможности

  • Нативный LocationSensor [ANDROID]
  • Геокодинг/Реверс геокодинг через Google API, Yandex API, Here Maps API
  • Построение маршрута через Google Distance API
  • Расчет дистанции по прямой
  • Совместим со стандартным компонентом TLocationSensor

 

Видео демонстрация

 

На видео видно как TMapView косячик с миллионом точек, приложение зависло при отрисовке, но с этим ничего не поделать.

Без синхронизации не возможно отрисовать все точки

 

Исходник

TMapsEngine_source.zip

TMapsEngine_Seattle_10.zip

 

Скачать APK  (долго он там не пролежит, а форум не позволяет загрузить zip размером 7,4 мб )

 

Подскажите а компонент только с Android работает?

Ссылка на комментарий
  • Модераторы
54 минуты назад, Anasazi сказал:

Подскажите а компонент только с Android работает?

без привязки к платформе, т.к. он работает с апи yandex и google

а выводить можно куда захотите, я выводил на TMapView для мобильных, на Windows можно использовать какой-нить другой компонент

Ссылка на комментарий
  • 8 месяцев спустя...

Воспользовался компонентом mEngine, при написании запускал на Lenovo все работало нормально, перенес на планшетник, все вроде работает

только не геокодирует по координатам mEngine.Geocoding адрес не возвращает (при этом на ленове тут же все нормально показывает)

не подскажете куда копать (проблема еще в том что планшет не могу подключить для отладки) 

procedure TMasterDetailForm.OnLocationChange(Sender: TObject; const OldLocation,
  NewLocation: TLocationCoord2D);
begin
  TThread.Synchronize(nil,
    procedure
    begin
      // перемещаемся по карте в текущие координаты, с зумом 14 (макс 16)
      myLoc := TMapCoordinate.Create(NewLocation.latitude, NewLocation.longitude);
      MapView1.Location := myLoc;
      MapView1.Zoom := 17;

      TTask.Run(
        procedure
        begin
          // геолокация
          mEngine.Geocoding(myLoc, myLocInfo); // геокодинг для записи заголовка в marker

          TThread.Synchronize(nil,
            procedure
            var
              markDescriptor: TMapMarkerDescriptor;
            begin
              // MyLocInfo хранит все данные геокодинга
              Label6.Text := myLocInfo.FormattedAddress;
              Label6.Text := Label6.Text+ ' -> '+KlLocInfo.FormattedAddress;
              markDescriptor := TMapMarkerDescriptor.Create(myLoc, myLocInfo.FormattedAddress);
              SetMarker(MapView1,myLoc,1,'',markDescriptor);
            end);
        end);
    end);
end;

 

Ссылка на комментарий
  • 7 месяцев спустя...
  • 1 месяц спустя...

Долго бился над Maps.Engine.pas не работает. Потом понял, это походу из-за того что всё теперь в json https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=YOUR_API_KEY,

a не 'https://maps.googleapis.com/maps/api/geocode/xml?latlng=%s,%s&key=%s'  ну и остальное значит в другом формате, либо у меня руки не из того места...

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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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