Mapinfo空間資料組織形式及Mapx開發技巧

2022-09-16 10:12:11 字數 3087 閱讀 4097

gis空間資料(包含屬性資料)儲存的方式主要有三種:

1、地**件+屬性關聯式資料庫表的混和方式,目前主流方式,如mapinfo乙個圖層,*.map

檔案儲存空間地圖資料,*.tab以關聯式資料庫表的形式儲存屬性資料。

2、關聯式資料庫表中有乙個特殊字段儲存二進位制的空間物件資料。這個我把它稱為半關係型

空間資料庫。比如geomedia

3、全關係型空間資料庫。空間物件的座標位置資訊以一定的機制(不是單個二進位製大物件

)全部存入關聯式資料庫。如esri的geodatabase

mapx的開發者肯定有很多是熟悉mapinfo的。在mapinfo裡面開啟乙個地圖,同時就可以打

開乙個瀏覽表瀏覽空間物件的屬性。這是因為圖層與資料庫表進行了預先繫結。

但是如果開發者用mapx開啟乙個個圖層之後,他可能會發現這些圖層的屬性不知道去**

去找了。這是因為mapx沒有再為我們預先繫結空間資料和屬性資料庫了。在mapx下,乙個

圖層的空間資料和屬性資料分別用layer物件和dataset物件完全分開管理。這樣的好處就

在於為擴大了屬性資料的**。你可以為乙個layer的空間物件繫結多個資料庫表。而且用

主流關係型資料庫軟體來管理屬性資料可比乙個單純的*.tab好多啦!(其實mapinfo也為

我們提供了許多繫結和操作外部資料庫的工具,我們不常用而已)

那如何在mapx裡用語句繫結外部的資料庫呢?跟我來

首先我還得羅嗦兩句mapx這個控制項。mapx控制項提供了幾十個物件,這些物件又通過其屬性

方法實現了mapinfo大部分的gis功能。在mapx提供的物件裡面有幾個我們要特別關注,因

為我們要經常用到它們:

layer物件、layers集合。用於管理圖層。

dataset物件、datasets集合。用於管理屬性資料集,可以看作乙個資料庫的記錄集。不過

dataset必須繫結於某乙個layer物件上。

annotation物件、annotations集合,管理註記。

feature物件,features集合。用於管理空間物件。feature可以是某一layer上的物件,也

可以是不屬於某一層的獨立的(stand-alone)物件。

featurefactory物件。用於對feature進行一些空間操作。比如buffer、建立物件、求物件

相交等講mapx裡繫結資料庫表的方法。

其實說到底只需要乙個方法就可以了——map.datasets.add

我以乙個例項來講解這個方法的用法。

假設mapx已經開啟乙個圖層,圖層名為"a",手頭還有乙個access資料庫a.mdb,資料庫裡面

有個表x想和a圖層繫結。我們保證a層屬性裡面有乙個欄位id1與表x的乙個欄位id2是匹配

的!!

ok, let?s begin。

第一步,資料庫的連線

各式各樣的資料庫要連進vb、vc,就需要二傳手——dao、ado、rdo等等

我們在vb裡面用adodc這個控制項在設計時就可以把a.mdb連線進來,把錶x作為乙個records

et。當然也可以用語句

conn = "provider=microsoft.jet.oledb.4.0;data source=a.mdb;persist security in

fo=false"

with adodc1

.connectionstring = conn

.recordsource = "select * from x"

.refresh

end with

其它關聯式資料庫(oracal、sql server)的表也完全可以通過adodc連線進來。只是連線字

符串裡面的provider不同罷了。

第二步,layer與資料庫的繫結

datasets.add 方法

第乙個引數 type。他可以繫結多達13種的資料來源,比如ado、dao、odbc等等。這裡我們當

然用midatasetado

第二個引數 sourcedata。指定資料來源。我們的資料來源是表x。我們已經指定表x是adodc1的

當前記錄源。該引數即為 adodc1.recordset

第三個引數 name。指定被繫結後的dataset的名稱。可選

第四個引數 geofield。指定資料來源中某個字段作為與layer匹配的字段。如果不選,mapx

會自動幫你找乙個的。這裡我們是id2

第五個引數 secondarygeofield。指定資料來源第二匹配字段。如果指定的第一匹配欄位中

兩個值相等,就靠它來找到對應的物件了。一般不用

第六個引數 bindlayer。指定繫結到哪一層。可以用層名,也可以用layer物件。我們例子

裡面圖層是a,將其作為引數。如果不指定,mapx也會自動幫你找乙個的。(呵呵蠻智慧型的

吧)

第七個引數 fields。 指定資料來源中哪些字段參與繫結。

第八個引數 dynamic。指定是否是動態繫結。預設為false。動態繫結就是要用這個datas

et時mapx再臨時繫結資料到物件上

講解完了引數的用法,我們的語句也就出來了:

dim mydataset as dataset

set mydataset=map1.datasets.add(midatasetado, adodc1.recordset, "mydataset", "

id2", , "a")

這一句裡面,"id2"和"a"如果不寫也不會影響結果,因為mapx會自動去尋找最符合要求的

欄位和被繫結圖層的。但是作為一種良好的程式設計風格,最好指定!

第三步,盡情的用你的dataset吧

繫結了dataset,乙個圖層才具有了屬性的資料。你才可以進行很多功能的實現。比如說取

值賦值、專題製圖等等

資料檔案的組織形式

1.欄位的表示 每個字段表示成具有一定長度的位元組序列。2.記錄的表示 name address gender birthday030 286287 190記憶體的定址方式以4的倍數進行 擴充為4的倍數 name address gender birthday 1244 300304 308addr...

Sql Server 空間資料

1 地理座標系空間需要用geography 平面座標系空間用geometry,計算距離使用stdistance 字串裡經緯度的順序是 經度 空格 緯度 即 longitude latitude 如果要計算兩個lat lon點之間的實際距離就需要將geometry型別轉成geography型別,不然結...

空間資料轉換引擎

引擎採用windows com方式開發,二次開發者可以直接使用所提供的元件進行二次開發。支援第三方嵌入開發 第三方根據引擎提供介面,實現其特定格式檔案轉換,編譯成動態庫後可直接嵌入引擎內部,實現無縫連線。軟體實現的功能是支援以下格式空間資料格式相互轉換 arc view shape 檔案 arc i...