Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книга1(полный конспект).docx
Скачиваний:
55
Добавлен:
23.12.2018
Размер:
49.16 Mб
Скачать

'Ввод данных

Open File "Zemuch.dat" For Input as #1

Input #1,Namisp1,Namisp2

Input #1,Gor,Zona,Kadmas

Input #1,Nkvart,Nuch

Nzap=0

i=1

Do

Input #1,Nomuch,Nmz,sobstv

j=1

Do

Input #1,Nt(j),x(j),y(j)

j=j+1

Loop while (j<=Nmz)

В данном фрагменте введены имена исполнителей (Namisp1,Namisp2), название города (Gor), кадастровые номера зоны (Zona), массива (Kadmas), квартала (Nkvart), число участков (Nuch), номер участка (Nomuch), число межевых знаков (Nmz) или точек поворота границы. Вложенным циклом Do осуществляется ввод номеров точек участка Nt, x, y. Каждый участок создается как полигон операторами Create Region Into Variable Pol 0 с использованием цикла For и оператора Alter Object Pol Node Add... .

Create Region Into Variable Pol 0

For i1=1 to Nmz

Alter Object Pol Node Add (x(i1),y(i1))

Next

Этим оператором добавляется каждая поворотная точка участка для создания географического объекта с именем Pol . Такие объекты имеют тип Object , что описано в начале программы.

После того как полигон создан, он заносится в базу данных Reestr оператором Insert Into Reestr (Obj) Values (Pol) , оператором Update Reestr Set Kadnom = Nomuch заполняется поле kadnom таблицы Reestr в записи с номером nzap.

Insert Into Reestr (Obj) Values (Pol)

nzap=nzap+1

Update Reestr Set kadnom=Nomuch

Where Rowid=nzap

Для целей отладки программы полезным является оператор Note, выдающий интересуемое сообщение, например

Note "Привет,Nuch="+str$(Nuch),

где str S ( )- функция, преобразующая тип переменной в текстовый.

Когда вся информация считана с файла Zemuch.dаt, он тоже закрывается оператором Close File 1.

i=i+1

Loop while (i<=Nuch)

Close File #1

На основе этих данных создается карта Reestr с помощью операторов Map From..., Set CoordSys..., Bounds, Browse... .

Map From Reestr

Set CoordSys Nonearth Units "m"

Bounds (4000,-1750)(5000,-1600)

Browse *From Reestr

Документом кадастра земель является чертеж границ землепользования. Он может быть построен графическими средствами MapBasic в виде объекта.

Построение отчета начинается оператором Layout. За ним следуют операторы: Position (...,...), определяющий положение верхнего левого угла отчета в окне Windows, Width , Height- задающие ширину и высоту отчета в определенных единицах (в данном случае в мм). Определяется номер окна winnum, устанавливается система координат отчета - Set CoordSys Layout Units «mm» .

Layout

Position (0,0) Units "mm"

Width 260 Units "mm"

Height 160 Units "mm"

winnum=FrontWindow()

Set CoordSys Layout Units "mm"

Далее идет заполнение самого отчета. При этом используются функции :

Create Text- создание текста ,

Font MakeFont- назначение шрифтов,

Create Line Into Window...- вычерчивание линий ,

Pen Make Pen...- определение характеристик линий .

Create Text

Into Window winnum

" Исполнительный чертеж"+Chr$(10)+

"границ землепользований в квартале №"+Str$(Nkvart)+Chr$(10)+

"кадастрового массива"+Str$(kadmas)+ "г."+Str$(Gor)

(10,20) (120,30)

Font MakeFont("Helv",1,20,Black,White)

Open File "Zemuch.dat" for Input As #1

Input #1,Namisp1,Namisp2

Input #1,Gor,Zona,Kadmas

Input #1,Nkvart,Nuch

i=1

Do

Input #1,Nomuch,Nmz,sobstv

j=1

Do

Input #1,Nomzn(j),x(j),y(j)

j=j+1

Loop While j<=Nmz

j=1

xmax(i)=x(1)

ymax(i)=y(1)

xmin(i)=x(1)

xmax(i)=x(1)

Do

If(xmax(i)-x(j))<0 then xmax(i)=x(j) End if

If(ymax(i)-y(j))<0 then ymax(i)=y(j) End if

If(xmin(i)-x(j))>0 then xmin(i)=x(j) End if

If(ymin(i)-y(j))>0 then ymin(i)=y(j) End if

j=j+1

