- Регистрация
- 9 Май 2015
- Сообщения
- 1,562
- Баллы
- 155
Понадобилось в одном из проектов сделать отображение клиентов на карте. Стал копать в интернете как связаны Delphi и карты.
В одном из блогов увидел что для Delphi есть библиотека компонентов для работы , называются он GMLib(Google Maps Library).
Скачать можно тут .
Библиотека очень проста в работе. Для отображения карт используется компонент delphi Webbrowser.
Простой пример использования данной библиотеки.
На форму кидается компонент webbrowser.
Затем добавляются компоненты
GMMap - это компонент для управления картой.
GMMarker - компонент для управления отметками на карте.
GMGeoCode - компонент для запросов и геокодирования.
У компонента GMMap настраиваются различные параметры для отображения карты, а так же указывается webbrowser куда карта будет выводится, а также устанавливается свойсто GMMap.active:= true .
У компонента GMGeoCode указывается GMMap и GMMarker .
У компонента GMMarker указывается компонент GMMap.
Затем в обработчике события GMMap.AfterPageLoaded пишется следующий код.
Если все настроено правильно то после запуска приложения должна отобразится карта, точнее место карты с нулевой широтой и долготой. Это где то в Атлантическом океане.
Для поиска на карте добавил необходимо добавить компоненты edit и button
В обработчике события Button1.Click написать следующий код
Что бы код заработал, добавьте в раздел uses юниты GMConstants, GMFunctionsVCL
Пример работы

По вопросам комментаторов по поводу определение высоты точки. Для этого я переделал форму. Добавил на нее компонент GMElevation1 (он появился в одной из последних версий компонентов) и StatusBar1, затем переписал исходный код. Он немного кривой но работоспособный, поскольку в демо примере что идет с компонентами попытка определить высоту завершается ошибкой.
Пример работы нового кода.

Демо самого урока
В одном из блогов увидел что для Delphi есть библиотека компонентов для работы , называются он GMLib(Google Maps Library).
Скачать можно тут .
Библиотека очень проста в работе. Для отображения карт используется компонент delphi Webbrowser.
Простой пример использования данной библиотеки.
На форму кидается компонент webbrowser.
Затем добавляются компоненты
GMMap - это компонент для управления картой.
GMMarker - компонент для управления отметками на карте.
GMGeoCode - компонент для запросов и геокодирования.
У компонента GMMap настраиваются различные параметры для отображения карты, а так же указывается webbrowser куда карта будет выводится, а также устанавливается свойсто GMMap.active:= true .
У компонента GMGeoCode указывается GMMap и GMMarker .
У компонента GMMarker указывается компонент GMMap.
Затем в обработчике события GMMap.AfterPageLoaded пишется следующий код.
Код:
procedure TForm1.GMMap1AfterPageLoaded(Sender: TObject; First: Boolean);
begin
if First then // проверка что загрузились изображения
begin
GMMap1.DoMap; // отображение карты
end;
end;
Для поиска на карте добавил необходимо добавить компоненты edit и button
В обработчике события Button1.Click написать следующий код
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
GMGeoCode1.Marker.Clear;
GMGeoCode1.Geocode(Edit1.Text);
if GMGeoCode1.GeoStatus = gsWithoutState then
Exit;
if GMGeoCode1.Count = 0 then
begin
ShowMessage('Адрес не найден на карте, возможно он указан не правильно.');
end
else
begin
for i := 0 to GMGeoCode1.Count-1 do
begin
GMGeoCode1.Marker.Add(GMGeoCode1.GeoResult[i].Geometry.Location.Lat,
GMGeoCode1.GeoResult[i].Geometry.Location.Lng,
GMGeoCode1.GeoResult[i].FormatedAddr);
GMGeoCode1.Marker.Items[i].MarkerType := mtStandard;
end;
end;
end;
Пример работы

По вопросам комментаторов по поводу определение высоты точки. Для этого я переделал форму. Добавил на нее компонент GMElevation1 (он появился в одной из последних версий компонентов) и StatusBar1, затем переписал исходный код. Он немного кривой но работоспособный, поскольку в демо примере что идет с компонентами попытка определить высоту завершается ошибкой.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
mypoint: TLatLng;
begin
GMGeoCode1.Marker.Clear;
GMGeoCode1.Geocode(Edit1.Text);
mypoint := TLatLng.Create;// создаем обьект TLatlng для хранения координат
if GMGeoCode1.GeoStatus = gsWithoutState then
Exit;
if GMGeoCode1.Count = 0 then
begin
ShowMessage('Адрес не найден на карте, возможно он указан не правильно.');
end
else
begin
for i := 0 to GMGeoCode1.Count - 1 do
begin
GMGeoCode1.Marker.Add(GMGeoCode1.GeoResult[i].Geometry.Location.Lat, GMGeoCode1.GeoResult[i].Geometry.Location.Lng, GMGeoCode1.GeoResult[i].FormatedAddr);
GMGeoCode1.Marker.Items[i].MarkerType := mtStandard;
StatusBar1.Panels[0].Text := 'lat: ' + FloatToStr(GMGeoCode1.GeoResult[i].Geometry.Location.Lat);
StatusBar1.Panels[1].Text := 'lng: ' + FloatToStr(GMGeoCode1.GeoResult[i].Geometry.Location.Lng);
mypoint.Lat := GMGeoCode1.GeoResult[i].Geometry.Location.Lat; // добавляем широту
mypoint.Lng := GMGeoCode1.GeoResult[i].Geometry.Location.Lng; // добавляем долготу
GMElevation1.Clear; // очищаем список
GMElevation1.AddLatLng(mypoint); // добвляем коодинаты для которых нужна высота
GMElevation1.Execute; // делаем запрос
StatusBar1.Panels[2].Text := 'Высота: '+ FloatToStr(GMElevation1.ElevationResult.Items[0].Elevation); // получаем высоту обьекта
GMMap1.SetCenter(GMGeoCode1.GeoResult[i].Geometry.Location.Lat, GMGeoCode1.GeoResult[i].Geometry.Location.Lng);
end;
end;
end;

Демо самого урока
Вложения
-
3.8 МБ Просмотры: 11