MapX開發(fā)基礎(chǔ)教程(1): MapX開發(fā)概述
1、MapX簡介
MapX是MapInfo公司提供的GIS組件,通過對MapX的編程可以實現(xiàn)大多數(shù)MapInfo Professional的功能。
MapX為開發(fā)人員提供了一個快速、易用、功能強(qiáng)大的地圖化組件。在VC++、VB、Delphi等可視化開發(fā)環(huán)境中,只需將 MapX組件引入程序結(jié)合簡單的程序設(shè)計,對其進(jìn)行屬性、方法調(diào)用或相應(yīng)事件的設(shè)置,就能實現(xiàn)地圖數(shù)據(jù)顯示、地理查詢、地理空間分析、專題地圖制作與輸出等各種地理信息系統(tǒng)功能。
2、基于組件開發(fā)GIS應(yīng)用程序的體系結(jié)構(gòu)
客戶(用戶界面)---GIS組件---數(shù)據(jù)
第一層:提供應(yīng)用的界面,根據(jù)用戶的操作來調(diào)用相應(yīng)的應(yīng)用邏輯。在開發(fā)中,調(diào)用MapX的屬性和方法對數(shù)字地圖進(jìn)行管理,這一層也是開發(fā)的重點。
第二層:主要實現(xiàn)業(yè)務(wù)邏輯。這一層的主要功能都封裝在組件中。這些組件通過接口的形式把它所封裝的功能提供給開發(fā)者。
第三層:數(shù)據(jù)層,主要以文件或數(shù)據(jù)庫的形式為應(yīng)用程序提供數(shù)據(jù)支持。在GIS應(yīng)用的開發(fā)中,主要有兩類:一類是地圖數(shù)據(jù);另一類是專題數(shù)據(jù),這主要取決于GIS應(yīng)用。
三層軟件體系結(jié)構(gòu)是典型的客戶/服務(wù)器體系結(jié)構(gòu)的應(yīng)用程序。其優(yōu)點:應(yīng)用程序體積小、易于維護(hù)和安裝、開發(fā)周期短而且效率高。
3、數(shù)據(jù)準(zhǔn)備
在MapX組件中所管理的數(shù)據(jù)就是MapInfo的數(shù)據(jù)。
工作空間---圖層---圖元---點\線\面\文本
Geoset Manager
Geoset Manager是MapX一個重要的應(yīng)用程序,其功能在于為MapX提供數(shù)據(jù)來源。
通過該程序?qū)㈤_發(fā)中要使用的圖層路徑及相關(guān)的設(shè)置保存為一個文本格式的文件(*.gst)。
例子:西安市公交查詢系統(tǒng)gst文件的建立
4、MapX的內(nèi)部結(jié)構(gòu)
MapX封裝了對地圖數(shù)據(jù)的定義、組織、管理和操作,它的內(nèi)部有嚴(yán)格的層次結(jié)構(gòu)。
Map 屬性、方法
Layers 屬性、方法
Layer 屬性、方法
Features 屬性、方法
Feature 屬性、方法
(1)地圖對象
地圖對象代表一個完整的數(shù)字地圖,它的屬性就是整個地圖的屬性。
Geoset屬性:設(shè)置地圖對象所用的數(shù)據(jù)。
設(shè)置方式:
A 通過屬性頁或者屬性對話框
B 通過程序代碼進(jìn)行設(shè)置
Map1.Geoset = "d:\xa.gst"
(2)圖層集合
地圖實際上是由許多獨(dú)立的圖層組成的集合,這個集合在MapX中由Layers對象來管理。
?怎樣訪問圖層集合對象呢?
A 聲明一個Layers類的變量(指針)
B 給其賦值為地圖對象的圖層集合屬性。
例子:
Dim lyrs As Layers
Set lyrs = Map1.Layers
MsgBox lyrs.Count
(3)圖層
具有相同主題內(nèi)容地理特征(或?qū)ο螅┐娣庞谝粋€圖層。在MapX中有Layer對象管理。
?怎樣訪問圖層對象呢?
A 聲明一個Layer類的變量(指針)
B 給其賦值為地圖對象的圖層集合對象的某一項。
Gets a specific Layer object from the collection. Item takes either an index (Integer value starting at 1), or a layer name, to specify which Layer object to get.
例子:
Dim lyrs As Layers
Set lyrs = Map1.Layers
MsgBox lyrs.Count
Dim lyr As Layer
Set lyr = lyrs.Item(1)
MsgBox lyr.Name
(4)特征集合
圖層中的所有地理特征(或?qū)ο螅┑募稀T贛apX中有Features對象管理。
怎樣訪問特征集合對象呢?
A 聲明一個Features類的變量(指針)
B 給其賦值為某一圖層對象的AllFeatures屬性。
Dim lyrs As Layers
Set lyrs = Map1.Layers
MsgBox lyrs.Count
Dim lyr As Layer
Set lyr = lyrs.Item(1)
MsgBox lyr.Name
Dim fss As Features
Set fss = lyr.AllFeatures
MsgBox fss.Count
(4)特征
圖層中的一個地理對象對應(yīng)于一個特征。在MapX中有Feature對象管理。
怎樣訪問特征對象呢?
A 聲明一個Feature類的變量(指針)
B 給其賦值為某一圖層的特征集合的某一項。
Dim lyrs As Layers
Set lyrs = Map1.Layers
MsgBox lyrs.Count
Dim lyr As Layer
Set lyr = lyrs.Item(1)
MsgBox lyr.Name
Dim fss As Features
Set fss = lyr.AllFeatures
MsgBox fss.Count
Dim fs As Feature
Set fs = fss.Item(1)
MsgBox fs.Name
思考題
1 怎樣通過一條語句得到地圖對象的某一圖層對象?
2 地圖對象的Geoset屬性最好設(shè)置為相對路徑,為什么?怎樣進(jìn)行設(shè)置?
本文由GIS教程網(wǎng)參考科學(xué)出版社《GIS設(shè)計與開發(fā)》整理的讀書筆記,希望對學(xué)習(xí)用Mapinfo 的MapX做開發(fā)的朋友有用。