Совершенствование модуля ГИС РАПИД для вывода графиков распределения значений слоев

Сведения о геоинформационной системе РАПИД. Разработка программы для модуля классификации текстур в среде Borland Delphi, позволяющей строить гистограммы распределения значений слоев с геоданными, с учетом разделения исследуемой территории на классы.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 24.06.2014
Размер файла 3,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

begin

drawlege;

end;

procedure TForm1.Button2Click(Sender: TObject);

type MData=array of array of real;

MSaved=array of array of string;

var i,p:integer; //номер серии - класса

j,k:integer;//номер бункера-интервала в серии

summ:MData;

clstat:MSaved;

Word,Table,Par,Doc:Variant;//для Word-а

h1,h2, h1sr,h2sr:real;//значения первой и второй гистограмм и их средние

sumh1,sumh2:real;//суммы первой и второй гистограмм

sumbhat:real;//сумма для Бхаттачария

korr,korr_chisl,korr_znam1,korr_znam2:real;//коэф. корр.

procedure AddToWord(data:MData;methodname,descr:string);

var wi,wp:integer;

begin

try

Word:=GetActiveOLEObject('Word.Application');

except

Word:=CreateOLEObject('Word.Application');

end;

setlength (clstat, Chart1.SeriesList.Count+1, Chart1.SeriesList.Count+1);

clstat[0,0]:=_(methodname); //название метода

for wi:= 1 to Chart1.SeriesList.Count do

begin

clstat[wi,0]:=chart1.Series[wi-1].Title;//название i-класса

clstat[0,wi]:=chart1.Series[wi-1].Title;

end;

for wi:=0 to Chart1.SeriesList.Count-1 do

for wp:=wi+1 to Chart1.SeriesList.Count-1 do

clstat[wi+1,wp+1]:= formatfloat('0.###',data[wi,wp]);

Word.Visible:=True;

if VarIsEmpty(doc) then //если документ еще не создан. Иначе допишем в конце.

Doc:=Word.Documents.Add();

Par:=Doc.Paragraphs.Add();

Par.Range.Text:=_(descr); // пояснительный текст

word.selection.font.size:=10;

word.selection.font.name:='arial cyr';

Par:=Doc.Paragraphs.Add();

doc.pagesetup.orientation:=1;

Par:=Doc.Paragraphs.Add();

Table:=Doc.Tables.Add(Par.Range,Chart1.SeriesList.Count+1, Chart1.SeriesList.Count+1);

table.borders.InsideLineStyle:=1;//wdLineStyleSingle;

table.borders.OutsideLineStyle:=1;//wdLineStyleSingle;

try

table.style:='Средняя заливка 2 - Акцент 1';

except end;

for wi:=0 to Chart1.SeriesList.Count do

for wp:=0 to Chart1.SeriesList.Count do

Table.Cell(wi+1,wp+1).Range.Text:=clstat[wi,wp];

Par:=Doc.Paragraphs.Add();

end;

begin

//пересечение

//создаем массив для результатов

setlength(summ,Chart1.SeriesList.Count,Chart1.SeriesList.Count);

for i:=0 to Chart1.SeriesList.Count-1 do //по каждой серии

for p:=i to Chart1.SeriesList.Count-1 do //по каждой серии

summ[i,p]:=0;

//рассчитывается как сумма (по j) ( мин(гист1[j], гист2[j]) );

for i:=0 to Chart1.SeriesList.Count-1 do //по каждой серии

for p:=i+1 to Chart1.SeriesList.Count-1 do //по каждой серии

for j:=0 to chart1.Series[0].Count-1 do

summ[i,p]:=summ[i,p]+min(chart1.Series[i].YValue[j],chart1.Series[p].YValue[j]);

AddToWord(summ,'Histogram distance', 'Histogram intersection. Higher values indicate more similarity.');

//названия переводятся внутри.

//2. Метод Хи-квадрат

//создаем массив для результатов

setlength(summ,Chart1.SeriesList.Count,Chart1.SeriesList.Count);

for i:=0 to Chart1.SeriesList.Count-1 do //по каждой серии

for p:=i to Chart1.SeriesList.Count-1 do //по каждой серии

summ[i,p]:=0;

//рассчитывается http://locv.ru/wiki/7.4.1_%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D0%B8%D1%81%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC

