C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Для работы с Google maps  (Прочитано 27849 раз)
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 783


Для работы с Google maps
« : 13 Сентябрь 2012, 17:03:30 »

Новая бесплатная библиотека для работы с Google теперь доступна и для С++ Builder XE2.
GMLib is released new version (0.1.7)
More information (spanish only, but you can translate it)
http://www.cadetill.com/?page_id=365

Download
http://www.cadetill.com/files/gmlib_0.1.7.zip
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Для работы с Google maps
« Ответ #1 : 10 Октябрь 2012, 12:41:17 »

Спасибо за ссылку! Уже потренировался, вот тестовый проект (XE3). На их странице sourceforge написал отзыв и добавил 2 бага. Надеюсь, устранят.
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 783


Re: Для работы с Google maps
« Ответ #2 : 10 Октябрь 2012, 16:47:42 »

Спасибо за проект.
Можно релизный exe выложить?
А какая у вас версия? На днях вышла новая 0.1.8:
A new version ( 0.1.8 ) of GMLib is released with some improvements and a new component, TGMElevation
  Improvement: Compiled under XE3
  Improvement: new component added, the TGMElevation.
  bug fixed: General -> fixed all memory leaks found
  bug fixed: TGMDirection -> the OnDirectionsChanged event was not triggered
Страница с комментариями
Download
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Для работы с Google maps
« Ответ #3 : 10 Октябрь 2012, 19:34:45 »

Именно эту версия я и использую (т.к. только она под XE3).
Прилагаю бинарник + динамические пакеты. Забыл сказать, что еще один баг библиотеки, - то, что она не работает в автономном режиме, т.е. при выключении опции проекта Link with dynamic packages появляются ошибки линковщика  Так что только с динамическими пакетами...
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Для работы с Google maps
« Ответ #4 : 11 Октябрь 2012, 16:53:27 »

Апдейт проекта:
* проект собран в автономном режиме (без динамических пакетов)
* пример всплывающего окна с HTML текстом при наведении мыши на маркер
* пример рисования линий на карте (кнопка "!" справа вверху)
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 783


Re: Для работы с Google maps
« Ответ #5 : 11 Октябрь 2012, 17:18:40 »

Большое спасибо за обновленный проект!
У меня остался такой вопрос:
Как в этой библиотеке прочитать адрес при наведении мыши на маркер? Google API позволяет автоматом извлечь адрес из местоположения маркера. Хотелось бы это иметь в этом проекте.
Суть вопроса в прилагаемой картинке.
Может это уже реализовано в вашем коде, у меня просто пока нет Builder-a под рукой не могу посмотреть код...


« Последнее редактирование: 11 Октябрь 2012, 17:28:17 от SilverFish » Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Для работы с Google maps
« Ответ #6 : 12 Октябрь 2012, 09:54:39 »

Обновил проект по Вашей просьбе.
* На карте можно нажать правой клавишей мыши и выбрать в меню "Что здесь"? Программа поставит на выбранной точке маркер, при наведении мыши на который отобразится геоинформация (ближайший адрес). При щелчке на маркере он исчезает (скрывается).
* Добавлены слои (фотографии, пробки, веломаршруты, транспорт и погода).
* Проведение линий между маркерами обновлено после предыдущей версии: линии рисуются с полупрозрачностью; при щелчке на линии она скрывается; осуществлен переход карты в центр окружности, вписанной в треугольник, образованный линиями (в примере 3 точки).

Остальной функционал Вы можете добавить по аналогии с тем, что уже реализован в демо-проекте. Смотрите на события компонентов: их много, и их названия говорят сами за себя Единственное, следует помнить о баге: некоторые автоматически генерируемые обработчики событий неправильно определены в C++Builder (типы аргументов указаны как Real, что в Delphi соответствует типу double). Поэтому в этом случае я использую самописный обработчик с динамическим присваиванием указателя на него соответствующему событию. В этом обработчике я указываю правильный тип - double. Например:
Код
void __fastcall TForm1::FormCreate(TObject *Sender)
{
GMMap1->OnCenterChanged = &GMMapCenterChanged;
GMMap1->OnRightClick = &GMMapRightClick;
}
 
void __fastcall TForm1::GMMapRightClick(TObject *Sender, TLatLng *LatLng, double X, double Y)
 
{
ClickedPoint.Lat = LatLng->Lat;
ClickedPoint.Lng = LatLng->Lng;
PopupMenu1->Popup(Mouse->CursorPos.x, Mouse->CursorPos.y);
}
 
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 783


