MapInfo Professional ilə Visual FoxPro-da GIS yaradılması

Новости мира

Məqalənin məqsədi: MapInfo Professional-dan istifadə edərək VFP-yə uyğun coğrafi informasiya sistemi yaratarkən əsas iş üsullarını göstərmək. Material torpaq komitələrində, geodeziya və ya torpaq idarəçiliyində çalışan İT mütəxəssisləri üçün nəzərdə tutulub.
Giriş
MapInfo nümunəsinin işə salınması
Xəritələrin hazırlanması
Tətbiqinizdə MapInfo xəritə pəncərəsi
«HARADANIN başlanğıc olduğunu bilmək!»

1. Giriş

Torpaq və daşınmaz əmlak bir çox ştatlarda etibarlı və eyni zamanda davamlı olaraq artan aktivdir. Hər bir resurs kimi torpaq və digər daşınmaz əmlak da nəzərə alınmalıdır. Torpaq sahələrinin, onlarda yerləşən daşınmaz əmlak obyektlərinin inventarlaşdırılması, qiymətləndirilməsi, sonradan torpağın və tikililərin yenidən qiymətləndirilməsi sürətlə dəyişən ekoloji şərait, respublika və bələdiyyə qanunvericiliyi ilə çətinləşir. Torpaq və daşınmaz əmlakın qiymətləndirilməsində hesablaşma əməliyyatları coğrafi baxımdan əhəmiyyətli komponentə malik bir çox parametrlərdən istifadə edir. Coğrafi informasiyanın analitik emalına imkan verən informasiya sistemlərinə nə ehtiyac var.

Amerikanın MapInfo Korporasiyasının məhsulu olan MapInfo Professional coğrafi məlumatların təhlili alətləri ilə birlikdə VFP tətbiqinizə vektor xəritələri əlavə etməyə imkan verir. MapInfo Professional sizə MapInfo IDE-ə daxil olan MapBasic proqramlaşdırma dilində proqramları işə salmağa imkan verir. Tərtibatçı MapInfo COM interfeysi ilə təmin olunub ki, bu da xəritələrin nümayişinə nəzarət etməyə, həmçinin fərdi əmrləri və MapBaisic proqramlarını yerinə yetirməyə imkan verir.

2. MapInfo nümunəsini işə salın

MapInfo Professional quraşdırdıqdan sonra «MapInfo.Application» sinfi OC Windows reyestrində qeydə alınır və əgər siz MapInfo Runtime istifadə edirsinizsə, o zaman «MapInfo.Runtime» sinfi. MapInfo belə başlayır:
Bir obyekt kimi ictimai poMI
m.poMI=Obyekt yarat([MapInfo.Application])

Eyni üsul [.Quit] MapInfo COM şablonu MapInfo nümunəsinin aşağıdakı kimi bağlanmasını dəstəkləmir:
m.poMI=Nil
PoMI-ni buraxın

3. Xəritələrin hazırlanması

Tətbiqinizə vektor xəritəsi əlavə etmək üçün sizdə olmalıdır. MapInfo Professional-ın bəzi paylamalarına Avropa, Asiya və Şimali Amerikada bir çox ölkələrin və böyük şəhərlərin xəritələri daxildir. Bəs Smolensk və ya İstanbul yaxınlığındakı bağ sahələrinin sərhəd xəritəsi lazımdırsa. Türkiyədə necədir bilmirəm, amma Smolensk administrasiyasının hansısa torpaq komitəsinin sizə münasib qiymətə verə biləcəyi materialların keyfiyyəti sizdən asılı deyil. (Bəlkə bu torpaq komitəsində də xidmət edirsiniz?) Və sizə xəritə lazımdır! Ancaq bilirsiniz ki, müəyyən bir torpaq ölçmə idarəsi geodeziya tədqiqatı aparıb və sizə xəritə lazımdır! (Yoxsa siz bu torpaq idarəsində işləyirsiniz?)

Beləliklə, geodeziya tədqiqatları nəticəsində alınan koordinat məlumatlarına əsaslanaraq xəritənin yaradılmasını nəzərdən keçirək. Təfərrüatlara varmadan MapInfo-da xəritə hər bir sətir qrafik obyektə uyğun gələn cədvəl kimi düşünülə bilər. Metoddan istifadə [.Do()] MapInfo COM obyekti üçün MapBasic əmrlərinin aşağıdakı ardıcıllığını yerinə yetirin:
Yerli lcCommandMapBaisic simvolu kimi
m.lcCommandMapBaisic TextMerge Noshow-a mətn

