Всем привет, продолжаем тему с MapWindow GIS, а в особенности рассматриваем тему, которая посвящена именно выходу новой версии MapWindow GIS в виде ActiveX-компонента, в которой появилось достаточно много изменений, о которых (о некоторых) я вспоминал в данной теме.
В данной статье мы рассмотрим, как можно с легкостью сохранить настройки, которые мы применили к нашему слою. Все настройки будут сохранены в XML-файл, что очень удобно. Конечно можно сохранять поочередно настройки в INI-файл, затем их считывать оттуда, а если мы сохраним настройки встроенным методом в новой версии MapWindow GIS, то точно таким же мы одним методом можем и загрузить эти все настройки из XML-файла.
Для начала нам понадобиться добавить на слой какие-нибудь настройки, то есть цветовую гамму, метки и так далее, чтобы это все потом можно было сохранить в файл. Ну и конечно давайте приступим к созданию нашего проекта, создадим проект в Delphi и на форму установим следующие компоненты:
- TMap
- TButton -3 шт
- TOpenDialog
Собственно ActiveX-компонент TMap нам понадобится для того, чтобы отобразить нами, выбранный слой, TButton - для загрузки слоя, а остальные 2 TButton для сохранения и загрузки настроек из XML-файла.
Ну что приступим, для начала нам необходимо нанести на слой некоторые настройки, чтобы соответственно их потом и сохранять в файл и грузить из файла.
Для начала нам на событие кнопки OnClick напишем код, который просто будет заливать цветом отдельные регионы, а также рисовать границу отдельным цветом, вот код:
procedure TForm1.btn1Click(Sender: TObject);
var
i:integer;
mp:TMap;
id_layer:integer;
shp:IShapefile;
begin
try
if dlgOpen1.Execute then
begin
shp:=CoShapefile.Create;
shp.Open(dlgOpen1.FileName,nil);
mp:=TMap.Create(Form1);
mp.Width:=500;
mp.Height:=250;
mp.Visible:=True;
mp.Parent:=Form1;
mp.SetFocus;
id_layer:=mp.AddLayer(shp,TRUE);
for i:=0 to shp.NumShapes do
begin
mp.ShapeLayerLineColor[0]:=clRed;
mp.ShapeLayerFillColor[0]:+clGreen;
end;
mp.ZoomToMaxExtents;
end
else
exit;
except
on e:Exception do
end;
end;
Это мы уже проходили, так что для Вас тут не должно быть ничего нового, только хочу заметить, что здесь я создаю компонент TMap в режиме runtime, хотя выше писал, что установил его на форму, но это не имеет никакого значения, можно и установить на форму.
Идем дальше, теперь нам необходимо сохранить все эти настройки в файл, можно, как я говорил раньше в Ini-файл, но можно проще (мне, кстати, поступало достаточно вопросов о том, как все, что нарисовал на слое и разукрасил его, сохранить, в новой версии MapWindow GIS все просто), для этого у компонента TMap существуют две функции:
- LoadLayerOptions — загружает настройки
- SaveLayerOptions — сохраняет настройки
Теперь, давайте напишем код, который будет сохранять все данные настройки, которые мы сделали на нашем слое:
procedure TForm1.btn2Click(Sender: TObject);
begin
mp.SaveLayerOptions(id_layer,'default',True,'');
end;
После этого, откуда Вы загружали слой (из какой директории), появиться файл, в той же директории, формата:
имя_слоя.расширение_слоя.default.mwsymb
Скажу сразу, не пугайте из-за расширения данного файла, если его открыть обычным текстовым редактором, то можно увидеть, что данный файл имеет формат XML:
<MapWinGIS OcxVersion="4.8" FileType="LayerFile" FileVersion="0" Description="description">
<Layer LayerType="Shapefile" LayerName="" LayerVisible="1" LayerKey="" Filename="">
<ShapefileClass>
<DefaultDrawingOptions FillColor="13943477" LineColor="255" />
<ShapefileCategoriesClass />
<LabelsClass FrameVisible="-1" Generated="1" Positioning="1">
<LabelCategories>
<LabelCategoryClass FrameBackColor="42495" FrameVisible="-1" Name="66 - 30.87k" Expression="[AREA] >= 66.000000 AND [AREA] < 30867.031000" Enabled="-1" />
<LabelCategoryClass FrameBackColor="3390207" FrameVisible="-1" Name="30.87k - 49.05k" Expression="[AREA] >= 30867.031000 AND [AREA] < 49046.813000" Enabled="-1" />
<LabelCategoryClass FrameBackColor="6737919" FrameVisible="-1" Name="49.05k - 70.00k" Expression="[AREA] >= 49046.813000 AND [AREA] < 70002.392000" Enabled="-1" />
<LabelCategoryClass FrameBackColor="10085631" FrameVisible="-1" Name="70.00k - 157.7k" Expression="[AREA] >= 70002.392000 AND [AREA] < 157774.187000" Enabled="-1" />
<LabelCategoryClass FrameBackColor="13499135" FrameVisible="-1" Name="157.7k - 264.4k" Expression="[AREA] >= 157774.187000 AND [AREA] <= 264437.000000" Enabled="-1" />
</LabelCategories>
</LabelsClass>
<ChartsClass />
</ShapefileClass>
</Layer>
</MapWinGIS>
Ну, а теперь, если изменить наш слой, а затем загрузить данные параметры, с помощью функции:
procedure TForm1.btn3Click(Sender: TObject);
begin
mp.LoadLayerOptions(id_layer,'default',EmptyWideStr);
mp.Refresh;
end;
То настройки вернуться в начальное состояние, ну и в самом конце, на всякий случай обновляем наш компонент TMap, чтобы сразу настройки применялись. Как видите все просто, особенно в новой версии, а дальше еще будет интереснее и проще. Исходный проект не прикладываю, если кому надо, то напишите в комментариях, обязательно прикреплю к данной теме.