for i:=0 to Chart1.SeriesList.Count-1 do //по каждой серии

for p:=i+1 to Chart1.SeriesList.Count-1 do //по каждой серии

for j:=0 to chart1.Series[0].Count-1 do

begin

h1:=chart1.Series[i].YValue[j];

h2:=chart1.Series[p].YValue[j];

if h1+h2 <>0 then

summ[i,p]:=summ[i,p]+ (h1-h2)*(h1-h2)/(h1+h2);

end;

AddToWord(summ,'Histogram similarity', 'Chi-Square method. Values close to 0 indicate higher similarity.');

//3. Метод Бхаттачария

//создаем массив для результатов

setlength(summ,Chart1.SeriesList.Count,Chart1.SeriesList.Count);

for i:=0 to Chart1.SeriesList.Count-1 do //по каждой серии

for p:=i to Chart1.SeriesList.Count-1 do //по каждой серии

summ[i,p]:=0;

//рассчитывается http://locv.ru/wiki/7.4.1_%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D0%B8%D1%81%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC

for i:=0 to Chart1.SeriesList.Count-1 do //по каждой серии

for p:=i+1 to Chart1.SeriesList.Count-1 do //по каждой серии

begin

sumh1:=0;

sumh2:=0;

for j:=0 to chart1.Series[0].Count-1 do

begin

h1:=chart1.Series[i].YValue[j];

h2:=chart1.Series[p].YValue[j];

sumh1:=sumh1+h1;

sumh2:=sumh2+h2;

end;

if sumh1*sumh2 = 0 then continue; //нельзя сравнить эти две гист.

sumbhat:=0;

for j:=0 to chart1.Series[0].Count-1 do

begin

h1:=chart1.Series[i].YValue[j];

h2:=chart1.Series[p].YValue[j];

sumbhat:=sumbhat + sqrt(h1*h2) / sqrt(sumh1*sumh2);

end;

summ[i,p]:=sqrt(1-sumbhat);

end;

AddToWord(summ,'Histogram distance', 'Bhattacharyya distance. Lower values indicate higher similarity, 1 is for total difference.');

//4. Корреляция

//создаем массив для результатов

setlength(summ,Chart1.SeriesList.Count,Chart1.SeriesList.Count);

for i:=0 to Chart1.SeriesList.Count-1 do //по каждой серии

for p:=i to Chart1.SeriesList.Count-1 do //по каждой серии

summ[i,p]:=0;

for i:=0 to Chart1.SeriesList.Count-1 do //по каждой серии

for p:=i+1 to Chart1.SeriesList.Count-1 do //по каждой серии

begin

//расчет средних значений по гистограммам

sumh1:=0;

sumh2:=0;

for j:=0 to chart1.Series[0].Count-1 do

begin

h1:=chart1.Series[i].YValue[j];

h2:=chart1.Series[p].YValue[j];

sumh1:=sumh1+h1;

sumh2:=sumh2+h2;

end;

if (sumh1=0) or (sumh2=0) then continue;//пустая гистограмма

h1sr:=sumh1/chart1.Series[0].Count;

h2sr:=sumh2/chart1.Series[0].Count;

//расчет корреляции

korr_chisl:=0;

korr_znam1:=0;

korr_znam2:=0;

for j:=0 to chart1.Series[0].Count-1 do

begin

h1:=chart1.Series[i].YValue[j];

h2:=chart1.Series[p].YValue[j];

korr_chisl:=korr_chisl + (h1-h1sr)*(h2-h2sr);

korr_znam1:= korr_znam1+ (h1-h1sr)*(h1-h1sr);

korr_znam2:= korr_znam2+ (h2-h2sr)*(h2-h2sr);

end;

if korr_znam1*korr_znam2=0 then continue;//ну не получилось...

korr:=korr_chisl / sqrt(korr_znam1*korr_znam2);

summ[i,p]:=korr;

end;

AddToWord(summ,'Correlation coefficient', 'Correlation. Values close to 1 indicate higher similarity, 0 is for total difference.');

R.Inform(_('Comparison tables are available in new MS Word document'));

end;

procedure TForm1.Button3Click(Sender: TObject); //Ми

var i:integer;

classstr, Ystr:string;

begin

button2.visible:=false;//кнопка расчета сходства

