MapInfo Professional көмегімен Visual FoxPro бағдарламасында ГАЖ құру

MapInfo Professional көмегімен Visual FoxPro бағдарламасында ГАЖ құру

Мақаланың мақсаты: MapInfo Professional көмегімен VFP бойынша географиялық ақпараттық жүйені құру кезінде жұмыстың негізгі әдістерін көрсету. Материал жер комитеттерінде, геодезиялық немесе жерге орналастыру ұйымдарында жұмыс істейтін IT-мамандарға арналған.
Кіріспе
MapInfo данасын іске қосу
Карталар жасау
Қолданбаңыздағы MapInfo картасы терезесі
«ҚАЙДА екенін білу – бұл бастама!»

1. Кіріспе

Жер және жылжымайтын мүлік көптеген штаттарда сенімді және сонымен қатар тұрақты өсіп келе жатқан актив болып табылады. Кез келген ресурс сияқты жер және басқа да жылжымайтын мүлік ескерілуі керек. Жер учаскелерін, оларда орналасқан жылжымайтын мүлік объектілерін түгендеу, бағалау, кейіннен жерді және ғимараттарды қайта бағалау қоршаған ортаның тез өзгеретін жағдайларымен, республикалық және муниципалдық заң шығарумен қиындайды. Жерді және жылжымайтын мүлікті бағалауда жүргізілетін есеп айырысу операциялары географиялық мағыналық құрамдас бөлігі бар көптеген параметрлерді пайдаланады. Географиялық ақпаратты аналитикалық өңдеуге мүмкіндік беретін ақпараттық жүйелердің қажеттілігі неден туындайды.

MapInfo Corporation американдық компаниясының MapInfo кәсіби өнімі географиялық ақпаратты талдау құралдарымен бірге VFP қолданбаңызға векторлық карталарды қосу мүмкіндігін береді. MapInfo Professional бағдарламасы MapInfo IDE құрамына кіретін MapBaisic бағдарламалау тілінде бағдарламаларды іске қосуға мүмкіндік береді. Әзірлеуші ​​MapInfo COM интерфейсімен қамтамасыз етілген, ол карталардың көрсетілуін басқаруға, сондай-ақ жеке командалар мен MapBaisic бағдарламаларын орындауға мүмкіндік береді.

2. MapInfo данасын іске қосу

MapInfo Professional бағдарламасын орнатқаннан кейін «MapInfo.Application» класы OC Windows тізілімінде тіркеледі, егер MapInfo Runtime пайдалансаңыз, содан кейін «MapInfo.Runtime» класы. Осылайша MapInfo іске қосылады:
Қоғамдық poMI нысан ретінде
m.poMI=Нысан жасау([MapInfo.Application])

Дәл әдіс сияқты [.Quit] MapInfo COM үлгісі MapInfo данасын төмендегідей өшіруді қамтамасыз етпейді:
m.poMI=Нөл
poMI шығарыңыз

3. Карталарды жасау

Қолданбаға векторлық картаны қосу үшін сізде біреуі болуы керек. MapInfo Professional бағдарламасының кейбір таратулары Еуропа, Азия және Солтүстік Американың көптеген елдері мен ірі қалаларының карталарын қамтиды. Бірақ егер сізге Смоленск немесе Ыстамбұл маңындағы бақша учаскелерінің шекаралық картасы қажет болса ше. Мен Түркияда қалай екенін білмеймін, бірақ кейбір Смоленск әкімшілігінің жер комитеті сізге қолайлы бағамен бере алатын материалдардың сапасы сізге сәйкес келмейді. (Мүмкін сіз тіпті осы жер комитетінде жұмыс істейтін шығарсыз?) Ал сізге карта керек! Бірақ, сіз белгілі бір жерге орналастыру басқармасы геодезиялық іздестіру жұмыстарын жүргізгенін және сізге картасы қажет екенін білесіз! (Немесе сіз осы жерге орналастыру кеңсесінде жұмыс істейсіз бе?)

