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

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

  • Модераторы

Компонент 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 мб )

 

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

Замечательный движок. Мне понравился :)

Но почему-то не заработал через сервис HERE, хотя App_Id и App_Code указал в mEngine.SetOptionsHere(... , ...)

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

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

Спасибо.

Я не силен в C++, если только сами портируровать будете. Там кода не так много

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

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

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

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

 

 

 

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

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

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

 

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

 

 

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

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

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

 

Обычно выкладываются сюда

Изменено пользователем enatechno
Ссылка на комментарий
  • 3 недели спустя...

Как думаете, как лучше хранить координату в базе? Cколько знаков после запятой использовать, чтобы не терялась точность? 6 знаков достаточно? (71.471026)

На сколько метров увеличится точность, если хранить 7 знаков?

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

Как думаете, как лучше хранить координату в базе? Cколько знаков после запятой использовать, чтобы не терялась точность? 6 знаков достаточно? (71.471026)

На сколько метров увеличится точность, если хранить 7 знаков?

я храню как есть, проблем не было

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

Обновил TMapsEngine с выходом Delphi 10 Seattle

  • Вырезал нативный сенсор (т.к. исправили TLocationSensor)
  • переименовал методы, в соответствии с используемым API
  • Добавил Yandex Locator API (определение координат по IP, WI-FI, GSM)

для определения своих координат, достаточно отправить пустой IP адрес, yandex сам распознает откуда был запрос сделан

 

модуль TMapsEngine_Seattle_10.zip

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

 

я храню как есть, проблем не было

Как double?

 

float в базе на каждый параметр (lat, lon)

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

Установил наконец Seattle 10...

ZuBy, похоже TMapsEngine существенно изменился. Например, у него пропало свойство Active...

Есть готовый примерчик по использованию Maps.Engine.pas?

 

PS. В связи с добавлением "определения координат по IP, WI-FI, GSM" какие галочки нужно поставить в Uses Permissions?

 

PPS. Нужно использовать TLocationSensor?

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

Установил наконец Seattle 10...

ZuBy, похоже TMapsEngine существенно изменился. Например, у него пропало свойство Active...

Есть готовый примерчик по использованию Maps.Engine.pas?

 

PS. В связи с добавлением "определения координат по IP, WI-FI, GSM" какие галочки нужно поставить в Uses Permissions?

 

PPS. Нужно использовать TLocationSensor?

Пример есть, но он не выложен нигде... может позже

На счёт разрешении ничего не нужно ставить кроме стандартных

TLocationSensor использовать если вам нужно определение координат, нативный датчик вырезал, т.к. в 10 исправили баги (поэтому исчезло Active)

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

Пример есть, но он не выложен нигде... может позже

 

Если выложите, то в эту тему пожалуйста.

 

 

 

На счёт разрешении ничего не нужно ставить кроме стандартных

 

У меня по стандарту включены Camera, Storage, Calendar и много чего еще не нужного )) 

Вот на Access location extra commands, Access WiFi state точно не нужно ставить галочки? Где вообще найти описания к ним?

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

 

 

Пример есть, но он не выложен нигде... может позже

 

Если выложите, то в эту тему пожалуйста.

 

 

 

На счёт разрешении ничего не нужно ставить кроме стандартных

 

У меня по стандарту включены Camera, Storage, Calendar и много чего еще не нужного )) 

Вот на Access location extra commands, Access WiFi state точно не нужно ставить галочки? Где вообще найти описания к ним?

 

нет, а что у вас не работает что-то?

 

http://developer.android.com/reference/android/Manifest.permission.html

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

нет, а что у вас не работает что-то?

В принципе все работает, но вот небольшой затык (хоть он и не касается самого движка) на procedure LocationSensorLocationChanged(Sender: TObject; const [Ref] OldLocation, NewLocation: TLocationCoord2D); 

Теперь 10ка не дает обращаться к NewLocation.Latitude... приходится использовать LocationSensor.Sensor.Latitude

Может я что-то не так делаю? Что такое [REF]?

 

Аналогично в MapView1MapClick нет доступа к Position... Использовать MapView1.Location?

 

PS. Плюс приложение зависает немного постояв :(

 

ACCESS_NETWORK_STATE Allows applications to access information about networks

Ага, очень полезное описание  :lol:  Ладно, оставлю галочки по умолчанию, раз и так все работает  :rolleyes:

 

 

Еще такой вопрос: Расстояние тут меряется гуглем. Планируется ли включать метр от Яндекса?

 

 

PPS. Странно, сервис HERE вроде давал доступ на месяц, а работает уже больше месяца :)

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

 

нет, а что у вас не работает что-то?

В принципе все работает, но вот небольшой затык (хоть он и не касается самого движка) на procedure LocationSensorLocationChanged(Sender: TObject; const [Ref] OldLocation, NewLocation: TLocationCoord2D); 

Теперь 10ка не дает обращаться к NewLocation.Latitude... приходится использовать LocationSensor.Sensor.Latitude

Может я что-то не так делаю? Что такое [REF]?

 

Аналогично в MapView1MapClick нет доступа к Position... Использовать MapView1.Location?

 

PS. Плюс приложение зависает немного постояв :(

 

ACCESS_NETWORK_STATE Allows applications to access information about networks

Ага, очень полезное описание  :lol:  Ладно, оставлю галочки по умолчанию, раз и так все работает  :rolleyes:

 

 

Еще такой вопрос: Расстояние тут меряется гуглем. Планируется ли включать метр от Яндекса?

 

 

PPS. Странно, сервис HERE вроде давал доступ на месяц, а работает уже больше месяца :)

 

на счёт яндекса, может позже.

а here у меня уже несколько месяцев работает

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

Выходит ошибка (если смотреть дебагером): 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;

Отчего это?

 

PS. Delphi 10 Seattle

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

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

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

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

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

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

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

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

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

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