Re: Для работы с Google maps
« Ответ #7 : 12 Октябрь 2012, 11:12:34 »

Большое спасибо!
Записан
Homa
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 3


Re: Для работы с Google maps
« Ответ #8 : 25 Март 2013, 02:04:53 »

всем привет! хорошая робота, но не могли бы Вы подробнее объяснить как с нуля отобразить карту. Ваш пример компилится а свой создать по аналогии не получается
Заранее спасибо
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Для работы с Google maps
« Ответ #9 : 25 Март 2013, 14:41:07 »

Цитата: Homa от 25 Март 2013, 02:04:53
всем привет! хорошая робота, но не могли бы Вы подробнее объяснить как с нуля отобразить карту. Ваш пример компилится а свой создать по аналогии не получается
Заранее спасибо

Что значит "с нуля"? Компоненты Google Maps Library установил? Если установил, тогда никаких проблем:
1) кидаешь на форму TGMMap
2) кидаешь TWebBrowser
3) связываешь TGMMap с TWebBrowser: прописываешь свойство TGMMap::WebBrowser = имя компонента TWebBrowser (например WebBrowser1)

И все Теперь в рантайме (после запуска приложения):
Код
GMMap1->Active = true; // активируем карту
GMMap1->DoMap(); // навигация на указанное место
 
Записан
Homa
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 3


Re: Для работы с Google maps
« Ответ #10 : 26 Март 2013, 02:55:58 »

я глубоко извиняюсь, но лыжи не едут) Не определяет страницу и не компилируется статически (просит [ilink32 Error] Error: Unable to open file 'GMMAPRES.RES'). Ваш проект тоже самое говорит. Стоит XE3
« Последнее редактирование: 26 Март 2013, 03:02:23 от Homa » Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Для работы с Google maps
« Ответ #11 : 26 Март 2013, 13:58:41 »

Цитата: Homa от 26 Март 2013, 02:55:58
я глубоко извиняюсь, но лыжи не едут) Не определяет страницу и не компилируется статически (просит [ilink32 Error] Error: Unable to open file 'GMMAPRES.RES'). Ваш проект тоже самое говорит. Стоит XE3

Так ведь при установке компонентов надо прописать пути к библиотечным ресурсам и исходникам! Файл GMMAPRES.RES - файл ресурсов, который используется библиотекой. Путь к каталогу, в котором хранится этот файл, необходимо прописать в Tools | Options | C++ Options | Paths & Directories | Library path, ... | Browsing path. По этим путям должны быть прописаны каталоги, содержащие файлы типа *.dll, *.bpl, *.bpi, *.res и проч. (т.е. скомпилированные ресурсы и библиотеки). А каталоги, содержащие исходники (*.h, *.hpp), надо добавить в Tools | Options | C++ Options | Paths & Directories | System Include path и ... | Browsing path. Для Делфи каталоги с ресурсами (*.res, *.dcu, *.bpl) прописывать соответственно в Tools | Options | Delphi Options | Library | Library path, ... | Browsing path, а исходники (*.pas) - только в ... | Browsing path. Стандартная процедура, однако.
Записан
Homa
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 3


Re: Для работы с Google maps
« Ответ #12 : 09 Апрель 2013, 03:54:34 »

Спасибо за Вашу неохватную помощь. Разобрался. Но в процессе появился, надеюсь последний, вопрос.
На скрине ниже есть треугольник - возможно ли его как-то нанести на карту с привязкой координат и менять угол в зависимости от направления ветра?
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Для работы с Google maps
« Ответ #13 : 09 Апрель 2013, 13:13:03 »

Цитата: Homa от 09 Апрель 2013, 03:54:34
Спасибо за Вашу неохватную помощь. Разобрался. Но в процессе появился, надеюсь последний, вопрос.
На скрине ниже есть треугольник - возможно ли его как-то нанести на карту с привязкой координат и менять угол в зависимости от направления ветра?

Есть 2 варианта - 1) простой, но грубый, и 2) сложный, но точный. По порядку.