Loop While (j<=Nmz)

i=i+1

Loop While (i<=Nuch)

xmax1=xmax(1)

ymax1=ymax(1)

xmin1=xmin(1)

ymin1=ymin(1)

i=1

Do

if(xmax1-xmax(i))<0 then xmax1=xmax(i) end if

if(ymax1-ymax(i))<0 then ymax1=ymax(i) end if

if(xmin1-xmin(i))>0 then xmin1=xmin(i) end if

if(ymin1-ymin(i))>0 then ymin1=ymin(i) end if

i=i+1

Loop While i<=Nuch

Close File #1

Open File "Zemuch.dat" for Input As #1

Input #1,Namisp1,Namisp2

Input #1,Gor,Zona,Kadmas

Input #1,Nkvart,Nuch

i=1

Do

Input #1,Nomuch,Nmz,sobstv

xc=0

yc=0

j=1

Do

Input #1,Nomzn(j),x(j),y(j)

yl(j)=(xmax1-x(j))+20+30

xl(j)=(y(j)-ymin1)+40

If(j>1) Then Create Line into Window winnum

(xl(j-1),yl(j-1))

(xl(j),yl(j))

Pen MakePen(2,12,Black)

end if

Create Text Into Window winnum

Str$(Nomzn(j))

(xl(j)+1.0,yl(j)+1.0)(xl(j)+6.0,yl(j)+6.0)

Font MakeFont("Helv",1,20,RED,White)

xc=xc+xl(j)/Nmz

yc=yc+yl(j)/Nmz

j=j+1

Loop while(j<=Nmz)

Create Line Into Window winnum

(xl(Nmz),yl(Nmz))

(xl(1),yl(1))

Pen MakePen(2,12,Black)

Create Text Into Window winnum

Str$(Nkvart)+"-"+str$(Nomuch)

(xc,yc)

(xc+10.0,yc+16.0)

Font MakeFont("Helv",1,12,BLACK,White)

i=i+1

Loop while(i<=Nuch)

Close File #1

xm=(ymax1-ymin1)

ym=(xmax1-xmin1)+50

Note "xmax1="+str$(xmax1)+"xmin1="+str$(xmin1)

Note "ymax1="+str$(ymax1)+"ymin1="+str$(ymin1)

Create Text Into Window winnum

"1:2000"

(xm/2, ym+20)

(xm/2+30,ym+25)

Font MakeFont("Helv",1,30,BLACK,White)

Create Text Into Window winnum

"В 1 см 20 м"

(xm/2-5,ym+28)

(xm/2+15,ym+33)

Font MakeFont ("Helv",1,25,BLACK,White)

Create Text Into Window winnum

"Условные обозначения"

(xm/2-20,ym+38)

(xm/2+30,ym+43)

Font MakeFont ("Helv",1,35,Black,White)

Create Line Into Window winnum

(xm/2-35,ym+70) (xm/2-20,ym+70)

Pen MakePen(2,2,BLACK)

Create Text Into Window winnum

"граница квартала"

(xm/2-19,ym+66)

(xm/2+21,ym+71)

Font MakeFont("Helv",1,20,BLACK,White)

Create Line Into Window winnum

(xm/2-35,ym+75)(xm/2-20,ym+75)

Pen MakePen (2,12,Black)

Create Text Into Window winnum

"граница землепользования"

(xm/2-19,ym+72)

(xm/2+21,ym+80)

Font MakeFont("Helv",1,20,Black,White)

Create Text

Str$(Nkvart)+"-"+Str$(Nomuch)+"шифр землепользования"

(xm/2-35,ym+85)

(xm/2+21,ym+90)

Font MakeFont("Helv",1,24,BLACK,White)

Create Text

"Установление границ землепользования"+Chr$(10)+

" в натуре произвел"+Str$(Namisp1)+

Chr$(10)+"План вычертил"+Str$(Namisp2)

(xm/2+6,ym+100)

(xm/2+40,ym+125)

Font MakeFont("Helv",1,16,BLACK,White)

End Sub

Характеристики параметров стандартных функций MapBasic описаны в справочной системе языка - Help. Ниже приводится текст процедуры «Межевание земель». Ею осуществляется создание в виде отчета плана земельного участка и вывод его характеристик: местоположения, площади, целевого назначения земель, цели предоставления; геодезических данных :дирекционных углов и длин граничных линий участка .

Процедура Mejevan начинается стандартными операторами Dim.

'Процедура Mejevan

Sub Mejevan

