地圖的基本操作:空間數(shù)據(jù)與工作空間
GIS的基本功能之一
——展示地理數(shù)據(jù)并實現(xiàn)對地理數(shù)據(jù)的操作
如:
- 數(shù)據(jù)的加載與保存
- 數(shù)據(jù)的視圖操作
- 地圖的量算
- 不同窗口之間的視圖聯(lián)動
- 地圖的圖層控制
空間數(shù)據(jù)
按劃分標準不同
- 矢量數(shù)據(jù)和柵格數(shù)據(jù)
- GIS格式的地理數(shù)據(jù)和非GIS格式的數(shù)據(jù)(如囱怕,CAD格式等)
- 空間數(shù)據(jù)庫數(shù)據(jù)(如,ArcSDE數(shù)據(jù)庫等)和文件數(shù)據(jù)(Shapefile格式、Coverage格式)
1. *.mxd文件
- 項目工程文件
- 主要記載一個工程包含
- 哪些圖層
- 圖層文件對應的物理位置
- 每個圖層的符號是如何設(shè)置的
- ……
- 但是膛薛,它并不儲存實實在在的空間數(shù)據(jù)
空間數(shù)據(jù)存儲在空間數(shù)據(jù)庫中票渠,習慣上稱為數(shù)據(jù)集(Dataset)胸完、特征類(FeatureClass)等妥凳。
2.MapControl控件簡介
1)
MapControl對應ArcMap中的數(shù)據(jù)視圖贝攒,它封裝了Map對象笆凌,并提供了額外的屬性圣猎、方法、事件用于:
- 1管理控件的外觀乞而、顯示屬性和地圖屬性送悔;
- 2添加并管理控件中的數(shù)據(jù)層;
- 3裝載Map文檔(.mxd)到控件中
- 4從其它應用程序拖放數(shù)據(jù)到控件中爪模;
2)
- ArcGIS的每種控件都有屬性可以設(shè)置欠啤,它們可以在可視化環(huán)境中進行編輯。將控件拖放到窗體上后屋灌,用戶可以右鍵點擊洁段,選擇“屬性”菜單來編輯這些屬性,它們可以讓用戶不編寫一行代碼的情況下快速構(gòu)建一個GIS應用程序共郭。
- MapControl實現(xiàn)的主要接口有:IMapControlDefault祠丝、IMapControl2、IMapControl3落塑、IMapControl4和事件接口IMapControlEvents2纽疟。
IMapControlDefault接口
IMapControl2接口
IMapControl3接口
IMapControl4接口
IMapControlEvents2接口
- IMapControlDefault
- IMapControlDefault接口是地圖控件缺省接口,多數(shù)開發(fā)環(huán)境自動使用這個接口定義的屬性憾赁、方法污朽。
- MapControl是一個自動化控件,當它被放到一個容器龙考,如窗體上后蟆肆,它會自動產(chǎn)生一個被稱為axMapControl1的對象,這個對象可以直接使用缺省接口定義的屬性和方法晦款。
- 這個接口也代表了控件最新版本的接口炎功,MapControl當前最新版本接口為IMapControl4。
- MapControlDefault接口的時候缓溅,可以使用下面代碼:
IMapControlDefault pMapControl蛇损;
pMapControl=axMapControl1.Object as IMapControlDefault;
//返回潛在的MapControl控件
2.IMapControl2接口
- 提供了一系列屬性和方法,如設(shè)置MapControl控件的顯示屬性淤齐、控件外觀股囊,添加及管理數(shù)據(jù)圖層和地圖文檔、在控件上繪制圖形和返回幾何圖形
- IMapControl2定義了控制控件外觀界面的各種屬性和方法更啄,如Appearance稚疹,BorderStyle和BackColor。它定義的方法有TrackLine祭务、TrackPolygon内狗、TrackRectangle和TrackCircle方法讓程序員可以直接在控件上獲得Geometry對象,它還提供了Drawshape和DrawText方法讓用戶直接在控件上繪制圖形义锥。
- IMapControl2接口
IMapControl2 pMapControl柳沙;
pMapControl =axMapControl1.Object as IMapControl2;
//或
pMapControl=axMapControl1.GetOcx()asIMapControl2缨该;
3.IMapControl3接口
- 該接口繼承IMapControl2偎行,并增加了以下8個屬性和一個方法:
- CustomProperty:設(shè)置自定義控件屬性
- DocumentFilename:返回MapControl裝入的地圖文檔的文件名
- DocumentMap:返回MapControl最后裝入的地圖的名稱
- Keylntercept:返回或設(shè)置MapControl截取鍵盤按鍵信息。
- Object:返回潛在的MapControl控件
- ShowMapTips:控制是否顯示地圖的Map Tips
- TipDelay:設(shè)置MapTips的延遲時間
- TipStyle:設(shè)置MapTips的顯示樣式
-
-
SupressResizeDrawingl:當控件尺寸發(fā)生變化時阻止數(shù)據(jù)實
時重繪
-
Keylntercept:返回或設(shè)置MapControl截取鍵盤按鍵信息贰拿。
VesrikeyIntercept None值0—一沒有截取鼠標按鍵VesriKeyIntercept Arrowkeys值1——截取箭頭按鍵
Vesrikey Intercept Alt值2——截取了Alt按鍵
VesrikeyIntercept Tab值4——截取了Tab按鍵
VesrikeyIntercept Enter 8值——截取了Enter按鍵
-
Keylntercept:返回或設(shè)置MapControl截取鍵盤按鍵信息贰拿。
- Object:返回潛在的MapControl控件
-
SupressResizeDrawingl:當控件尺寸發(fā)生變化時阻止數(shù)據(jù)實
IMapControl3pMapControl蛤袒;
pMapControl =axMapControl1.Object as IMapControl3;
pMapControl=axMapControl1.GetOcx()as IMapControl3膨更;
4.IMapControl4接口
- 在3的基礎(chǔ)上增加了兩個屬性妙真,分別是
- AutoKeyboardSrcolling和AutoMouseWheel
√AutokeyboardSrcolling:確定鍵盤滾動輪是否起作用
√AutoMouseWheel:確定鼠標滾輪是否起作用
- AutoKeyboardSrcolling和AutoMouseWheel
5.IMapControlEvents2接口
- 它定義了MapContro能夠處理的全部事件口如OnMouseDown、OnAfterDraw荚守、OnMouseMove等珍德,這些事件用戶在建構(gòu)獨立程序過程中經(jīng)常用到。
- 如OnAfterscreenDraw是繪屏結(jié)束后觸發(fā)的事件矗漾,
OnExtentUpdated是地圖的Extent屬性發(fā)生變化時觸發(fā)的事件等锈候。
3.數(shù)據(jù)加載
1)加載地圖文檔
- CheckMxFile方法
- LoadMxFile方法
CheckMxFile方法
public bool CheckMxFile(string fileName);
該方法的作用是判斷選中的文件是否是一個可以加載到MapControl空間中的有效地圖文檔敞贡。
LoadMxFile方法
public yoid LoadMxFile(
string mxPath泵琳,//表示文件路徑的字符串表達式(必選)
object mapNameorlndex,//表示地圖名或索引的序號(可選)
object password)誊役;//表示密碼(可選)
該方法的作用是向MapControl控件中加載地圖文檔获列。
實例
string filePath=@"C:\Temp\myDocument.mxd";
if(axMapControl1.CheckMxFile(filePath))
axMapControl1.LoadMxFile(filePath蛔垢,Type.Missing击孩,Type.Missing);
2)加載Shapefile數(shù)據(jù)-1
- (1)通過地圖控件AddShapefile方法添加
axMapControl1.AddShapeFile//(文件路徑鹏漆,文件名)
-
(2)通過工作空間加載Shapefile文件
- lWorkspace接口
- IWorkspaceFactory接口
- lMap接口
- lLayer接口
- lFeatureLayer接口
- lFeatureClass接口
IWorkspace接口
- 工作空間(Workspace)對象
- 在物理級別上相當于地理數(shù)據(jù)庫本身巩梢;
- 在邏輯上是一個空間數(shù)據(jù)集和非空間數(shù)據(jù)集的數(shù)據(jù)容器创泄。
- 數(shù)據(jù)加載需要先打開工作空間。
- IWorkspace接口
√在Geodatabase類庫中
√定義了訪問空間數(shù)據(jù)屬性的各種方法
√可實例化現(xiàn)有的數(shù)據(jù)集和創(chuàng)建新數(shù)據(jù)集
√但工作空間是一個普通類且改,因此無法直接創(chuàng)建
IWorkspaceFactory接口
定義了創(chuàng)建验烧、打開工作空間的方法和對工作空間信息成員的訪問
-
通過此接口管理不同類型的工作空間,所有的工作空間對象都可以通過此接口產(chǎn)生
-
此接口中Create方法可以產(chǎn)生一個新的工作空間對象又跛。但是不同類型的工作空間工廠對象,其Create方法產(chǎn)生的工作空間對象是不同的若治。
-
.……對于存儲在數(shù)據(jù)庫或文件中不同類型的空間數(shù)據(jù)慨蓝,除其工作空間的獲取需使用不同的方法外,其余的操作基本相似端幼。
此接口中的Open和OpenFromFile方法可以用于打開一個已經(jīng)存在的工作空間礼烈。
√Open——SDE數(shù)據(jù)庫
√OpenFromFile——文件類型數(shù)據(jù)
IMap接口
- 此接口是對地圖進行操作的起點
- 主要用于管理Map對象中的圖層對象、要素婆跑、選擇集合控件參考等對象
- 可以獲取Map對象中圖層個數(shù)
- 對圖層進行添加此熬、刪除等功能
- 實現(xiàn)查詢的高亮顯示
- .……
lLayer接口
- 圖層對象的通用接口
- 提供了圖層操作的屬性和方法
- 可用于所有的圖層
- FeatureLayer
- RasterLayer
- CompositeGraphicLayer
- 在Carto類庫中
IFeatureLayer接口
- 繼承自ILayer接口
- 提供了訪問矢量數(shù)據(jù)圖層的屬性和方法
- 圖層數(shù)據(jù)可以是:
√Geodatabase
√Shapefile
√Coverage - FeatureLayer組件類,還可以通過IGeoFeatureLayer獲得更多的控制要素圖層的屬性和方法
- 圖層數(shù)據(jù)可以是:
IFeatureClass接口
- 獲取和設(shè)置要素類屬性的主要接口
如:
√獲取要素類的類型
√在要素類中創(chuàng)建一個新功能
√獲取滿足某查詢條件的要素個數(shù)
Map滑进、Layer犀忱、FeatureLayer三者之間的關(guān)系
- Map是很多個圖層的集合
- Layer是圖層對象,是數(shù)據(jù)的外殼扶关,必須建立在數(shù)據(jù)基礎(chǔ)上才有意義
- FeatureLayer是具體的要素圖層阴汇,需要經(jīng)過Layer添加到Map中進行顯示
FeatureLayer與FeatureClass之間的區(qū)別
- FeatureLayer
- 是加載在地圖文檔中的矢量數(shù)據(jù)層,只是要素類的表現(xiàn)形式
- lFeatureLayer接口繼承自llayer接口
- 可以創(chuàng)建自己的對象
- FeatureClass
- 是一組空間實體的集合节槐,在數(shù)據(jù)表中存儲了統(tǒng)一的屬性和行為
- IFeatureClass接口繼承自IClass接口
- 不可以創(chuàng)建自己的對象
通過工作空間加載Shapefile文件
- 加載Shapefile文件時搀庶,需要引用DataSourcesFile類庫
- 實例程序?qū)崿F(xiàn)思路
- 創(chuàng)建ShapefileWorkspaceFactory實例pWorkspaceFactory,使用IWorkspaceFactory接口的OpenFromFile方法打開pWorkspaceFactory中儲存的基于Shapefile的工作區(qū)
- 創(chuàng)建FeatureLayer的實例pFeatureLayer铜异,并定義數(shù)據(jù)集
- 使用Imap接口的AddLayer方法加載pFeatureLayer到當前地圖
通過工作空間加載柵格數(shù)據(jù)
加載柵格文件時哥倔,需要引用DataSourcesRaster類庫
-
實例程序?qū)崿F(xiàn)思路
- 使用IWorkspaceFactory接口的OpenFromFile方法獲得棚格文件的工作區(qū)
- 用IRasterWorkspace接口的OpenRasterDataset方法獲得棚格文件的數(shù)據(jù)集
- 對柵格數(shù)據(jù)集是否有金字塔進行判斷(柵格文件如果不具有金字塔,則創(chuàng)建金字塔揍庄。這可以提高大數(shù)據(jù)的顯示效率咆蒿。需使用IRasterPyramid3接口)
- 創(chuàng)建RasterLayer的實例pRasterLayer,并定義數(shù)據(jù)集
- 使用Imap接口的AddLayer方法加載pFeatureLayer到當前地圖