Gis Toolkit
komponentidan foydalanib, ilova tayyorlash TMAPView
komponenti shakliga ko’chirish va unga zarur o’lchamlarni va joylashadigan
o’rnini berishdan boshlanishi kerak. Obyektlar inspektorida unga MapView ismini
beramiz. Ushbu komponent karta fayliga yo’l ochib beradi va uni shaklda
tasvirlashni amalga oshiradi. Bu shaklda albatta bo’lishi kerak bo’lgan GAТ ning
yagona komponentidir.
Ushbu dasturdan foydalanuvchi kartaning zarur fayllarini ochishi uchun,
shaklda faylni tanlash muloqati OpenDialog: TOpenDialog (komponentlar
palitrasidan) va muloqatni faollashtirish uchun bosh menyu elementi –
miOpenFileMap: TMenultem joylashtiriladi.
Ish tartibi quyida keltiriladi:
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
// Karta faylini tanlash va ochish
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
procedure TMyForm. miOpenFileMapClick (Sender: TObjekt);
begin
if OpenDialog.Execute= false
then exit;
MapView.MapFileName:= OpenDialog.FaleName;
MapView.MapView:= true;
end;
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Shunday qilib, ilovaga endi zarur karta faylini tanlash, ular mazmunini karta
bo’yicha navigatsiya imkoniyati bilan standart shartli belgilarda ko’rsatish
mumkin. Тez-tez yuzaga chiqadigan vaziyatlardan biri - bu kartadagi mavjud
145
obyektlarning barchasini emas, balki ularni ayrim ko’rsatkichlari bo’yicha tanlab
ko’rsatish kerak bo’ladi, masalan, qatlamlar yoki turlar bo’yicha. Bunday
imkoniyatni TMapView.ViewSelect xususiyati yaratadi, u TMapSelect turiga ham
ega. Ushbu xususiyat o’lchamlarini qo’lda ham berish mumkin, biroq bu ancha
zerikarli va mayda ish. Bunday masalani yechish uchun TMapSelectDialog xizmat
qiladi. U foydalanuvchiga karta obyektlarini ko’rsatishni tanlash uchun barcha
o’lchamlarni interaktiv sozlash imkoniyatini beradi. Buning uchun quyidagi
harakatlarni bajarish kerak:
-
TMapSelectDialog komponentini shaklga (MapSelectDialog deb ataymiz)
ko’chirish kerak;
-
uning xususiyati MapSelectDialog.MapViewni MapView komponentiga (oldin
shaklga o’tkazilgan) o’rnatish;
-
shaklga muloqatni chaqirish uchun menyu elementini kiritish (ushbu loyihada -
miSelectView: TMenultem) va uning uchun muloqatni chaqirish jarayonini
dasturlashtirish (pastkilarga qarang).
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
// ko’rsatiladigan obyektlar tarkibini tanlash va sozlash
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Procedure TMyForm.miSelectViewClick (Sender: TObject);
begin
// Тanlash o’lchamlarini kuchga kiritish uchun
MapView. Selecting:= true // ushbu buyruqni bir marta bajarish
// yoki obyektlar inspektori Delphi
// yordamida komponentda sozlash mumkin
// Muloqotni chaqiramiz
if MapSelectDialog.Execute (MapView. ViewSelect, false)= true
then MapView.Repaint;
end;
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
146
Har qanday GAТning boshqa ahamiyatli xususiyati karta tasvirini masshtablash
imkoniyati hisoblanadi. Bizning misolimizda, bu sichqonchani bosib ushlash va
kartani
tasvirlashning
joriy
masshtabi
uchun
javob
beradigan
MapView.ViewSelect xususiyatidan foydalanish hisobiga amalga oshiriladi.
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
// Karta nuqtasida sichqoncha bosiladi
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Procedure TMyForm.MapViewMouseUp (Sender: TObject: Button:
ТMouseButton: Shift: TShiftState:
X, Y: Integer);
Var
NewScale: integer;
Spoint: TPoint;
begin
if MapView.MapView=false
then exit;
// joriy tartibga bog’liq harakat qilinadi
if miScale.Checked = true
// nuqtadagi masshtablash tartibi faol
then begin
// yangi masshtab hisoblanadi
NewScale : = MapView.ViewScale;
If Button = mbLeft // chap tugmacha bilan kartani yaqinlatamiz
then NewScale : = MapView. ViewScale div 2 ;
If Button = mbRight // o’ng tugmacha bilan kartani uzoqlashtiramiz
then NewScale := MapView.View Scale * 2;
// nuqtada masshtabni o’rnatamiz
// MapPoint.Plecelnp := PP_ PICTURE;
MapPoint. Y
: = MapView.MapTop + Y;
MapPoint. X
: = MapView.MapLeft + X;
147
MapView.ScalelnPoint(NewScale,MapPoint.point);
// kursorning oldingi holatini tiklaymiz
// MapPoint.PlaceOut : = PP PICTURE;
Spoint.X : = trunc(Map Point.X) – MapView.MapLeft;
Spoint.Y : = trunc (MapPoint.Y) – MapView.MapTop;
Spoint : = MapView.ClientTOScreen(Spoint);
SetCursorPos(Spoint.X, Spoint.Y);
exit;
end;
end;
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Zarur kartani ochib, uni istalgan tarkibda va masshtabda tasvirlab, shu
variantning qattiq asosdagi nusxasini olish kerak. Buning uchun shaklda
TMapPrintDialog komponentini joylashtiramiz, uning MapView xususiyatini
yuqorida keltirilgan usulda o’rnatamiz va Execute usulida uni chaqirish uchun
menyu elementini yaratamiz. Ko’rinib turibdiki, kartani chop etish uchun TPrinter
klassidagi dasturlashning hamma tomonlarini va uning har xil qurilmalar bilan
ishlashdagi xususiyatlarini o’rganish zarurati yo’q.
Karta bilan vizual ishlashda foydalanuvchida albatta kartaning u yoki bu nuqtasida
qanday obyektlar joylashganligini bilish istagi paydo bo’ladi (karta - bu ko’p
qatlamli «karam» ligini hisobga olib). Bu masalani yechish quyidagi bosqichlardan
iborat: sichqoncha bosilishi izlanayotgan nuqta koordinatalarini aniqlash va
koordinatalari ma’lum nuqtagacha karta obyektlarini ketma-ket aniqlash. Buni
amalga oshirishning eng oddiy usuli - ТMapObj (aniq karta obyekti to’g’risidagi
ma’lumotlarga javob beradi) komponentining SelectObjectlnPoint usulidan
foydalanish.
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
// Karta nuqtasida sichqoncha bosiladi
148
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
const
iFindRadius = 5; // piksellarda izlash radiusi
procedure TMyForm.MapViewMouseUp(Sender: TObject: Button:
TMouseButton; Shift: TShiftState:
X, Y: Integer);
begin
ifMapView.MapView=false
then exit;
// joriy tartibga bog’liq harakat qilinadi
// nuqtada TMapObj yordamida izlash
if milnPointDlg.Checked = true
then begin
MapObj Style : = OS_ NOVIEW; // agar ajratish bo’lgan bo’lsa uni olib
tashlaymiz.
MapObjFind.Style : = OS_ NOVIEW;
If MapObj.SelectObjectlnPoint (X, Y iFindRadius, dlMinCommon) <>0)
then begin
// Obyekt nomini chiqaramiz
st Map.Panels[3].Text : = MapObj.ObjName;
// Obyektni o’chib yonish bilan ajratamiz
MapObj.Style : = OS_SELECT;
end;
exit;
end;
end;
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Ushbu usul nafaqat nuqtadagi barcha obyektlarni birma-bir ko’rib chiqish,
balki, kartaning har xil obyekti to’g’risidagi to’la ma’lumotlarni ko’rish va
149
tahrirlash imkonini beradi. Bu masalani yechishning ikkinchi varianti ham mavjud
bo’lib, u ancha murakkab, ammo, u karta obyektlarini saralash jarayoni va ularni
vizual ajratish usullari ustidan to’la nazoratga ega bo’lish imkonini beradi. Bunday
usul ham misolda bayonlangan va GAТning ikki komponenti bog’lamidan
foydalanadi: TMapFind (kartada izlashni tashkil qilishga javob beradi) va
TMapObj (karta obyekti).
Bizning oldimizda ilova uchun oxirgi yechilmagan masala – karta obyektlari
va ma’lumotlar bazasi yozuvlari orasidagi o’zaro aloqalarni tashkil etish qoldi.
Misolda ma’lumotlar bazasi sifatida MyTable.Dbf nomli Dbase formatining lokal
jadvali tanlangan. Jadval yozuvlari va karta obyektlari orasidagi o’zaro aloqalarni
o’rnatish ikkita parametrga asoslanadi: ular joylashgan karta beti nomi
(TMapobj.ListName xususiyati) va ushbu bet ichidagi o’zining tartib raqami
(TMapObj.Key). Ma’lumotlar bazasi jadvalida ushbu ikki parametrni eslab qolish
va har bir yozuvning o’ziga xosligini ta’minlash yetarlik bo’ladi va karta bilan
jadval orasidagi aloqa o’rnatilgan hisoblanadi. MyTable jadvalida karta bilan
aloqaga ikkita qator javob beradi: LINKSHEET (karta betining nomini saqlash
uchun S 32 turi) va LINKOBJECT (karta beti ichida obyekt tartib raqamini saqlash
uchun N 10 turi).
Aloqalarni tashkil etishning umumiy uslubi quyidagidek:
-
kartaning joriy obyekti tanlanadi (nuqtada izlash, butun karta bo’yicha izlash va
sh.o’ )
-
jadvalda zarur yozuvni o’rnatish ;
-
aloqalar parametrlarini jadval qatorlariga yozish.
Aloqalarni tashkil etish bo’yicha barcha harakatlar dastur listingida to’la
Do'stlaringiz bilan baham: |