Перейти к содержанию
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

  • 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 эмодзи.

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

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

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

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