Олай болса, геодезиялық түсіріс нәтижесінде алынған координаталық мәліметтер негізінде карта құруды қарастырайық. Егжей-тегжейлерге тоқталмай-ақ, MapInfo-дағы картаны кесте деп санауға болады, оның әрбір жолы графикалық нысанға сәйкес келеді. Әдісті қолдану [.Do()] MapInfo бағдарламасының COM объектісі, MapBasic командаларының келесі тізбегін орындаңыз:
Жергілікті lcCommandMapBaisic таңба ретінде
Text to m.lcCommandMapBaisic TextMerge Noshow

«myMap» кестесін құру (c1 Integer,c2 Char(100))
«c:gismyMap.TAB» файлы
NATIVE деп теріңіз
«WindowsCyrillic» таңбалар жинағы

«myMap» картасын жасау
CoordSys NonEarth Units «m» Шекаралары (0,0) (10000,10000)

Шолу * «myMap» ішінен
«myMap» картасынан

Соңғы мәтін

m.poMI.Do(m.lcCommandMapBaisic)
lcCommandMapBaisic шығарыңыз

Міне, бірінші команда [Create Table …] кесте жасайды [myMap] бағандармен [c1] Integer типті i [c2] Char(100) типті, кесте файлы каталогта орналасқан [c:gis]кесте түрі — ішкі MapInfo пішімі, кесте код беті [WindowsCyrillic]. Келесі пәрмен [Create Map …]кестеде жасайды [myMap] баған [obj]Картаны құрайтын графикалық объектілерді жасауға және сақтауға мүмкіндік беретін арнайы MapInfo түрінің A. Картаның координаттар жүйесі сөз тіркесі арқылы беріледі [CoordSys NonEarth], ол декарттық координаталар жүйесіне сәйкес келеді және жер бедерінің жоспарын картаға түсіруге қолайлы. Параметр [Units] өлшем бірлігін 1 метрге, ал параметрді орнатады [Bounds] карта шекаралары. Қалған екі MapBasic пәрмені [Browse …] және [Map From …] сәйкесінше кесте мен карта терезелерін ашыңыз және интуитивті синтаксиске ие болыңыз.

Карта өрісі жасалды. Келесі қадам картаға графикалық примитивтерді қосу болып табылады. Мысалы:
Жергілікті lcCommandMapBaisic таңба ретінде
Text to m.lcCommandMapBaisic TextMerge Noshow

CoordSys NonEarth Units «m» шекараларын орнату (0,0)(10000,10000)

Объект ретінде күңгірт аймақ
Аймақты loRegion 3 айнымалысына жасаңыз
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) мәндеріне кірістіру (1,loRegion)
Аймақтың UnDim

Картаны толық масштабтау параметрін орнату

Соңғы мәтін

m.poMI.Do(m.lcCommandMapBaisic)
lcCommandMapBaisic шығарыңыз

Бірінші MapBasic пәрмені екенін ескеріңіз [Set CoordSys …] құрылған графикалық объектілердің координаттарының картаның координаталық өрісіне сәйкестігін орнатамыз. Содан кейін біз айнымалыны жариялаймыз [loRegion] түрі [Object]. команда [Create Region …] нәтижені бұрын жарияланған айнымалыға сақтай отырып, графикалық нысанды жасаймыз. Осыдан кейін команда [Insert Into …] кестеге енгізу [myMap] өріс мәні ретінде 1 қолданатын жаңа жол [c1] және айнымалы [loRegion]өріс үшін мән ретінде [obj]. Команда [UnDim …] айнымалыны жояды [loRegion]. Соңғы MapBasic пәрмені [Set Map Zoom Entire] – карта терезесінің жұмыс аймағындағы кескінді масштабтайды.

Міне, жұмысымыздың нәтижесін көрсететін MapInfo Professional терезесінің көрінісі:

Осылайша, геодезиялық жұмыстардың координаталық деректеріне ие бола отырып, графикалық объектілерді құру, геодезиялық өлшемдердің координаттық мәліметтерін алмастыру және сол арқылы векторлық карталар мен жер бедерінің жоспарларын құру командаларын бағдарламалық түрде құру қиын емес.

