Всем привет, тут хотелось бы поговорить о том, как можно сделать небольшие и самые нужные настройки в компоненте 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 мы преобразуем координаты мыши в географические и я их вывожу на строку состояния (Вы можете выводить куда угодно):

Внимание!!! Для того, чтобы использовать событие OnMouseMove компонента TMap, необходимо, грубо говоря, его включить. Для этого, на событие формы OnCreate, например, необходимо его активировать следующим образом Map1.SendMouseMove:=True;

То есть, увидели, как оно показывает координаты. Да, кстати, вот такой вот проект я выложу в следующей статье (полный с исходниками). В этой статье исходников прикладывать не буду, так как в этой статье должно быть итак все понятно, а данный проект выкладывать еще рано, иначе смысл следующей статьи потеряется.

Идем дальше, теперь мы будем изменять вид курсора, чтобы он менял вид и можно было с помощью курсоров: увеличивать, уменьшать, перемещаться по карте, выделять элементы. Тут очень все просто, в этом нам поможет свойство компонента TMap - CursorMode. Список значений данного свойства

  • 0 -cm ZoomIn — курсор для увеличения масштаба
  • 1- cmZoomOut — курсор для уменьшения масштаба
  • 2 — cmPan - курсор для перемещения по карте
  • 3 — cmSelection — курсор для выделения
  • 4 — cmNone — убрать все курсоры (останется курсор в виде стрелку)

Свойство CursorMode компонента TMap, может принимать как числовое значение, перечисленное в списке, так и типа TOleEnum

Идем дальше, рассмотрим, как получить идентификатор слоя, нам это потребуется в следующей статье, так как необходимо будет указывать, на каком слое размещать метки и так далее (указывается его идентификатор).

Когда, мы добавляем новый слой, то просто необходимо это записать в переменную:

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 на моем блоге:

  1. Работа с MapWindow GIS. Обзор
  2. Работа с MapWindow GIS. Загрузка карт
  3. Работа с MapWindow GIS. Проекция карт
  4. Работа с MapWindow GIS. Настройки TMap

Метки: , , , , , , ,




К записи “Работа с MapWindow GIS. Настройки TMap” оставлено комментариев: 9.

  1. Goryni4:

    спасибо, за статьи!! оч интересно! у меня есть только один вопрос, возможно ли осуществлять поиск по карте (городов, рек), используя MapWindow GIS?

    • Andrey53:

      Я, думаю, что возможно, так как к каждому shp-файлу, прилагается dbf-файл, в котором находятся названия городов, областей и так далее, а также их координаты. Можно осуществить поиск просто по БД, взять оттуда географические координаты и установить проекцию, это только что пришло на ум мне, может можно как-то организовать это дело по-другому.

  2. Goryni4:

    спасибо! буду разбираться и ждать следующей статьи :-)

  3. Maringo:

    Здравствуйте.

    Изучаю ваши материалы. Очень полезные сведения. Вот возник вопрос. Имеется карта республики. В QGIS все отображается красиво, цветами, как надо. По вашим материалам попробовала загрузить только файл формата shp. Очертания дорог имеются, но в виде тонких черных линий. В QGIS все отображается как надо, жирной линией и цветом. Но в приложение к shp-файлу слоя имеется еще несколько файлов (формата cpg, dbf, prj, qix, shx, qml), в которых, как я предполагаю, хранятся какие-то настройки и сведения по слою карты. Хотелось спросить, можно ли с ними как-то работать и можете ли Вы рассказать, как именно их использовать.

    Спасибо. =)

  4. Алекс:

    Уважаемый автор, Вы привели пример преобразования координат мыши в географические координаты с использованием функции Map1.PixelToProj( … ) и вывода их в строку состояния. Воспроизвел данный пример у себя, вводит карту и работает прекрасно. Но не могу понять, в каких единицах отображаются преобразованные координаты ? На радианы непохоже, на градусы или метры тоже … И если они не в радианах, не в метрах и не в градусах, то как их преобразовать в оные ?

Оставить комментарий

Вы можете использовать следующие теги:

*