Перейти к содержанию
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 месяцев спустя...
  • Модераторы
Опубликовано
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 эмодзи.

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

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

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

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