chart1.Legend.LegendStyle:=lsSeries;

for i:=0 to chart1.SeriesList.Count-1 do //очистка чарта

Chart1.serieslist.delete(0);

if not (GetParamsForSingle) then exit;

show;

memo1.Lines.clear; //параметры графика

classstr:=CLname;

YStr:=_('count');

chart1.LeftAxis.Title.Caption:='N';

memo1.Text:=_('Distribution graph: classes layer - ''')+r.sattr[nofetallayer].alias+_('''; using classes: ')+classstr+_('; with intervals count - ')+inttostr(razr)+_('; Y-axis fixes ')+YStr;

r.Inform(_('Select layer(s) to build distribution graph'));

if r.SelectLayers(true,'F')=false then exit;

SetLength(CLLayers,R.AmountOfActiveLayers);//сохраняем список выбранных слоёв

for i:=0 to R.AmountOfActiveLayers-1 do

CLLayers[i]:=R.ActiveLayers[i];

BuildHist2;

Panel3.Visible:=false; //отключаем ненужные кнопки

ChartLegendImage.Visible:=false; //и шкалу

end;

procedure TForm1.getGlobalMinMax(layers:ArrayOfInteger; var minv,maxv:real);

var i:integer;

tmin,tmax:real;

begin //нахождение общего min/max для всех слоев, а не для одного, как обычно

r.GetMinMax(layers[0],minv,maxv);

for i:= 1 to length(layers)-1 do

begin

r.GetMinMax(layers[i],tmin,tmax);

minv:=min(minv,tmin);

maxv:=max(maxv,tmax);

end;

end;

procedure Tform1.BuildHist2; //Ми

var AmountOfEtalons,i,p:integer;

gmin,gmax:real;

wrd:boolean;

Word,Table,Par,Doc:Variant;//для Word-а

procedure AddToWord;

var wi,wp:integer;

begin

try

Word:=GetActiveOLEObject('Word.Application');

except

Word:=CreateOLEObject('Word.Application');

end;

Word.Visible:=True;

if VarIsEmpty(doc) then //если документ еще не создан. Иначе допишем в конце.

Doc:=Word.Documents.Add();

Par:=Doc.Paragraphs.Add();

Par.Range.Text:=_(st); // название слоя

word.selection.font.size:=10;

word.selection.font.name:='arial cyr';

Par:=Doc.Paragraphs.Add();

doc.pagesetup.orientation:=1;

Par:=Doc.Paragraphs.Add();

Table:=Doc.Tables.Add(Par.Range,2, razr+1+1);

table.borders.InsideLineStyle:=1;//wdLineStyleSingle;

table.borders.OutsideLineStyle:=1;//wdLineStyleSingle;

try

table.style:='Средняя заливка 2 - Акцент 1';

except end;

Table.Cell(1,1).Range.Text:=_('Intervals (centers)');

Table.Cell(2,1).Range.Text:=_('Values');

for wp:=0 to razr do //вывод диапазонов гистограммы

Table.Cell(1,wp+2).Range.Text:=formatfloat('0.###',gmin+razrwidth*wp); //+'.. '+formatfloat('0.###',gmin+razrwidth*(wp+1));

for wp:=0 to razr do //вывод значений делений гистограммы

Table.Cell(2,wp+2).Range.Text:=FreqTable[wp];

Par:=Doc.Paragraphs.Add();

end;

begin

wrd:=False;

if MessageDlg(_('Save report?'),

mtConfirmation, [mbYes, mbNo], 0) = mrYes then wrd:=True;

for i:=0 to chart1.SeriesList.Count-1 do //очистка чарта

Chart1.serieslist.delete(0);

getGlobalminmax(CLLayers,gmin,gmax); //мин/макс среди всех слоёв

RazrWidth:= (gmax-gmin)/razr;

for i:= 0 to length(CLLayers)-1 do //для каждого слоя выполняем

begin

//построение гистограммы

setlength (FreqTable, razr+1); //таблица со значениями гистограммы

objcount:=0; //количество объектов на текущем слое

AmountOfEtalons:=0;

for p:= 0 to razr do FreqTable[p]:=0; //обнуляем гистограмму

st:= r.fattr[CLLayers[i]].Alias; //для вывода названия слоя

for p:= 1 to r.xsize*r.ysize do

if r.GetSData(CLNum,p) = CLname then //если попался объект нужного класса

if r.GetFData (CLLayers[i],p)<>r.GapCodeF then

begin

FreqTable[round((-gmin+r.GetFData (CLLayers[i],p))/razrwidth)]:=FreqTable [round((-gmin+r.GetFData (CLLayers[i],p))/razrwidth)]+1; //добавляем единичку для каждого найденного объекта в соответствующей колонке гистограммы

objcount:=objcount+1; Inc(AmountOfEtalons);

end;

Chart1.AddSeries( TLineSeries.Create( Self ) ); //создаем линию на графице

Chart1.series[i].marks.visible:=false;

Chart1.series[i].title:=copy (st,0,20)+ ' ('+ IntToStr(AmountOfEtalons)+')'; //название (для легенды)

Chart1.series[i].clear;

for p:= 0 to razr do

Chart1.series[i].addXY(p*razrwidth+gmin, FreqTable[p]); //выводим очередную "точку" в график

//вывод результатов текущего слоя в MSWord

if wrd then

AddToWord;

end;

Chart1.Title.Text.clear;

Chart1.Title.Text.add(_('Distribution graph - ')+CLName); //заголовок графика

end;

end.

Размещено на Allbest.ru


Подобные документы

  • Проектирование программного модуля в среде программирования Borland Delphi 7.0. Схемы алгоритмов решения задач по темам "Символьные переменные и строки", "Массивы", "Работа с файлами", "Создание анимации". Реализация программного модуля, код программы.

    отчет по практике [961,6 K], добавлен 21.04.2012

  • Основные операции с матрицами. Проектирование объектно-ориентированного модуля для работы с матрицами в среде Delphi 7. Разработка программы, которая позволяет выполнять различные действия над матрицами. Описание интерфейса программы, исходный код модуля.

    курсовая работа [1014,2 K], добавлен 15.01.2013

  • Структурная диаграмма программного модуля. Разработка схемы программного модуля и пользовательского интерфейса. Реализация программного модуля: код программы; описание использованных операторов и функций. Вид пользовательской формы с заполненной матрицей.

    курсовая работа [215,3 K], добавлен 01.09.2010

  • Разработка структурной схемы и алгоритма функционирования микропроцессорного модуля программного обеспечения автоматизированной информатизационно-измерительной системы. Характеристика принципиальной схемы модуля, распределения памяти и задание портов.

    курсовая работа [1,2 M], добавлен 28.08.2012

  • Анализ исходных данных. Определение структуры модуля для работы файлом. Разработка объектно-ориентированного приложения, использующего массив объектов, в среде Delphi. Модульная структура программного комплекса. Процедура сортировки методом вставки.

    курсовая работа [2,2 M], добавлен 20.09.2014

  • Расчет профилей распределения поглощенной энергии с учетом спектральных и температурных зависимостей полупроводниковых материалов. Разработка программы в среде Delphi для моделирования источника тепла, создаваемого в кремнии облучением ионами водорода.

    контрольная работа [897,0 K], добавлен 11.01.2013

  • Контроль знаний как форма педагогической деятельности. Особенности и классификация тестовых заданий. Разработка обучающе-контролирующей программы для контроля знаний обучающихся в среде программирования Borland Delphi 7.0 под управлением Windows XP.

    курсовая работа [172,5 K], добавлен 24.08.2016

  • Borland Delphi 7 как универсальный инструмент разработки, применяемый во многих областях программирования, функции: добавление информации об абитуриентах в базу данных, формирование отчетов. Рассмотрение и характеристика основных компонентов Delphi.

    контрольная работа [3,6 M], добавлен 18.10.2012

  • Сведения о языке Delphi. Основы разработки баз данных. Разработка конвертера таблицы Excel, интерфейса главной формы, модуля отображения, системы поиска информации, средств редактирования. Системные требования программы. Инструкция по эксплуатации.

    курсовая работа [2,6 M], добавлен 29.12.2008

  • Разработка функциональной и структурной схемы программного средства. Реализация основного модуля программы. Реализация модуля печати и модуля обновлений. Изучение взаимодействия информационных технологий, методов их интеграции и обмена данными.

    дипломная работа [3,2 M], добавлен 27.10.2017

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.