1. Простой вариант - добавление стрелки как картинки маркера.
   1.1. Делаешь заранее столько картинок (указателей направления), сколько тебе требуется. Например, если направление ветра может изменяться от 0 до 359 градусов, делаешь 360 треугольников, каждый с соответствующим азимутом острой вершины. Для этого можно использовать любой графический редактор, желательно такой, в котором можно выполнить этот процесс в массовом режиме (скриптом, макросом и т.д.)
   1.2. Сохраняешь все картинки в папку, в ресурсы приложения, либо загружаешь на какой-нибудь файлообменный сервер. Пути или URL-ы можно для удобства сохранить в массив, чтобы можно было обращаться к картинке по индексу: massiv[180] = азимут 180 градусов.
   1.3. Добавляешь на карту маркер и указываешь в его свойстве Icon путь к соответствующей картинке (или URL). Например следующий код добавляет маркер в координаты (0,0) и картинку с направлением ветра 90 градусов (путь/URL из массива).
Код:
Gmmarkervcl::TMarker* Marker = MarkerObject->Add(0.0f, 0.0f, "Направление ветра");
Marker->Icon = massiv[90];

Недостатки этого варианта:
- необходимость создавать заранее большое количество изображений (и хранить их где-то)
- точность направления указателя ограничена количеством изображений (360 изображений = 1 градус, 180 изображений = 2 градуса и т.д.)

2. Сложный вариант - рисование указателя (треугольника) непосредственно на карте.
   2.1. Дана точка, заданная координатами (x0, y0). Дан азимутальный угол направления a (в градусах от Северного полюса). Дан радиус окружности R, внутри которой располагается указатель (равнобедренный треугольник), причем R = длинная сторона треугольника. Тогда:
      2.1.1. Вершину треугольника, указывающего направление, совмещаем с центром (x0, y0).
      2.2.2. Две другие вершины треугольника будут задаваться координатами x1 = X0 + cos[a - beta/2], y1 = y0 + sin[a - beta/2]; x2 = X0 + cos[a + beta/2], y2 = y0 + sin[a + beta/2], где beta - острота указателя, т.е. угол при указывающей вершине (x0, y0).
   2.2. Рисуем фигуры по полученным координатам:      
      2.2.1. Треугольник с вершинами (x0,y0), (x1,y1), (x2,y2) - при помощи компонента TGmPolygon.
      2.2.2. При желании, также описанную около треугольника окружность при помощи компонента TGmCircle. Для этого см. правила нахождения центра и радиуса описанной окружности.
      
      Параметры отрисовки обеих фигур настраиваешь как тебе надо при помощи свойств FillColor, FillOpacity, StrokeColor, StrokeOpacity, StrokeWeight.
« Последнее редактирование: 09 Апрель 2013, 15:34:38 от S0mbre » Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 783


Re: Для работы с Google maps
« Ответ #14 : 18 Апрель 2013, 12:46:14 »

Вышла версия 1.0.0 final:
скачать
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 783


Re: Для работы с Google maps
« Ответ #15 : 18 Апрель 2013, 14:00:57 »

Streetview похоже не работает. Попробовала MegaDemo. Результат на рисунке.
С++ Builder XE3 Win 7 (64).
картинка
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Для работы с Google maps
« Ответ #16 : 19 Апрель 2013, 11:17:43 »

Цитата: SilverFish от 18 Апрель 2013, 14:00:57
Streetview похоже не работает. Попробовала MegaDemo. Результат на рисунке.
С++ Builder XE3 Win 7 (64).
картинка


У меня на XP SP3 та же ошибка. Однако встроенный гугловский контрол "оранжевый человечек" работает, панорамы отображаются (хотя и не так быстро как в Google Maps).
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 783


Re: Для работы с Google maps
« Ответ #17 : 23 Сентябрь 2013, 21:45:56 »

StreetView починили и новый релиз также вышел:
- Google Maps Library v1.2.0
 - Improvement: General -> compiled under XE5.
 - Improvement: JavaScript -> Activated visual refresh view of Google Maps.
 - Improvement: TCustomGMMap -> added GetMaxZoom method.
 - Improvement: TCustomMarker -> added CrossOnDrag property.
 - Improvement: TCustomGMMarker -> added OnCrossOnDragChange event.
 - Improvement: Added Hungarian language (thanks Bуgбncs Sбndor)
 - bug fixed: TAddressComponentsList -> fixed Memory leak on Destroy method (GC: issue 13).
 - bug fixed: TWebControl.SaveToJPGFile -> save 2 extra pixels (GC: issue 17).

Download via SVN a new release compatible with XE5
ссылка

Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Для работы с Google maps
« Ответ #18 : 24 Сентябрь 2013, 11:00:55 »

