Всех приветствую, хочу продолжить тему по MapWindow GIS в Delphi, а на этот раз хотелось бы поговорить о новой версии, которая вышла совсем недавно в июне, данного года, последняя версия сборки 4.8.2. Скачать можно с официального сайта MapWindow GIS, благо данная ГИС и все ее компоненты бесплатны.
Не забудьте удалить старую версию MapWindow GIS, а после этого начинайте устанавливать последнюю, скаченную версию, в которой достаточно много обновлений.
Теперь, давайте пробежимся немного по нововведениям:
- При запуске проекта, теперь, открытый пользователем, слой будет случайным образом принимать цвет (в старой версии был один и тот же цвет, светло-желтый).
- Теперь, напрямую можно создавать метки в shape-файле, да и еще в очень красивой цветовой гамме (в этой статье, мы это и рассмотрим)
- был изменен ряд функций и свойств различных объектов, которые постепенно, мы будем рассматривать в последующих статьях.
Я еще в новой версии сильно не разбирался, сразу, что захотелось опробовать — метки, с новой цветовой гаммой, которое должно понравиться многим, данного эффекта можно было достичь и в старой версии, но было бы намного труднее, чем сейчас.
Теперь перейдем к нашему проекту в Delphi. Установите компонент TMap на форму, я его буду создавать в режиме run-time, ну и кнопку установим на форму, чтобы по нажатию на нее, загружался наш слой, на нем размещались метки и данный слой отображался в компоненте TMap.
Преимущество данного метода размещения меток заключается в том, что нам не обязательно знать в каком поле размещены название объектов карты и напрямую считывать их с файла атрибутов (нам только необходимо знать номер поля, а название необязательно и дополнительно считывать с файла атрибутов).
Ну что, теперь напишем код, на событие OnClick нашей кнопки, а потом по-тихоньку начнем его разбирать.
procedure TForm1.btn1Click(Sender: TObject);
var
shp:IShapefile;
sheme:IColorScheme;
i:integer;
mp:TMap;
begin
try
if dlgOpen1.Execute then
begin
shp:=CoShapefile.Create;
shp.Open(dlgOpen1.FileName,nil);
shp.Labels.FrameVisible:=True;
shp.GenerateLabels(1,lpCentroid,true);
if shp.Labels.GenerateCategories(0,ctNaturalBreaks,5) then
begin
shp.Labels.ApplyCategories;
sheme:=CoColorScheme.Create;
sheme.SetColors2(Orange,LemonChiffon);
shp.Labels.ApplyColorScheme2(ctSchemeGraduated,sheme,leFrameBackground);
end;
mp:=TMap.Create(Form1);
mp.Width:=500;
mp.Height:=250;
mp.Visible:=True;
mp.Parent:=Form1;
mp.SetFocus;
mp.AddLayer(shp,TRUE);
for i:=0 to shp.NumShapes do
mp.ShapeLayerLineColor[0]:=clRed;
mp.ZoomToMaxExtents;
end
else
exit;
except
on e:Exception do
end;
end;
Как видите, у объектов интерфейса IShapefile появилось новое свойство Labels, с помощью которого мы и будем задавать начальные настройки для отображения наших меток на слое. С помощью свойства FramVisible задаем, что параметры меток, будут использованы всеми категориями.
Дальше, с помощью функции GenerateLabels, мы генерируем метки, то есть указываем номер поля, в котором расположены название объектов, затем указываем их расположение.
Дальше, с помощью функции GenerateCategories, мы создаем категории, после чего создаем цветовую схему, она может быть любой, и дальше с помощью процедуры ApplyColorScheme2 мы применяем нашу схему, к нашим меткам, на конце процедуры 2, так как существуют еще 2 таких метода, которые применяются к отдельным частям меткам, данный метод применяет цветовую схему к шрифту и рамке, где находится сама метка.
Дальше, все знакомо, отображаем с метками наш слой, в компоненте TMap. Вот такие вот получаются метки:
Ну, а исходник можно скачать тут (IDE Delphi 7).