Visual FoxPro proqramlarının və GIS MapInfo Professional proqramlarının daha dərin inteqrasiyası.

Новости мира

Məqalədə MapInfo Professional mühitində Visual FoxPro tətbiqinin xüsusiyyətləri və məkan məlumatlarının qarşılıqlı əlaqə mexanizmi müzakirə olunur.

“MapInfo Professional ilə Visual FoxPro-da GIS-in qurulması” məqaləsini dərc etdikdən sonra mən tez-tez Visual FoxPro proqramlarının MapInfo Professional GIS ilə sıx inteqrasiyası və MapInfo Professional COM modelinin tətbiqi imkanları ilə bağlı suallara cavab verməli olurdum. Ona görə də ilk növbədə suallarına gec, çox qısa cavab verən və ya ümumiyyətlə cavab verməyən həmkarlarımdan üzr istəyirəm.

MapInfo Professional mühitində həm daxili MapInfo formatında, həm də xarici verilənlər bazalarında geoməkan məlumatlarının semantik məlumatlarla əlaqəsini təşkil etmək üçün lazım olan hər şeyi ehtiva etməsinə baxmayaraq, praktikada MapInfo-nun effektiv iş yeri yaratmaq imkanları məlumdur. həmişə kifayət deyil. Və VFP məlumatlarının inanılmaz performansını nəzərə alsaq, inkişaf üçün Visual FoxPro istifadə həlli ən yaxşı seçim olardı!

Coğrafi komponentə malik informasiya sistemini hazırlayarkən adətən tələb olunan ilk şey “HARADA”nın müəyyən edilməsidir. Yəni, [Москва, Красная площадь, д.1] — O haradadır? Bu halda, ilk növbədə, pəncərənin görünən hissəsi xəritə pəncərəsində köçürülməlidir ki, obyekt [Москва, Красная площадь, д.1] xəritə pəncərəsinin ekran sahəsində idi. İkincisi, ekran miqyası elə seçilməlidir ki, obyekt xəritə pəncərəsində seçilsin və istədiyiniz obyektin mərkəzini təşkil edən kifayət qədər sayda qonşu obyekt görünsün.

İkincisi, xəritədə obyekt seçərkən xəritədə seçilmiş obyektlə bağlı məlumat bazasından məlumat vermək lazımdır.

Qeyd etmək lazımdır ki, ikinci tələb yalnız MapInfo Professional ilə təmin edilə bilməz. Sistem hadisəsini ləğv etmək üçün proseduru yazmaq və tərtib etmək üçün MapBasic proqramlaşdırma mühitinə ehtiyacınız var. [SelChangedHandler]bunun kimi:

Sub SelChangedHandler elan edin

SelChangedHandler() zəng edin

Sub SelChangedHandler
Əgər SelectionInfo(3) > 0 olarsa
Run Menu Command ID 1001-dir
Əgər sonluq
Bitirmə ikinci dərəcəlidir

MapInfo Professional mühitində işləməyə hazır olan artıq tərtib edilmiş proqram budur: [hook_selection.mbx]. Bu prosedurda hər dəfə hadisə baş verir [SelChangedHandler] ID ilə düyməyə verilən əmr yerinə yetirilir [1001].

Vacibdir! MapInfo Professional MapInfo Professional-dan daha yüksək MapBasic versiyası ilə qurulmuş proqramları işlədə bilməz. Fayl [hook_selection.mbx] MapBasic 9.5-də qurulmuşdur, onu www.mapinfo.com saytından yükləmək olar: www.mapinfo.com.

İndi bizi maraqlandıran xüsusiyyətləri həyata keçirən Visual FoxPro sinif koduna baxaq.

*!*
*!* VFP tətbiqi və MapInfo xəritəsini birləşdirir
*!*
*!*
*!* VFP tətbiqi və MapInfo xəritəsini birləşdirir
*!*
*!* istifadə nümunəsi:

*!* Format kimi ictimai forma
*!* m.oForm=Obyekt yarat([demo_form],[C:callback_mapmap01.tab])
*!* m.oForm.Show()
*!*
Demo_form sinfini forma kimi təyin edin
Üst=0
Sol=0
Hündürlük=200
Eni=450
ShowWindow=2
DoCreate=.T.
BorderStyle=2
Qeyd =[DEMO: callback and managment by map from MapInfo]
MaxButton=.F.
MinButton=.F.
Adı=[Form1]
cMap=[]
Enabled_ChangedHandler=[ON]

Obyekt list1-i siyahı qutusu kimi əlavə etməklə;
Hündürlük=150,;
Sol=1,;
Üst=1,;
Eni=450,;
Adı=[List1]

Obyekt Command1-i Komanda Düyməsi kimi əlavə edin;
Yuxarı=171,;
Sol=360,;
Hündürlük=25,;
Eni=85,;
Qeyd =[Закрыть],;
Adı=[Command1]