Cədvəl yaradın «myMap» (c1 Integer,c2 Char(100))
Fayl «c:gismyMap.TAB».
NATIVE yazın
«WindowsKiril» simvol dəsti

«MənimMap» xəritəsinin yaradılması
CoordSys NonEarth Units «m» Sərhədləri (0,0) (10000,10000)

Ümumi baxış * «myMap»-dan.
«MənimMap»-dan.

Son mətn

m.poMI.Do(m.lcCommandMapBaisic)
lcCommandMapBaisic-i buraxın

Budur birinci komanda [Create Table …] cədvəli yaradır [myMap] sütunlarla [c1] Tam ədəd növü i [c2] Char(100) tipli, cədvəl faylı kataloqda yerləşir [c:gis]cədvəl növü — daxili MapInfo formatı, cədvəl kod səhifəsi [WindowsCyrillic]. Aşağıdakı əmr [Create Map …]cədvəldə edir [myMap] sütun [obj]Xəritəni təşkil edən qrafik obyektləri yaratmağa və saxlamağa imkan verən xüsusi MapInfo növü.Xəritənin koordinat sistemi ifadəsi ilə təmsil olunur. [CoordSys NonEarth], Dekart koordinat sisteminə uyğundur və topoqrafik planların xəritələşdirilməsi üçün uyğundur. Parametr [Units] ölçü vahidini 1 metrə, parametri isə təyin edir [Bounds] xəritə sərhədləri. Digər iki MapBasic əmri [Browse …] və [Map From …] müvafiq olaraq masa və xəritə pəncərələrini açın və intuitiv sintaksisə malikdir.

Xəritə sahəsi yaradıldı. Növbəti addım xəritəyə qrafik primitivləri əlavə etməkdir. Misal üçün:
Yerli lcCommandMapBaisic simvolu kimi
m.lcCommandMapBaisic TextMerge Noshow-a mətn

CoordSys NonEarth Units «m» Sərhədlərini təyin edin (0,0)(10000,10000)

Bir obyekt kimi qaranlıq bir sahə
Regionu loRegion 3 dəyişəninə təyin edin
6 (10,100)(100,100)(100,90)(20,90)(20,70)(10,70)
6 (110,100)(120,100)(120,50)(80,50)(80,60)(110,60)
4 (10,50)(70,50)(70,60)(10,60)

«myMap» (c1,obj) dəyərlərinə daxil edin (1,loRegion)
Bölgənin UnDim

Tam xəritə böyütmə parametrini təyin edin

Son mətn

m.poMI.Do(m.lcCommandMapBaisic)
lcCommandMapBaisic-i buraxın

Qeyd edək ki, ilk MapBasic əmri [Set CoordSys …] yaradılmış qrafik obyektlərin koordinatlarının xəritənin koordinat sahəsinə uyğunluğunu təyin edirik. Sonra dəyişəni elan edirik [loRegion] növü [Object]. komanda [Create Region …] nəticəni əvvəlcədən elan edilmiş dəyişəndə ​​saxlayaraq qrafik obyekt yaradırıq. Bundan sonra komanda [Insert Into …] cədvələ daxil olun [myMap] sahə dəyəri kimi 1 istifadə edərək yeni sətir [c1] və dəyişən [loRegion]sahə üçün dəyər kimi [obj]. Komanda [UnDim …] dəyişəni silir [loRegion]. Son MapBasic əmri [Set Map Zoom Entire] – xəritə pəncərəsinin iş sahəsindəki təsviri miqyaslandırır.

Budur, işimizin nəticəsini göstərən MapInfo Professional pəncərəsinin görünüşü:

Beləliklə, geodeziya işlərinin koordinat məlumatlarına malik olmaqla, qrafik obyektlərin yaradılması, geodeziya ölçmələrinin koordinat məlumatlarının mübadiləsi və bununla da vektor xəritələrinin və ərazi planlarının yaradılması üçün proqramlı şəkildə əmrlər yaratmaq çətin deyil.