Dim Obl,gor,kadmas, rai,adm,adr,cnazn,cel,ogr,obr,Namisp1,Namisp2,sobstv As String

Dim Zona,Nomuch1,Nkvart,Nuch,Nomuch,Nomzn(30),Nmz,i,j1,j As Smallint

Dim Pl1,x(30),y(30),y1,dirg,diru,dirm ,s ,xc,yc As Float

Dim xl(30),yl(30),maxy ,ys,ys1 as Float

Dim obj_reg as Object

Dim Smeg(30) As String

Dim Win_num as integer

Далее строится окно диалога, которое является средством ввода данных, приведенных выше : местоположения , площади и другие . Открытие окна и его имя задается двумя операторами Dialog и Title. Имя каждого из окошек определяется набором следующих операторов: Control StaticText, Title..., Position..., Control EditText.

Оператором Position определяется положение текста. Единица измерений по горизонтали равна одной четвертой ширины буквы системного шрифта, по вертикали - одной восьмой. Оператор Width задает размер строки в четвертях ширины буквы. Например, номер участка будет начинаться с 14 позиции по горизонтали и с 1,25 позиции по вертикали (Position 56,10). Ширина строки 3 позиции (Width 12). Необязательный здесь оператор Into... присваивает введенный текст определенной переменной. Оператором Id ведется счет строк.

Пример таких реализованных в программе окон приведен на рис.1.59. Именно такими они вначале и проектируются. В заполненном виде по ходу программы они приведены на рис.1,60

Рис.13.60

Рис.13.61

Dialog

Title "Земельный участок"

Control StaticText

Title "Номер участка"

Position 5,10

Control EditText

Into Nomuch1

ID 1

Position 56,10 Width 12

Control StaticText

Title "Область"

Position 5,18

Control EditText

Into Obl

ID 2

Position 56,18 Width 70

Control StaticText

Title "Район"

Position 5,26

Control EditText

Into rai

ID 3

Position 56,26 Width 70

Control StaticText

Title "администрация"

Position 5,34

Control EditText

Into adm

ID 4

Position 65,34 Width 140

Control StaticText

Title "адрес"

Position 5,42

Control EditText

into adr

ID 4

Position 56,42 Width 140

Control StaticText

Title "Площадь участка кв.м"

Position 5,50

Control EditText

Into Pl1

ID 5

Position 100,50 Width 30

Control StaticText

Title "Основное целевое назначение земель"

Position 5,58

Control EditText

Into Cnazn

ID 6

Position 145,58 Width 100

Control StaticText

Title "Цель предоставления участка"

Position 5,66

Control EditText

Into Cel

ID 7

Position 125,66 Width 160

Control StaticText

Title "Ограничения в пользовании"

Position 5,74

Control EditText

Into Ogr

Id 8

Position 105,74 Width 100

Control StaticText

Title "Обременение правами других лиц"

Position 5,82

Control EditText

Into Obr

ID 9

Position 140,82 Width 100

В таком окне желательно разметить стандартные кнопки ОК и Отмена с помощью операторов OKButton, CancelButton.

Control OKButton

Title "OK"

Position 5,100

Control CancelButton

Title "Отмена"

Position 44,100

После этого оператором Layout программируется составление документа аналогично предыдущему в процедуре Invent.

'Отчет по участку- текстовая часть

Layout

Position (0,0)

Units "mm"

Width 160 Units "mm"

Height 260 Units "mm"

Win_num=FrontWindow()

Set CoordSys Layout Units "mm"

Create Text

Into Window Win_num

"1."+Str$(Obl)+"область"+Chr$(10)+

"2."+Str$(rai)+"район"+ Chr$(10)+

"3."+Str$(adm)+"администрация"+Chr$(10)+

"4."+Str$(adr)+Chr$(10)+

"5."+"Площадь участка кв.м."+Str$(Pl1)+Chr$(10)+

"6."+"Основное целевое назначение земель"+Str$(Cnazn)+Chr$(10)+

"7."+"Цель предоставления участка"+Str$(Cel)+Chr$(10)+

"8."+"Ограничения в пользовании"+Str$(ogr)+Chr$(10)+

"9."+"Обременение правами других лиц"+Str$(Obr)+Chr$(10)+

"10."+"Геодезические данные:"

(10,20)(90,90)

Font MakeFont("Helv",1,18,BLACK,White)

Open File "Zemuch.dat" for Input As #1

Input #1, Namisp1,Namisp2