Бір маңызды ескерту. Әрине, сіз картаны жасаған кезде масштабты пайдаланбағанымызға назар аудардыңыз. Таңқаларлық ештеңе жоқ — векторлық картада карталарды дәл 1: 1 масштабта жасау өте ыңғайлы, біз жасағандай, картаны экранда көру үшін ерікті масштабты таңдауға болады. Карталардың немесе жоспарлардың қағаз көшірмелерін басып шығару кезінде стандартты масштабта 1:200, 1:500, 1:1000, 1:2000 және т.б.

4. Қолданбаңыздағы MapInfo картасының терезесі

MapInfo картасымен қалай жұмыс істеу керектігін көрсететін VFP класс коды:
* пайдалану мысалы
*Пішін ретінде қоғамдық poFM
*m.poFM=Нысан жасау([form4map],[c:gismyMap.tab])
*m.poFM.Show()
*—————————————————————————
Form4map класын пішін ретінде анықтаңыз
map_hwnd=0 && карта терезесінің көрсеткіші

Процедураны бастау
Lparameters lcFileMap
This.AddProperty([Map],Нысан жасау([Mapinfo.Application]))
* MapInfo құжатының келесі терезесі
* осы пішіннің еншілес терезесі болады
This.Map.Do([Set Next Document Parent ]+;
Transform(This.HWnd)+[ Style 1])
*картаны ашу
This.Map.Do([Open Table «]+m.lcFileMap+[» ]+;
[Map From «]+Juststem(m.lcFileMap)+[«])
* карта терезесінің көрсеткішінің анықтамасы
This.map_hwnd=Val(This.Map.Eval([WindowInfo(FrontWindow(),12)]))
* карта терезесінің өлшемін басқару функциясын жариялау
user32 ішінде MoveWindow бүтін санды жариялау;
Бүтін HWnd,;
Бүтін x,;
бүтін y, ;
Бүтін nWidth,;
Integer nHeight,;
Бүтін сан bRepaint
аяқтау

Процедураның өлшемін өзгерту
* карта терезесінің өлшемін оның пішінін қамтитын өлшемге өзгерту
MoveWindow(This.map_hwnd,0,0, This.Width, This.Height,0)
аяқтау

Процедура жою
* MapInfo COM нысанын өшіру
This.Map=Нөл
MoveWindow Dll файлдарын тазалаңыз
аяқтау

Enddefine

Нәтижесінде VFP пішінінде жоспар (карта) бар, суретті қараңыз.

api функциясын пайдалану арқылы [MoveWindow] әдісте [Resize] пішін, пішін өлшемі өзгертілген кезде MapInfo терезесіндегі карта автоматты түрде негізгі пішін өлшеміне дейін масштабталады.

5. «ҚАЙДАДЫ білу – тек бастамасы!»

Бізде белгілі бір елді мекеннің жоспары (картасы) бар, суретті қараңыз:

Сіз төтенше жағдайды имитациялағыңыз келеді делік: Хауки өзеніндегі бөгеттің бұзылуы нәтижесінде жағалау сызығынан 700 метрге дейінгі аумақ су астында қалады. Су басу аймағына қанша және қандай қала ғимараттары түсуі мүмкін екенін анықтау талап етіледі.

Хауки өзенінің оң жағалауынан 700 метрлік буферлік аймақты салайық:
Жергілікті lcCommandMapBaisic таңба ретінде
Text to m.lcCommandMapBaisic TextMerge Noshow

Нысан ретінде loFlooding_zone күңгірттендіріңіз

Нысанды таңдаудан буфер ретінде жасаңыз
LoFlooding_zone айнымалысына
Ені 700 бірлік «м»

«myMap» ішінен c1,c2 таңдаңыз
Қай жерде myMap.obj WithIn loFlooding_zone
c1,c2 бойынша топтау
c1 бойынша тапсырыс беру

Су басқан_аймақ Күңгірт

Соңғы мәтін