Bir vacib xəbərdarlıq. Əlbəttə ki, xəritəni hazırlayarkən miqyasdan istifadə etmədiyimizə diqqət yetirdiniz. Təəccüblü bir şey yoxdur — vektor xəritəsində dəqiq 1: 1 miqyasında xəritələr yaratmaq çox rahatdır, bizim etdiyimiz kimi, xəritəyə ekranda baxmaq üçün ixtiyari miqyas seçə bilərsiniz. Standart miqyasda 1:200, 1:500, 1:1000, 1:2000 və s.-də xəritələrin və ya planların kağız nüsxələrini çap edərkən.

4. Tətbiqinizdə MapInfo xəritə pəncərəsi

MapInfo xəritəsi ilə necə işləməyi göstərən VFP sinif kodu:
* istifadə nümunəsi
*Forma kimi ictimai poFM
*m.poFM=Obyekt yarat([form4map],[c:gismyMap.tab])
*m.poFM.Show()
*——————————————————————————
Form4map sinifini forma kimi təyin edin
map_hwnd=0 && xəritə pəncərəsi göstəricisi

Prosedura başlayın
Lparameters lcFileMap
This.AddProperty([Map],obyekt yaradın([Mapinfo.Application]))
* MapInfo sənədinin növbəti pəncərəsi
* bu formanın uşaq pəncərəsi olacaq
Bu.Map.Do([Set Next Document Parent ]+;
Transform(This.HWnd)+[ Style 1])
*kartı açın
Bu.Map.Do([Open Table «]+m.lcFileMap+[» ]+;
[Map From «]+ Juststem(m.lcFileMap)+[«])
* xəritə pəncərəsi göstərici tərifi
This.map_hwnd=Val(Bu.Map.Eval([WindowInfo(FrontWindow(),12)]))
* xəritə pəncərəsinin ölçüsünə nəzarət funksiyasını elan edir
user32-də MoveWindow tam ədədini elan etmək;
Bütün HWnd,;
Tam x,;
tam y, ;
Tam ədəd nEn,;
Tam nHeight,;
Tam ədəd bRepaint
bitirmək

Prosedurun ölçüsünü dəyişdirin
* xəritə pəncərəsinin ölçüsünü onun formasını ehtiva edən ölçüyə dəyişdirin
MoveWindow(This.map_hwnd,0,0, This.Width, This.Height,0)
bitirmək

Çıxarma proseduru
* MapInfo COM obyektini söndürün
This.Map=Xeyr
MoveWindow Dll fayllarını təmizləyin
bitirmək

Enddefine

Nəticədə VFP şəklində plan (xəritə) var, şəkilə baxın.

api funksiyasından istifadə etməklə [MoveWindow] metodunda [Resize] forma, MapInfo pəncərəsindəki xəritə, forma ölçüsü dəyişdirildikdə avtomatik olaraq əsas forma ölçüsünə miqyaslanır.

5. «HARADA bilmək yalnız başlanğıcdır!»

Müəyyən bir qəsəbənin planı (xəritəsi) var, şəkilə baxın:

Tutaq ki, siz fövqəladə vəziyyəti simulyasiya etmək istəyirsiniz: Hawkeye çayında bəndin sıradan çıxması nəticəsində sahil zolağından 700 metrə qədər olan ərazi su altında qalacaq. Nə qədər və hansı şəhər binalarının daşqın zonasına düşə biləcəyini müəyyən etmək tələb olunur.

Hauki çayının sağ sahilindən 700 metrlik bufer zonasını çəkək:
Yerli lcCommandMapBaisic simvolu kimi
m.lcCommandMapBaisic TextMerge Noshow-a mətn

Obyekt kimi loFlooding_zone sönük

Seçimdən bufer kimi obyekt yaradın
LoFlooding_zone dəyişəninə
Eni 700 ədəd «m»

«myMap»-dan c1,c2 seçin.
Harada myMap.obj WithIn loFlooding_zone
c1,c2 ilə qruplaşdırın
c1 ilə sifariş edin

Su basmış_alan Qaranlıq

Son mətn