Input #1, Gor,Zona,Kadmas

Input #1, Nkvart,Nuch

i=1

Do while (i<=Nuch)

Input #1,Nomuch,Nmz,sobstv

j=1

Do

Input #1,Nomzn(j),x(j),y(j)

Note "x(j)="+str$(x(j))

Note "y(j)="+str$(y(j))

j=j+1

Loop while(j<=Nmz)

If(Nomuch=Nomuch1) Then

Exit Do

End If

i=i+1

Loop

Create Line Into Window win_num (10,95)(50,95)

Create Text Into Window win_num

"Номера"+Chr$(10)+

"точек"

(10,97)(20,107)

Create Text Into Window win_num

"Дирекционные углы"+Chr$(10)+

"град.,мин"

(22,97)(47,112)

Create Text Into Window win_num

"Длины линий"+Chr$(10)+"в метрах"

(48,95)(68,112)

Create Line Into Window win_num

(10,113)(50,113)

j=1

y1=113

Do

j1=j+1

if j=Nmz then j1=1 end If

Note "x(j1)="+str$(x(j1))

Note "x(j)="+str$(x(j))

diru=atn((y(j1)-y(j))/(x(j1)-x(j)))

dirg=diru\1

dirm=(diru-dirg)/60

s=sqr((y(j1)-Y(j))^2+(x(j1)-x(j))^2)

y1=y1+5

Create Text Into Window win_num

Str$(Nomzn(j))

(10,y1)(50,y1)

y1=y1+5

Create Text Into Window win_num

Str$(dirg)+" "+Str$(dirm)

(22,y1)(47,y1)

Create Text Into Window win_num

Str$(s)

(48,y1)(68,y1)

j=j+1

Loop while(j<=nmz)

'Отчет по участку-План

Layout

Position (0,0) Units "mm"

Width 160 Units "mm"

Height 260 Units "mm"

win_num=FrontWindow()

Set CoordSys Layout Units "mm"

Create Text Into Window win_num

"План участка"+Chr$(10)+Str$(Obl)+":"+Str$(rai)+":"+

Str$(Gor)+":"+Str$(Zona)+":"+Str$(Kadmas)+":"+Str$(Nkvart)+":"+Str$(Nomuch)

(70,10)(130,20)

Font MakeFont("Helv",1,28,BLACK,White)

Create Text Into Window win_num

"Собственник"+Str$(sobstv)

(60,25)(140,30)

j=1

xc=0

yc=0

Do

xc=xc+x(j)

yc=yc+y(j)

j=j+1

Loop while (j<=Nmz)

xc=xc/Nmz

yc=yc/Nmz

'Create Region Into Variable obj_reg 0

j=1

Do

xl(j)=(y(j)-yc)+100

yl(j)=(x(j)-xc)+100

'Alter Object obj_reg Node Add(xl(j),yl(j))

Create Text Into Window win_num

Str$(Nomzn(j))

(xl(j)+1.0,yl(j)+1.0)(xl(j)+6.0,yl(j)+6.0)

Font MakeFont ("Helv",1,20,BLACK,White)

j=j+1

Loop While (j<=Nmz)

j=1

maxy=yl(1)

Do

If (maxy-yl(j))<0 then maxy=yl(j)

End if

j=j+1

Loop While j<=Nmz

Create Text Into Window win_num

"11.Описание смежеств"

(109,maxy+5)

(149,maxy+5)

'Ввод смежеств в диалоговом окне

j=1

Do

Dialog

Title "Смежества"

Control StaticText

Title "от"

Position 5,10

Control StaticText

Title "до"

Position 35,10

Control StaticText

Title "Смежество"

Position 5,20

Control EditText

Into Nomzn(j)

Position 12,10 Width 20

Control EditText

Into Nomzn(j+1)

Position 41,10 Width 20

Control EditText

Into Smeg(j)

Position 40,20 Width 340

Control OKButton

Title "OK"

Position 40,40

j=j+1

Loop while(j<=Nmz)

j=1

Do

ys=maxy+5*j

ys1=maxy+5*(j+1)

Create Text into Window win_num

"от"+Str$(Nomzn(j)) + "до"+Str$(Nomzn(j+1)+Smeg(j))

(109,ys)(149,ys1)

j=j+1

Loop while j<=Nmz

End Sub

Здесь строится план участка, вычисляются геодезические данные, вводятся с экрана и выводятся в отчет характеристики смежеств. Документ оформляется по стандарту.