* SelectionInfo() – MapBasic функциясы,
* берілген параметрге байланысты ақпаратты қайтарады
* бұл жағдайда ағымдағы картадағы таңдалған аймақ туралы
* таңдалған объектілердің саны
Егер Val(m.poMI.Eval([SelectionInfo(3)]))>0
m.poMI.Do(m.lcCommandMapBaisic)
Басқа
Хабарлама([Для построения буферной зоны ;
необходимо выбрать объект на карте.],48,[Внимание],10000)
Эндиф
lcCommandMapBaisic шығарыңыз

Берілген кодты қарастырайық. Команда [Create Object As Buffer …] — нәтижені айнымалыда сақтай отырып, қажетті буферлік аймақты жасайды [loFlooding_zone]. Келесі пәрмен — SQL сұрауы, мұнда сөз тіркесі [Where …] келесідей түсіну керек: карта объектілері [myMap] ішінде (Ішінде) буферлік аймақ [loFlooding_zone]. Осы сценарийді орындау кезінде картада таңдалған нысандар болмаса, MapInfo қатені жасайды, сондықтан оны орындауға жібермес бұрын, [.Eval(…)] MapInfo үлгісінің COM параметрінде картада таңдалған нысандардың бар-жоғын тексеру үшін SelectionInfo() функциясын орындаймыз.

Нәтижесінде MapInfo арнайы нысанды жасайды [Selection], онда Хауки өзенінің жағалау сызығынан 700 метрлік буферлік аймаққа түсетін барлық карта графикасы бар. Суретте бұл нысандар қызыл ойықтармен белгіленген.

MapInfo географиялық мүмкіндіктер бойынша келесі кеңістіктік операторларды қолдайды:
Құрамында
«Құрамында»
А нысанында В нысаны бар, егер В-ның центроиді А ішінде болса.

Құрамында толық
«Толығымен қамтылған».
А нысаны В нысанын толығымен қамтиды, егер В шекарасы толығымен А шекараларында болса.

WithIn
«Ішінде».
А нысаны В нысанының ішінде орналасады, егер оның центриді В шекарасында болса.

Толығымен Ішінде
«Мүлдем ішінде».
А нысаны толығымен В объектісінде орналасқан, егер оның шекарасы толығымен В шекарасында болса.

Қиылысады
«Кресттер».
А нысаны В нысанымен қиылысады, егер олардың кем дегенде бір ортақ нүктесі болса.

Арасындағы айырмашылық [Contains] және [WithIn]бір жағынан, және [Contains Entire] және [Entirely WithIn]екінші жағынан, бұл [Contains] және [WithIn] объектінің центроидін талдауға негізделген және [Contains Entirely] және [Entirely WithIn] — бүкіл объектіні талдау бойынша.

Географиялық ерекшеліктері:
Аудан(…)
Нысанның ауданын қайтарады

Қашықтық(…)
Екі нүкте арасындағы қашықтықты қайтарады

ObjectLen(…)
Нысанның ұзындығын қайтарады

Периметр(…)
Нысанның периметрін қайтарады

MapInfo-ның кеңістіктік SQL сұрауларында бұл құралдарды пайдалану картаны географиялық талдауға мүмкіндік береді. MapInfo әзірлеушілерінің ұраны: «ҚАЙДА екенін білу – бұл бастама!».

Соңында, код буферлік аймақты құрайтын таңдалған нысандар туралы деректерді алуға мүмкіндік береді.
Курсорды жасау Flooding_obj (id_obj бүтін сан, name_obj таңба(70))

Жергілікті lnNRows бүтін сан ретінде
m.lnNRows=Val(m.poMI.Eval([SelectionInfo(3)]))

Егер m.lnNRows>0
mi=1 үшін m.lnNRows
m.poMI.Do([Fetch Rec ]+Transform(mi)+[ From «Selection»])
Flooding_obj ішіне кірістіру (id_obj, name_obj) ;
Мәндер (Val(m.poMI.Eval()[Selection.c1])));
m.poMI.Eval([Selection.c2]))

Endfor
Эндиф

Бұл мысалда арнайы MapInfo кестесінің барлық жолдарын қайталайды: [Selection]оған MapInfo барлық таңдалған карта нысандарын орналастырады.

Бар болғаны. Назарларыңызға рахмет.
Пікірлер қабылданады.