* SelectionInfo() MapBasic funksiyasıdır,
* verilmiş parametrlə bağlı məlumatları qaytarır
* bu halda cari xəritədə seçilmiş ərazi haqqında
* seçilmiş obyektlərin sayı
Əgər Val(m.poMI.Eval()[SelectionInfo(3)]))>0
m.poMI.Do(m.lcCommandMapBaisic)
Digər
mesaj([Для построения буферной зоны ;
необходимо выбрать объект на карте.],48,[Внимание],10000)
Endif
lcCommandMapBaisic-i buraxın

Verilmiş koda baxaq. Komanda [Create Object As Buffer …] — nəticəni dəyişəndə ​​saxlayaraq tələb olunan bufer sahəsini yaradır [loFlooding_zone]. Növbəti əmr SQL sorğusudur, burada bir ifadə var [Where …] aşağıdakı kimi başa düşülməlidir: xəritə obyektləri [myMap] bufer zonasında (İçində). [loFlooding_zone]. Bu skripti işlədərkən MapInfo xəritədə heç bir obyekt seçilmədikdə xəta verəcək, ona görə də onu işə salmazdan əvvəl, [.Eval(…)] MapInfo şablonunun COM parametrində xəritədə seçilmiş obyektlərin olub olmadığını yoxlamaq üçün SelectionInfo() funksiyasını yerinə yetiririk.

Nəticədə MapInfo xüsusi obyekt yaradır [Selection], Hawkeye çayının sahilindən 700 metrlik bufer zonasına düşən bütün xəritə qrafiklərini ehtiva edir. Şəkildə bu obyektlər qırmızı nöqtələrlə işarələnib.

MapInfo coğrafi xüsusiyyətlər üçün aşağıdakı məkan operatorlarını dəstəkləyir:
ehtiva edir
«tərkib edir»
B obyektinin mərkəzi A daxilindədirsə, A obyekti B obyektini ehtiva edir.

Məzmunla dolu
«Tamamilə örtülüdür.»
A obyekti B obyektini tamamilə əhatə edir, əgər B-nin sərhədi tamamilə A-nın sərhədləri daxilindədir.

İçində
«İçəri».
A obyekti B obyektinin içərisindədir, əgər onun mərkəzi B-nin sərhədindədirsə.

Tamamilə İçəridə
«Tamamilə.»
A obyekti, sərhədi tamamilə B-nin hüdudları daxilində olarsa, tamamilə B obyektinin içərisindədir.

Bu kəsişir
«Xaçlar».
Ən azı bir ümumi nöqtəsi varsa, A obyekti B obyekti ilə kəsişir.

Arasındakı fərq [Contains] və [WithIn]bir tərəfdən və [Contains Entire] və [Entirely WithIn]digər tərəfdən, o [Contains] və [WithIn] obyekt centroid təhlili əsasında və [Contains Entirely] və [Entirely WithIn] — bütün obyektin təhlili üzrə.

Coğrafi xüsusiyyətlər:
Rayon (…)
Obyektin sahəsini qaytarır

Məsafə(…)
İki nöqtə arasındakı məsafəni qaytarır

ObjectLen(…)
Obyektin uzunluğunu qaytarır

Perimetr(…)
Obyektin perimetrini qaytarır

MapInfo-nun məkan SQL sorğularında bu alətlərdən istifadə coğrafi xəritə təhlilinə imkan verir. MapInfo tərtibatçılarının şüarı belədir: «HARADANIN başlanğıc olduğunu bilmək!»

Nəhayət, kod bufer zonasını təşkil edən seçilmiş obyektlər haqqında məlumat əldə etməyə imkan verir.
Kursor Flooding_obj yaradın (id_obj tam, ad_obj simvolu (70))

Lokal lnNRows tam ədəd kimi
m.lnNRows=Val(m.poMI.Eval([SelectionInfo(3)]))

Əgər m.lnNRows>0
mi=1 üçün m.lnNRows
m.poMI.Do([Fetch Rec ]+Transform(mi)+[ From «Selection»])
flooding_obj (id_obj, name_obj) daxil edin;
Dəyərlər (Val(m.poMI.Eval()[Selection.c1])));
m.poMI.Eval([Selection.c2]))

Endfor
Endif

Bu nümunə fərdi MapInfo cədvəlinin bütün sətirlərini təkrarlayır: [Selection]MapInfo bütün seçilmiş xəritə obyektlərini yerləşdirir.

Hamısı budur. Diqqət üçün təşəkkür edirik.
Şərhlər xoş gəlmisiniz.