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

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

Давайте теперь рассмотрим основные функции и свойства для того, чтобы сформировать диаграмму на нашей карте, функции и процедуры:

  • Function AddField (ChartField Field):Boolean – добавляетполевграфике.
  • Procedure Clear – полностью очищают все информацию о графиках (диаграммах).
  • Procedure ClearFields – полностью удаляет все поля диаграммы.
  • Function DrawChart(IntPt:PPSYSINT1; x:Single; y:Single; hideLabels:Boolean; BackColor:Cardinal):WordBool – данная функция позволяет рисовать диаграмму, которая может быть использована, например для отображения легенды карты.
  • Function Generate(Type_:TOleEnum):WordBool – создаетграфикдлякаждого shp-файла.
  • Function InsertField (Index:Integer;const Field:iChartField) – вставляетполе, которыйпредставляетсобойодинсектордиаграммы.
  • Function SaveToXML(const FileName:WideString):WordBool – сохраняетнастройкидиаграммыв XML-файл.
  • Function LoadFromXML(const Filename:WideString):WordBool – загружаетнастройкидиаграммыиз XML-файла, которые, например, былисохраненыприпомощифункции SaveToXML.
  • Function MoveField(oldIndex:Integer;newIndex:Integer):WordBool – изменяетпозициюполя (сектора), котороевлияетнаотображениядиаграммы.
  • Function RemoveField(ind:Integer) – удаляет поле, которое соответствует некоторому сектору диаграмме.
  • Function Select(constBoundingBox:IExtents;Tolerance:Integer;SelectMode:TOleEnum;varIndexes:OleVarinat):WordBool – выделяет индекса диаграмм, которые заданы в определенном прямоугольнике.
  • Function Serialize:WideString – преобразовывает состояние диаграммы в строку.
  • Procedure Deserialize(constnewVal:WideString) – восстанавливает состояние диаграммы из строки.

Ну а теперь пройдемся немного по основным свойствам:

  • AvoidCollisions:WordBool– определяет, могут ли диаграммы накладываться друг на друга.
  • BarHeight:Integer – задает высоту гистограммы в пикселях.
  • BarWidth:Integer – задает ширину гистограммы в пикселях.
  • Caption:WideString – получает или задает текстовую строку для описания данных диаграммы.
  • ChartType – получает или задает тип диаграммы.
  • Use3DMode:WordBool – устанавливает значение, в зависимости от которого будет зависеть, будет ли рисоваться диаграмма в 3D-режиме.
  • ValuesVisible:WordBool– указывает, будут ли значения рисоваться возле каждой диаграммы.
  • Visible:WordBool – указывает, будет ли виден график на карте.

Вот мы и рассмотрели самые основные свойства, процедуры и функции для построения график на наших картах. Теперь мы немного основные функции и процедуры, а также свойства опробуем на практике. Ну что давайте приступим к созданию нашего проекта. На форме я установил компонент TMapс вкладки ActiveX, а также 2 компонента TButton, один будет предназначен для загрузки карт, а второй для нанесения на карты диаграмм, это конечно можно сделать все на одно событие, но все, же разделим это дело. Также установим на форму компонент TOpenDialogи поставим ему фильтр, чтобы отображались только shp-файлы.  Давайте на событие первой кнопки OnClickнапишем следующий код:

procedure TForm1.Button1Click(Sender: TObject);
begin
   if OpenDialog1.Execute then
    begin
     shp:=CoShapefile.Create;
     shp.Open(OpenDialog1.FileName,nil);
     shp.Labels.FrameVisible:=True;
     shp.GenerateLabels(0,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;
     Map1.Focused;
     Map1.AddLayer(shp,true);
    end;
end;

Данный код позволяет загружать shp-файл и отображать его в компоненте TMap, а также генерирует метки с названием. Мы уже много рассматривали тем по данному вопросу, так что думаю тут итак все понятно, комментарии здесь излишни. Хотя в данном примере отображение меток лучше всего опустить. Теперь на событие OnClickнашей второй кнопки мы пишем следующий код:

procedure TForm1.Button2Click(Sender: TObject);
 var
 chartField:IChartField;
begin
   chartField:=CoChartField.Create;
   chartField.Name:='Length';
   chartField.Color:=LightBlue;
   chartField.Index:=12;
   shp.Charts.AddField(chartField);
   shp.Charts.Generate(lpInteriorPoint);
   shp.Charts.ChartType:=chtPieChart;
   shp.Charts.BarHeight:=100;
   shp.Charts.ValuesVisible:=True;
   shp.Charts.Visible:=True;
   shp.Charts.Caption:='Test';
end;

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

Если зададим тип графика – круговая (chtPieChart), то получиться примерно следующее:

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

Метки: , , , , ,




К записи “Работа с MapWindow Gis. Новая версия 4.8.2. Создание диаграмм на картах” оставлено комментариев: 5.

  1. Cat:

    Подскажите, пожалуйста, можно ли использовать MapWindow GIS в С++ Builder XE2-XE3? Спасибо.

    • Andrey:

      В С++ Builder возможно, насчет версий XE2 и X3 не знаю, попробуйте импортировать ActiveX компонент MapWindowGis и посмотреть, если получиться, то сообщите

  2. Не надо, пожалуйста, так явно выделять ключевые слова для поисковиков ;)

  3. Владимир:

    Привет! Возможно ли уменьшить время генерации и отображения меток?

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

Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*