Всем привет, тут хотелось бы поговорить о том, как можно сделать небольшие и самые нужные настройки в компоненте TMap. Ну, например, такие настройки, как перемещение по карте, увеличение, получение координат указателя мыши на карте. Статья получиться не сильно большой, но зато, в следующей статье, мы уже наконец-то приступим к тому: как разукрашивать границы карты (слоя); как разукрашивать, по-отдельности, регионы слоя (карты); как наносить на карту (слой) изображения, метки, текст; для чего нужен файл *.dbf; получения информации из данного файла и многое другое. В общем чем дальше, тем веселее будет.
Ну что, давайте приступим, а начнем мы с того, как можно определить координаты указателя мыши, который находится на нашей карте (слое). Тут есть небольшие нюансы, сразу я думаю у всех в голове вспомнилось событие OnMouseMove. Но скажу сразу, что тут не все так просто. Тут необходимо координаты мыши преобразовывать в географические координаты, в итоге на событии OnMouseMove у меня следующий код:
procedure TForm1.Map1MouseMove(ASender: TObject; Button, Shift: Smallint;
x, y: Integer);
var
XX,YY:double;
begin
Map1.PixelToProj(x,y,XX,YY);
StatusBar1.Panels[0].Text := 'Lat='+FloatTostr(XX);
StatusBar1.Panels[1].Text := 'Long='+FloatTostr(YY);
end;
С помощью процедуры PixelToProj мы преобразуем координаты мыши в географические и я их вывожу на строку состояния (Вы можете выводить куда угодно):
То есть, увидели, как оно показывает координаты. Да, кстати, вот такой вот проект я выложу в следующей статье (полный с исходниками). В этой статье исходников прикладывать не буду, так как в этой статье должно быть итак все понятно, а данный проект выкладывать еще рано, иначе смысл следующей статьи потеряется.
Идем дальше, теперь мы будем изменять вид курсора, чтобы он менял вид и можно было с помощью курсоров: увеличивать, уменьшать, перемещаться по карте, выделять элементы. Тут очень все просто, в этом нам поможет свойство компонента TMap - CursorMode. Список значений данного свойства
- 0 -cm ZoomIn — курсор для увеличения масштаба
- 1- cmZoomOut — курсор для уменьшения масштаба
- 2 — cmPan - курсор для перемещения по карте
- 3 — cmSelection — курсор для выделения
- 4 — cmNone — убрать все курсоры (останется курсор в виде стрелку)
Идем дальше, рассмотрим, как получить идентификатор слоя, нам это потребуется в следующей статье, так как необходимо будет указывать, на каком слое размещать метки и так далее (указывается его идентификатор).
Когда, мы добавляем новый слой, то просто необходимо это записать в переменную:
HandleLayer:=Map1.AddLayer(shp,true);
Переменная HandleLayer типа integer.
Если вдруг, вы увеличиваете карту, то чтобы вернуть ее в полноразмерный вид, необходимо написать следующий код:
Map1.ZoomToMaxExtents;
А для того, чтобы вернуться к предыдущему виду, то необходимо написать следующий код:
procedure TForm1.ToolButton4Click(Sender: TObject);
begin
Map1.ZoomToPrev;
end;
Для того, чтобы очистить все слои на карте, воспользуемся следующим кодом:
procedure TForm1.ToolButton5Click(Sender: TObject);
begin
Map1.RemoveLayer(HandleLayer);
end;
Для того, чтобы спрятать/показать слой, то воспользуемся кодом:
procedure TForm1.ToolButton6Click(Sender: TObject);
begin
if Map1.LayerVisible[HandleLayer]=False then
Map1.LayerVisible[HandleLayer]:=True
else
Map1.LayerVisible[HandleLayer]:=False;
end;
Ну, для того, чтобы получить проекцию карты, думаю уже из прошлой статьи понятно, как это сделать:
Caption:=shp.Projection;
Ну вот и все. Более-менее такие основные настройки я показал, теперь остается лишь ждать следующий статьи, там будет намного интереснее. Так как, мы уже будем делать полноценную карту с метками, надписями и разноцветную.
Установка sql 2008 занимает не мало времени. К тому же его надо настраивать. Из источника вы найдете пошаговую инструкцию с подробным описанием установки и настройки, которая сэкономит ваше время.
Все статьи по MapWindow GIS на моем блоге:
- Работа с MapWindow GIS. Обзор
- Работа с MapWindow GIS. Загрузка карт
- Работа с MapWindow GIS. Проекция карт
- Работа с MapWindow GIS. Настройки TMap
Метки: ActiveX, GIS, MapWindow GIS, MapWindow GIS в Delphi, MapWinGIS, TMap, ГИС, Настройки TMap
спасибо, за статьи!! оч интересно! у меня есть только один вопрос, возможно ли осуществлять поиск по карте (городов, рек), используя MapWindow GIS?
Я, думаю, что возможно, так как к каждому shp-файлу, прилагается dbf-файл, в котором находятся названия городов, областей и так далее, а также их координаты. Можно осуществить поиск просто по БД, взять оттуда географические координаты и установить проекцию, это только что пришло на ум мне, может можно как-то организовать это дело по-другому.
спасибо! буду разбираться и ждать следующей статьи
Здравствуйте.
Изучаю ваши материалы. Очень полезные сведения. Вот возник вопрос. Имеется карта республики. В QGIS все отображается красиво, цветами, как надо. По вашим материалам попробовала загрузить только файл формата shp. Очертания дорог имеются, но в виде тонких черных линий. В QGIS все отображается как надо, жирной линией и цветом. Но в приложение к shp-файлу слоя имеется еще несколько файлов (формата cpg, dbf, prj, qix, shx, qml), в которых, как я предполагаю, хранятся какие-то настройки и сведения по слою карты. Хотелось спросить, можно ли с ними как-то работать и можете ли Вы рассказать, как именно их использовать.
Спасибо. =)
можно, но это все будет в следующих статьях
[…] Работа с MapWindow GIS. Настройки TMap […]
[…] Работа с MapWindow GIS. Настройки TMap […]
[…] Работа с MapWindow GIS. Настройки TMap […]
Уважаемый автор, Вы привели пример преобразования координат мыши в географические координаты с использованием функции Map1.PixelToProj( … ) и вывода их в строку состояния. Воспроизвел данный пример у себя, вводит карту и работает прекрасно. Но не могу понять, в каких единицах отображаются преобразованные координаты ? На радианы непохоже, на градусы или метры тоже … И если они не в радианах, не в метрах и не в градусах, то как их преобразовать в оные ?