Цитата: SilverFish от 23 Сентябрь 2013, 21:45:56
Download via SVN a new release compatible with XE5
ссылка

Что-то не идет закачка. Не можешь прислать скачанную библу? )
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 783


Re: Для работы с Google maps
« Ответ #19 : 24 Сентябрь 2013, 12:02:18 »

Цитата: S0mbre от 24 Сентябрь 2013, 11:00:55
Цитата: SilverFish от 23 Сентябрь 2013, 21:45:56
Download via SVN a new release compatible with XE5
ссылка

Что-то не идет закачка. Не можешь прислать скачанную библу? )

ссылка
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Для работы с Google maps
« Ответ #20 : 24 Сентябрь 2013, 13:17:47 »

Цитата: SilverFish от 24 Сентябрь 2013, 12:02:18
ссылка

Dankesch?n!
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 783


Re: Для работы с Google maps
« Ответ #21 : 24 Сентябрь 2013, 16:17:05 »

svn вроде уже работает http://gmlibrary.googlecode.com/svn/trunk/
« Последнее редактирование: 24 Сентябрь 2013, 16:23:19 от SilverFish » Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Для работы с Google maps
« Ответ #22 : 25 Сентябрь 2013, 08:20:43 »

Цитата: SilverFish от 24 Сентябрь 2013, 16:17:05
svn вроде уже работает http://gmlibrary.googlecode.com/svn/trunk/

Не хочется файлы по отдельности выкачивать ) Спасибо еще раз. GM 1.2 поставил, но пока есть непонятный баг при запуске приложения ("не найден указанный модуль"). Выясняю...
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 783


Re: Для работы с Google maps
« Ответ #23 : 25 Сентябрь 2013, 09:04:08 »

Цитата: S0mbre от 25 Сентябрь 2013, 08:20:43
Цитата: SilverFish от 24 Сентябрь 2013, 16:17:05
svn вроде уже работает http://gmlibrary.googlecode.com/svn/trunk/

Не хочется файлы по отдельности выкачивать ) Спасибо еще раз. GM 1.2 поставил, но пока есть непонятный баг при запуске приложения ("не найден указанный модуль"). Выясняю...

Может у меня плохо скачалось...
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Для работы с Google maps
« Ответ #24 : 26 Сентябрь 2013, 10:16:37 »

Нет, ошибка повторяется на всех версиях библиотеки. Видимо, ошибка в ОС или настройках безопасности браузера.
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 783


Re: Для работы с Google maps
« Ответ #25 : 26 Сентябрь 2013, 12:13:50 »

Цитата: S0mbre от 26 Сентябрь 2013, 10:16:37
Нет, ошибка повторяется на всех версиях библиотеки. Видимо, ошибка в ОС или настройках безопасности браузера.

Может у разработчика спросить?
Questions: http://stackoverflow.com  with gmlib tag
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Для работы с Google maps
« Ответ #26 : 27 Сентябрь 2013, 07:42:14 »

Решил проблему простым способом: снес IE10, вернул IE9.
Всем на заметку: не устанавливайте IE10!
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 783


Re: Для работы с Google maps
« Ответ #27 : 27 Сентябрь 2013, 09:30:36 »

Цитата: S0mbre от 27 Сентябрь 2013, 07:42:14
Решил проблему простым способом: снес IE10, вернул IE9.
Всем на заметку: не устанавливайте IE10!

У меня IE 10 установлен уже давно…
Прошлая версия GM 1.1 работала без проблем, не взирая на IE 10. Новую версию GM 1.2 еще не ставила, но если новая версия GM 1.2, судя по вашим словам, не работает то это явно проблема самой GM 1.2, ведь предыдущая версия GM 1.1 работала у меня без проблем с установленным IE 10…
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Для работы с Google maps
« Ответ #28 : 27 Сентябрь 2013, 20:53:05 »

Может, просто настройки в этом IE10 какие-то хитрые были... факт есть факт - снес его, и все заработало.
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 783


Re: Для работы с Google maps
« Ответ #29 : 27 Сентябрь 2013, 20:55:43 »

Цитата: S0mbre от 27 Сентябрь 2013, 20:53:05
Может, просто настройки в этом IE10 какие-то хитрые были... факт есть факт - снес его, и все заработало.

А если у пользователя будет установлен IE10, то новая версия программы с GM 1.2 уже не будет нормально работать у этого пользователя?
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.065 секунд. Запросов: 21.