Работа с MapWindow GIS. Новая версия 4.8.2. Сохранение настроек и опций

6 минут на чтение

Всем привет, продолжаем тему с 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] &gt;= 66.000000 AND [AREA] &lt; 30867.031000" Enabled="-1" />
          <LabelCategoryClass FrameBackColor="3390207" FrameVisible="-1" Name="30.87k - 49.05k" Expression="[AREA] &gt;= 30867.031000 AND [AREA] &lt; 49046.813000" Enabled="-1" />
          <LabelCategoryClass FrameBackColor="6737919" FrameVisible="-1" Name="49.05k - 70.00k" Expression="[AREA] &gt;= 49046.813000 AND [AREA] &lt; 70002.392000" Enabled="-1" />
          <LabelCategoryClass FrameBackColor="10085631" FrameVisible="-1" Name="70.00k - 157.7k" Expression="[AREA] &gt;= 70002.392000 AND [AREA] &lt; 157774.187000" Enabled="-1" />
          <LabelCategoryClass FrameBackColor="13499135" FrameVisible="-1" Name="157.7k - 264.4k" Expression="[AREA] &gt;= 157774.187000 AND [AREA] &lt;= 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, чтобы сразу настройки применялись. Как видите все просто, особенно в новой версии, а дальше еще будет интереснее и проще. Исходный проект не прикладываю, если кому надо, то напишите в комментариях, обязательно прикреплю к данной теме.

Facebook Vk Ok Twitter LinkedIn Telegram

Похожие записи:

И снова здравствуйте, довольно много времени прошло с момента последней публикации по теме MapWindow GIS в Delphi и хочу сказать, что за этот период довольно много изменилось в самой MapWindow GIS. Вышла новая версия, в которой довольно много изменений, а еще ...
Всех приветствую, хочу продолжить тему по MapWindow GIS в Delphi, а на этот раз хотелось бы поговорить о новой версии, которая вышла совсем недавно в июне, данного года, последняя версия сборки 4.8.2. Скачать можно с официального сайта MapWindow GIS, благо дан...
Всем доброго времени суток. Давненько я не писал ничего про MapWindow GIS в Delphi. Может оно и к лучшему, так как летом вышла очередная новая версия данного ActiveX-компонента, в которой наконец-то появилась поддержка Google-карт. Мы уже с Вами рассматривали ...