Prosedur Başlanğıc (cMap kimi simvol) BOŞ kimi
This.cMap=m.cMap
Obyekt kimi ictimai pomi
Çalışır
m.poMI=Getobject(,[MapInfo.Application])
Gözlə
m.poMI=Obyekt yarat([MapInfo.Application])
Tamamlama
yazınsa ([m.poMI.Name])#[C]
mesaj([Ошибка при попытке обратиться к «MapInfo.Application»],;
16+4096,[Внимание],15000)
Qayıdın .F.
Endif
m.poMI.Visible=.T.
m.poMI.SetCallback(Bu)
m.poMI.Do([Alter ButtonPad ID 4 ]+;
[Add PushButton Calling OLE «DEMO_ChangedHandler» ID 1001])
m.poMI.Do([Run application «C:callback_maphook_selection.mbx»])
m.poMI.Do([Open Table «]+This.cMap+;
[» Interactive Map From «]+ Juststem(This.cMap)+[«])
Endproc && Init

DEMO_changedhandler(lcParam personaj kimi) proseduru VOID kimi
Thisform.Enabled_ChangedHandler= varsa[ON] Və;
Val(m.poMI.Eval([SelectionInfo(3)]))>0

Simvol olaraq yerli lc_MI_query
m.lc_MI_query=m.poMI.Eval([SelectionInfo(2)])
Simvol olaraq yerli lcValueFromMap
m.lcValueFromMap=m.poMI.Eval(m.lc_MI_query+[.txt])
Thisform.list1.AddItem(m.lcValueFromMap)
Thisform.list1.Value=Thisform.list1.ListCount
Endif
Endproc && demo_changehandler

Çıxarma proseduru
yazınsa ([m.poMI.Name])=[C]
m.poMI.Do([Alter ButtonPad ID 4 Show])
m.poMI.Do([Alter ButtonPad ID 4 Remove ID 1001])
m.poMI.Do([Close All Interactive])
Endif
m.poMI=Nil
Pomi buraxın
Endproc && Destroy

Prosedurların siyahısı 1. vurun
Thisform.Enabled_ChangedHandler=[OFF]
m.poMI.Do([select obj from Map01 where txt=»]+;
This.ListItem(This.Value)+[» into _tmp])
m.poMI.Do(;
[set map center ]+;
[(CentroidX(_tmp.obj),]+;
[CentroidY(_tmp.obj))]+Chr(13)+Chr(10)+;
[zoom Distance( ]+;
[ObjectGeography(_tmp.obj,1),]+;
[ObjectGeography(_tmp.obj,2),]+;
[ObjectGeography(_tmp.obj,3),]+;
[ObjectGeography(_tmp.obj,4),»m»)*8 Units «m»])
Thisform.Enabled_ChangedHandler=[ON]
Endproc && list1. üzərinə klikləyin

Prosedur Komandası 1. Klikləyin
Buform.Release
Endproc && əmri 1. Klikləyin

Enddefine && demo_form

Burada metodda [Init] MapInfo hadisəsinin ləğvi əlavə edildi [SelChangedHandler] – xəritədə seçilmiş obyekt dəyişdikdə işə salınır. Bunun üçün üsulda [SetCallback] MapInfo COM nümunəsi metodu ehtiva edən obyektə istinad ötürülür [DEMO_ChangedHandler], yəni. formamız. Aşağıdakı əmr: [Alter ButtonPad…] «Əmrlər» alətlər panelində onu metod çağırışı ilə əlaqələndirən düymə yaradır [DEMO_ChangedHandler]düymə identifikatoru təyin edir [1001]. Bundan sonra proqram MapInfo mühitində işə salınır [hook_selection.mbx]bir sistem hadisəsi işə salındıqda baş verir [SelChangedHandler] id ilə düyməyə verilən əmri yerinə yetirin [1001]. Sonra, komanda [Open Table…]kart açılacaq.

Bu, ikinci tələbin yerinə yetirilməsini təmin edir, yəni. – xəritədə obyekt seçərkən xəritədə seçilmiş obyektlə bağlı verilənlər bazasından məlumatları göstərin. Yalnız metod kodunu yazmaq qalır [DEMO_ChangedHandler]. Nəzərdən keçirilən sinifdə metodologiya [DEMO_ChangedHandler] Xəritədə seçilmiş obyektin atributunu formadakı ListBox-a əlavə edir (sahə [txt]).

Deməyə ehtiyac yoxdur, MapInfo-nun hadisələrin qarşısının alınması mühərriki bu hərtərəfli əla məhsulun heyrətamiz xüsusiyyətidir.

Birinci tələb tədbirin “HARADA”sının dəqiqləşdirilməsidir [List1.Click]. Budur komanda [select obj from Map01 …] xəritədən istədiyiniz obyekti seçin. Sonra əmrləri ardıcıllıqla yerinə yetirməklə [set map center…] və [zoom…] xəritənin göstərilməsi pəncərəsinin mərkəzini seçilmiş obyektin mərkəzinin koordinatlarına təyin edin və xəritə pəncərəsində göstərilən fraqmentin ölçüsünü seçilmiş obyektin ətrafında təsvir olunan düzbucaqlıdan 8 dəfə böyük olaraq təyin edin.

Sistem hadisəsinə səbəb olmamaq üçün diqqətli olun [SelChangedHandler]xəritədə proqramlı olaraq obyekt seçdiyiniz zaman hadisə [List1.Click] dəyəri təyin etməklə başlayır [OFF] bayraq [Enabled_ChangedHandler]üsulla yoxlanılır [DEMO_ChangedHandler]və bayrağın qaytarılması ilə başa çatır [Enabled_ChangedHandler] mənaya [ON].