Всем привет, тут хотелось бы поговорить о том, как можно сделать небольшие и самые нужные настройки в компоненте 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;
Ну вот и все. Более-менее такие основные настройки я показал, теперь остается лишь ждать следующий статьи, там будет намного интереснее. Так как, мы уже будем делать полноценную карту с метками, надписями и разноцветную.