地圖及相關(guān)對(duì)象課件_第1頁(yè)
地圖及相關(guān)對(duì)象課件_第2頁(yè)
地圖及相關(guān)對(duì)象課件_第3頁(yè)
地圖及相關(guān)對(duì)象課件_第4頁(yè)
地圖及相關(guān)對(duì)象課件_第5頁(yè)
已閱讀5頁(yè),還剩131頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第四章地圖及相關(guān)對(duì)象第四章地圖及相關(guān)對(duì)象1主要內(nèi)容

Map對(duì)象圖層對(duì)象地圖顯示(MapDisplay)PageLayout對(duì)象圖形元素與框架元素MapGrid對(duì)象MapSurround對(duì)象主要內(nèi)容

Map對(duì)象21.Map對(duì)象地圖對(duì)象(Mapobject)是顯示和操作地圖數(shù)據(jù)的容器。地圖對(duì)象上能顯示的圖形有兩類地理數(shù)據(jù):包括矢量類型的要素?cái)?shù)據(jù)、柵格數(shù)據(jù)、Tin數(shù)據(jù)等,這些數(shù)據(jù)都保存在Geodatabase或數(shù)據(jù)文件如shapefile中。元素:包括圖形元素和框架元素。圖形元素可以顯示出來(lái),而框架元素充當(dāng)了“容器”的角色。在ArcMap中可以使用“Draw”工具在Map上直接繪制矩形、圓形、文本等對(duì)象,在布局視圖上也可以給地圖添加指北針、圖例、比例尺等圖形對(duì)象,這些都是圖形元素。1.Map對(duì)象地圖對(duì)象(Mapobject)是顯示和操作31.Map對(duì)象Map對(duì)象有雙重身份數(shù)據(jù)的管理容器,可以加載地理數(shù)據(jù)和圖形元素?cái)?shù)據(jù)顯示,可以讓用戶看到這些數(shù)據(jù),如當(dāng)改變視圖范圍、刷新地圖的時(shí)候它是數(shù)據(jù)的顯示者。地圖對(duì)象中的所有圖層共享相同的空間參考第一個(gè)載入的圖層的空間參考被自動(dòng)地設(shè)置為地圖對(duì)象的空間參考

。新載入的圖層,如果它們的空間參考與地圖的空間參考不同,會(huì)被投影到地圖的空間參考。1.Map對(duì)象Map對(duì)象有雙重身份41.Map對(duì)象

Map對(duì)象實(shí)現(xiàn)的主要接口:IMapIActiveViewIViewManagerIActiveViewEventsIGraphicsContainerIMapBookmarkITableCollection

1.Map對(duì)象Map對(duì)象實(shí)現(xiàn)的主要接口:51.1IMap接口IMap接口是有關(guān)地圖操作任務(wù)的起點(diǎn),它主要用于管理Map對(duì)象中的layer對(duì)象、要素選擇集、MapSurround對(duì)象、標(biāo)注引擎和空間參考等對(duì)象IMap接口中定義的屬性和方法1.1IMap接口IMap接口是有關(guān)地圖操作任務(wù)的起點(diǎn)6通過(guò)MapDocument獲得map對(duì)象

IMapDocumentpMapDocument=newMapDocumentClass(); pMapDocument.Open(path,null); IMappMap=pMapDocument.get_Map(i);通過(guò)MapControl獲得Map對(duì)象IMappMap=axMapControl1.Map;IActiveViewpActiveView=pMapasIActiveView;或pActiveView=axMapControl1.ActiveView;Map對(duì)象的獲取通過(guò)MapDocument獲得map對(duì)象Map對(duì)象的獲取7通過(guò)PageLayoutControl獲得Map對(duì)象IActiveViewpActiveView=axPageLayoutControl1.PageLayoutasIActiveView;或pActiveView=axPageLayoutControl1.ActiveView;pMap=pActiveView.FocusMap;通過(guò)命令或工具類中獲得Map對(duì)象IHookHelperm_hookHelper=null;IMapm_Map;IActiveViewm_ActiveView;publicoverridevoidOnCreate(objecthook){if(hook==null)return;m_hookHelper=newHookHelperClass();m_hookHelper.Hook=hook;m_Map=m_hookHelper.FocusMap;m_ActiveView=m_hookHelper.ActiveView;}Map對(duì)象的獲取通過(guò)PageLayoutControl獲得Map對(duì)象Map對(duì)8ArcObjects中有兩種不同的選擇集:要素選擇集和元素選擇集要素選擇集可以基于地圖的,也可以是基于圖層的,使用IMap.SelectByShape方法構(gòu)造的是基于地圖的要素選擇集。遍歷選擇集:清空選擇集:

IMap.ClearSelection();地圖的要素選擇集ArcObjects中有兩種不同的選擇集:要素選擇集和元素選91.2IGraphicsContaner接口IGraphicsContaner接口用于管理Map中的元素對(duì)象實(shí)例:添加元素IGraphicsContainerpGraphicsContainer=pMapasIGraphicsContainer;//定義一個(gè)line類型的ElementILineElementpLineEle=newLineElementClass();//設(shè)置這個(gè)Element的符號(hào)對(duì)象pLineEle.Symbol=pSymbol;IElementpEle=pLineEleasIElement;//設(shè)置元素的幾何形體對(duì)象屬性pEle.Geometry=pGeo;//將元素添加到Map對(duì)象中pGraphicsContainer.AddElement(pEle,0);pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,null,null);1.2IGraphicsContaner接口IGraph101.3IActiveView接口IActiveView接口定義了Map對(duì)象的數(shù)據(jù)顯示功能。在ArcObjects中,有4個(gè)對(duì)象實(shí)現(xiàn)了這個(gè)接口,即PageLayout、Map、Globe和Scene。在ArcMap中,IMxDocument::ActiveView擁有當(dāng)前活動(dòng)視圖對(duì)象的一個(gè)指針。如果處于布局視圖狀態(tài),那么IMxDocument::ActiveView返回的IActiveView對(duì)象是指向PageLayout對(duì)象的;如果處于在數(shù)據(jù)視圖狀態(tài),那么這個(gè)屬性就會(huì)返回一個(gè)當(dāng)前使用的Map對(duì)象的指針。1.3IActiveView接口IActiveView接111.3IActiveView接口IActiveView::Extent屬性返回Map對(duì)象當(dāng)前視圖的范圍,它是一個(gè)Envelope對(duì)象。FullExtent屬性則可以返回視圖的全圖范圍,因此要顯示整幅地圖的代碼為://將地圖的當(dāng)前范圍設(shè)置為全圖范圍

pActiveView.Extent=pActiveView.FullExtent;pActiveView.Refresh();IActiveView::ScreenDisplay屬性指向當(dāng)前視圖的ScreenDisplay對(duì)象。每一個(gè)視圖對(duì)象都有一個(gè)ScreenDisplay對(duì)象用于控制視圖的圖形繪制工作。IActiveView::PartialRefresh方法可以讓視圖對(duì)象使用不同的方式來(lái)局部刷新以重繪地圖。pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection,null,null)1.3IActiveView接口IActiveView:12地圖中活動(dòng)視圖的內(nèi)容包括以下幾種:ConstantValueDescriptionesriViewNone0Drawsnothing.esriViewBackground1Drawsthebackground.esriViewGeography2Drawsthegeography.esriViewGeoSelection4Drawstheselectedgeography.esriViewGraphics8Drawstheannotation.esriViewGraphicSelection16Drawstheselectedannotation.esriViewForeground32Drawstheforeground.地圖中活動(dòng)視圖的內(nèi)容包括以下幾種:ConstantValue131.4ITableCollection接口Map對(duì)象中除了可以添加地理數(shù)據(jù)外,還能夠添加純屬性表,加入屬性表是為了和要素類等對(duì)象進(jìn)行關(guān)聯(lián)和連接。AddTable方法可以將一個(gè)table對(duì)象添加進(jìn)Map對(duì)象;Table屬性可以依據(jù)表的標(biāo)識(shí)號(hào)獲得特定的屬性表,如:

ITableCollectionpTableCol=pMapasITableCollection; ITablepTable=pTableCol.get_Table(0);RemoveAllTables方法可以讓pTableCol對(duì)象刪除地圖中的所有屬性表,RemoveTable可以依據(jù)表的標(biāo)識(shí)號(hào)刪除某個(gè)屬性表,TableCount則可以返回地圖對(duì)象中所有的屬性表的數(shù)目。1.4ITableCollection接口Map對(duì)象中除142.圖層對(duì)象Map對(duì)象中裝載的地理數(shù)據(jù)是以圖層的形式組織到地圖對(duì)象的。Layer對(duì)象本身沒有包含數(shù)據(jù),而僅僅是獲得了數(shù)據(jù)的引用而已,是用于管理數(shù)據(jù)源的鏈接,在ArcObjects中,地理數(shù)據(jù)始終是保存在GeoDatabase或者地理文件中。此外,圖層中還保存著符號(hào)化信息(注記要素類除外)。ArcGIS中也可以在一個(gè)要素類上新建一個(gè)圖層文件,即lyr文件,這個(gè)文件也是僅僅獲取了地理數(shù)據(jù)的存儲(chǔ)位置而已,而沒有擁有數(shù)據(jù)。2.圖層對(duì)象Map對(duì)象中裝載的地理數(shù)據(jù)是以圖層的形式組織到152.圖層對(duì)象ILayer是所有圖層類都實(shí)現(xiàn)了的一般接口,它定義了所有圖層的公共方法和屬性。要素圖層、柵格圖層、TIN圖層、CAD圖層等2.圖層對(duì)象ILayer是所有圖層類都實(shí)現(xiàn)了的一般接口,它162.1要素圖層要素?cái)?shù)據(jù)是GIS中最常使用的數(shù)據(jù)類型之一,它可以用于表示離散矢量對(duì)象的信息。IFeatureLayer2IGeoFeaturelayerIGeoDatasetIFeatureSelectionIFeatureLayerDefinitionILayerFieldsIIdentify2.1要素圖層要素?cái)?shù)據(jù)是GIS中最常使用的數(shù)據(jù)類型之一17IFeatureLayer2接口用于管理要素圖層的數(shù)據(jù)源,即要素類(Featureclass)。DataSourceType屬性返回要素圖層的數(shù)據(jù)源的類型.Search方法,對(duì)要素圖層進(jìn)行查詢(**)DisplayField屬性,指定顯示地圖圖層提示的字段IFeatureLayer接口IFeatureLayer2接口用于管理要素圖層的數(shù)據(jù)源,即18IGeoFeaturelayer接口繼承了ILayer和IFeatureLayer兩個(gè)接口,用于控制要素圖層中與地理相關(guān)的內(nèi)容,例如要素的著色和標(biāo)注等功能。SearchDisplayFeatures方法,顯示只符合查詢要求的要素Renderer屬性用于設(shè)置圖層的著色對(duì)象;DisplayAnnotation屬性可以設(shè)置要素圖層是否出現(xiàn)標(biāo)注,當(dāng)它為true的時(shí)候,用戶可以在這個(gè)要素圖層上依據(jù)要素類的某個(gè)字段進(jìn)行標(biāo)注。實(shí)例:要素圖層的符號(hào)化IGeoFeatureLayer接口IGeoFeaturelayer接口繼承了ILayer和IF19IGeoDataset接口僅有兩個(gè)屬性,用于管理地理要素集的范圍和空間參考。Extent可以返回當(dāng)前數(shù)據(jù)集的范圍,是一個(gè)IEnvelope類型的對(duì)象;SpatialReference屬性則可以讓用戶獲得這個(gè)數(shù)據(jù)集的空間參考。所有的圖層和數(shù)據(jù)集實(shí)現(xiàn)了IGeoDataset接口IGeoDataset接口IGeoDataset接口僅有兩個(gè)屬性,用于管理地理要素集20IFeatureSelection接口負(fù)責(zé)管理一個(gè)圖層中的要素的選擇集的方法和屬性。SelectFeatures

(IFeatureSelection)和Search(IFeatureLayer)方法的區(qū)別:要素圖層的Search方法返回的是ICursor對(duì)象,它僅僅是一個(gè)指向要素的指針;使用IFeatureSelection::SelectFeatures方法,則符合要求的要素會(huì)被標(biāo)記為“被選擇的要素集”,即高亮顯示,這個(gè)選擇集是一個(gè)ISelectionSet對(duì)象,可以用SelectionSet返回,如:

IFeatureSelection

pSel=pFeatureLayerasIFeatureSelection;

ISelectionSetpSelectionSet=pSel.SelectionSet;IFeatureSelection接口IFeatureSelection接口負(fù)責(zé)管理一個(gè)圖層中的要21IFeatureLayerDefinition接口定義了CreateSelectionLayer方法,可以將一個(gè)圖層選擇集中的要素轉(zhuǎn)換為一個(gè)單獨(dú)的要素圖層。它要求四個(gè)參數(shù):LayerName定義了新圖層的名稱;如果希望使用當(dāng)前圖層的要素選擇集,需要設(shè)useCurrentSelection為TRUE;joinTableNames是一個(gè)可能與當(dāng)前圖層連接的表名稱,使用這個(gè)方法同樣也可以將連接表的數(shù)據(jù)放入新的圖層中;DefinitionExpression可以用于設(shè)定一個(gè)選擇過(guò)濾,將要素選擇集中符合條件的要素放入新的圖層。IFeatureLayerDefinition接口IFeatureLayerDefinition接口定義了22

ILayerFields接口:可以直接獲取一個(gè)要素圖層的要素類字段結(jié)構(gòu)。另外,也可以從要素類著手獲得要素類的字段。Iidentify接口:

定義了Identify()方法返回FeatureIdentifyObject類型的對(duì)象數(shù)組實(shí)例:使用Iidentify識(shí)別要素其他接口ILayerFields接口:可以直接獲取一個(gè)要素圖層的要23底圖圖層是一種特殊的圖層組,用于可視化及漫游時(shí)存儲(chǔ)參考圖層,如影像圖、街道、公路網(wǎng)、地形信息等。底圖的顯示性能非常強(qiáng)大,它是用高性能的多線程繪制引擎繪制的,因此提供地圖顯示和相應(yīng)速度非常高效。如果圖層為底圖圖層中,則無(wú)法對(duì)圖層屬性進(jìn)行修改,如果正在使用地圖圖層,則無(wú)法對(duì)其中的內(nèi)容執(zhí)行數(shù)據(jù)更新操作,如果需要編輯數(shù)據(jù)或更新圖層,只需將該圖層拖出底圖即可,然后再將更新后的圖層拖回到底圖圖層中。使用BasemapLayer類可以通過(guò)編程方式創(chuàng)建底圖圖層,實(shí)現(xiàn)了IGroupLayer接口。2.2底圖圖層底圖圖層是一種特殊的圖層組,用于可視化及漫游時(shí)存儲(chǔ)參考圖層,24實(shí)例:創(chuàng)建底圖圖層并添加到地圖對(duì)象中:IBasemapLayerbasemapLayer=newBasemapLayerClass();IGroupLayergroupLayer=basemapLayerasIGroupLayer;groupLayer.Add(layer);map.AddLayer(basemapLayerasILayer);2.2底圖圖層實(shí)例:創(chuàng)建底圖圖層并添加到地圖對(duì)象中:2.2底圖圖層253.地圖顯示顯示對(duì)象(Displayobjects)負(fù)責(zé)將地理要素或元素的幾何形狀等繪制到輸出設(shè)備(屏幕、打印機(jī)或輸出文件)中。有兩類標(biāo)準(zhǔn)的顯示對(duì)象:ScreenDisply:是對(duì)普通的應(yīng)用程序窗體的抽象,實(shí)現(xiàn)了滾屏和后臺(tái)存儲(chǔ)功能SimpleDisply:是對(duì)其他使用Windows設(shè)備上下文著色的設(shè)備的抽象,這些設(shè)備包括打印機(jī)、次要窗體(如對(duì)話框、警示框)等。3.地圖顯示顯示對(duì)象(Displayobjects)263.1ScreenDisplay對(duì)象ScreenDisplay是與一個(gè)窗體相聯(lián)系的顯示設(shè)備,除了管理窗體屏幕的顯示屬性外,還管理發(fā)生在顯示背后的對(duì)象和行為,如緩存和屏幕變化等。對(duì)于Map或PageLayout對(duì)象,可以通過(guò)IActiveView::ScreenDisplay屬性獲得ScreenDisplay對(duì)象。 IActiveViewpActiveView=axMapControl1.ActiveView; IScreenDisplayscreenDisplay=pActiveView.ScreenDisplay;3.1ScreenDisplay對(duì)象ScreenDispl273.1ScreenDisplay對(duì)象ScreenDisplay類主要實(shí)現(xiàn)了IScreenDisplay3接口,該接口繼承了IScreenDisplay2、IDisplay接口。DrawPoint、DrawPolyline、DrawPolygon和DrawRectangle是在地圖控件中經(jīng)常使用于繪制幾何對(duì)象的方法,除此以外還有一個(gè)DrawText可以用于在視圖上繪制字符對(duì)象,所有的這些Draw方法在使用前都必須先使用StartDrawing方法,在繪制結(jié)束后需要使用FinishDrawing方法。使用這些Draw方法都需要傳給要繪制的幾何形體對(duì)象。這些Draw方法繪制的對(duì)象不能持久化,當(dāng)使用Refresh后就不存在了。3.1ScreenDisplay對(duì)象ScreenDispl283.1ScreenDisplay對(duì)象實(shí)例:繪制Polyline3.1ScreenDisplay對(duì)象實(shí)例:繪制Polyli293.2顯示緩存屏幕顯示可以使用顯示緩存來(lái)加速,以提高顯示性能。Map和PageLayout都實(shí)現(xiàn)了緩存最簡(jiǎn)單的情況下,Map為所有的圖層創(chuàng)建一個(gè)緩存;如果Map中有注記或圖形元素,再創(chuàng)建另外一個(gè)緩存;如果Map中有要素選擇集,再創(chuàng)建第三個(gè)緩存。除了這些緩存外,單個(gè)的圖層也可以有私有緩存;一旦一個(gè)圖層有了私有緩存,那么位于它之上、之下的圖層分別組織到不同的緩存。3.2顯示緩存屏幕顯示可以使用顯示緩存來(lái)加速,以提高顯示303.2顯示緩存StartDrawing()有2個(gè)參數(shù):hDc和cacheID.

hDc參數(shù)指定繪制的目標(biāo)設(shè)備,通常為一顯示對(duì)象、打印機(jī)或位圖(bitmap)。cacheID參數(shù)指定繪制使用的緩存,絕大多數(shù)情況下,應(yīng)當(dāng)使用esriNoScreenCache.當(dāng)使用esriNoScreenCache時(shí),顯示的活動(dòng)緩存設(shè)置為0,并直接繪制到設(shè)備上。

當(dāng)不想直接繪制到屏幕上時(shí),可以指定一個(gè)用于繪制的緩存(bitmap),最終將緩存中的位圖拷貝到屏幕。當(dāng)屏幕重繪時(shí),首先檢測(cè)緩存臟與否,不需重新從草圖繪制,而僅需簡(jiǎn)單重繪位圖,從而節(jié)省繪制時(shí)間。3.2顯示緩存StartDrawing()有2個(gè)參數(shù):313.2顯示緩存如何添加緩存圖層設(shè)置圖層的cached屬性為true;圖層的緩存會(huì)一直使用,直到圖層的數(shù)據(jù)變化,并調(diào)用IScreenDisplay.Invalidate()使該緩存無(wú)效。3.2顯示緩存如何添加緩存圖層324地圖排版4.1PageLayout對(duì)象4.2Page對(duì)象4.3SnapGrid對(duì)象4.4SnapGuides對(duì)象4.5RulerSettings對(duì)象4地圖排版4.1PageLayout對(duì)象334.1PageLayout對(duì)象PageLayout對(duì)象對(duì)應(yīng)于ArcMap的布局視圖,它是一個(gè)虛擬的頁(yè)面,可放置和排列地理數(shù)據(jù)和地圖元素,如地圖框、地圖標(biāo)題、地圖圖例、地圖比例尺等。PageLayout主要用于地圖的設(shè)計(jì)、打印與輸出。

PageLayout和Map兩個(gè)對(duì)象非常相似視圖對(duì)象,可以顯示地理信息;圖形容器,可以容納圖形元素(GraphicsElements)。區(qū)別:PageLayout除了保存圖形元素外,還可以保存諸如MapFrame的框架元素(FrameElement)。4.1PageLayout對(duì)象PageLayout對(duì)象對(duì)344.1PageLayout對(duì)象當(dāng)使用地圖文檔時(shí),PageLayout對(duì)象通過(guò)MapFrame對(duì)象來(lái)管理文檔中的地圖對(duì)象;

一個(gè)文檔中的所有地圖對(duì)象必須包含在MapFrame元素中,由PageLayout直接管理。為了更好地顯示地圖以便打印和輸出,PageLayout會(huì)自動(dòng)產(chǎn)生一些對(duì)象來(lái)修飾地圖:SnapGuides、SnapGrid、RulerSettings和Page。實(shí)現(xiàn)的主要接口IPageLayout(2,3)IGraphicsContainer:管理元素IGraphicsContainerSelect,專門用于被選擇的元素的管理IActiveView和IActiveViewEvents,用于管理頁(yè)面布局的視圖及相關(guān)事件4.1PageLayout對(duì)象當(dāng)使用地圖文檔時(shí),Pag354.2Page對(duì)象PageLayout對(duì)象被創(chuàng)建后,會(huì)自動(dòng)產(chǎn)生一個(gè)Page對(duì)象來(lái)管理布局視圖中的頁(yè)面,通過(guò)IPageLayout3::Page可以得到它的引用。IPage:Page類的主要接口,用于:管理Page的顏色、尺寸、方向等屬性管理版式單位、邊框類型和打印區(qū)域等屬性IPageEvents:Page類的另一個(gè)接口,用于管理頁(yè)面的相關(guān)事件,如PageColorChanged、PageMarginsChanged、PageSizeChanged和PageUnitsChanged等。Page對(duì)象會(huì)負(fù)責(zé)監(jiān)聽這些事件,并作出相應(yīng)的反應(yīng)。如當(dāng)Page的單位發(fā)生變化后,布局視圖需要更新它的轉(zhuǎn)換參數(shù)、Snapgrid以及SnapGuides等附屬對(duì)象。4.2Page對(duì)象PageLayout對(duì)象被創(chuàng)建后,會(huì)自364.3SnapGrid對(duì)象SnapGrid是PageLayout上用于擺放元素而設(shè)置的輔助點(diǎn),這些點(diǎn)有規(guī)則呈網(wǎng)狀排列,便于用戶對(duì)齊元素。SnapGrid類實(shí)現(xiàn)了ISnapGrid接口,用于設(shè)置SnapGrid的各種屬性。如HorizontalSpacing和VerticalSpacing屬性用于設(shè)置網(wǎng)點(diǎn)之間的水平距離和垂直距離,而IsVisible用于確定這些網(wǎng)點(diǎn)是否處于可見狀態(tài),Draw方法用于將一個(gè)SnapGrid對(duì)象繪制在Page上。4.3SnapGrid對(duì)象SnapGrid是PageLa374.4SnapGuides對(duì)象SnapGuides是為了更好放置地圖而在PageLayout出現(xiàn)的輔助線。每個(gè)SnapGuides都管理著一個(gè)Guide集合,即這種輔助線可以同時(shí)存在多條。這個(gè)對(duì)象有兩種類型:水平輔助線,通過(guò)IPageLayout::HorizontalSnapGuides獲得垂直輔助線,通過(guò)IPageLayout::VerticalSnapGuidesSnapGuides類實(shí)現(xiàn)了ISnapGuides接口,它定義了管理SnapGuide的屬性和方法:AreVisible設(shè)定SnapGuides是否可見GuideCount可以返回一個(gè)SnapGuides對(duì)象中Guide的個(gè)數(shù)Guide可以按索引值得到某個(gè)具體的Guide對(duì)象。AddGuide方法可以將一個(gè)Guide放在指定位置上;RemoveAllGuides和RemoveGuide方法分別可以清除所有的Guide和按照索引值清除Guide。4.4SnapGuides對(duì)象SnapGuides是為了384.5RulerSettings對(duì)象標(biāo)尺對(duì)象也是為了輔助元素的放置而出現(xiàn)在PageLayout對(duì)象上方和左方的輔助尺。RulerSettings是可以直接創(chuàng)建的對(duì)象,但一般都是直接通過(guò)IPageLayout::RulerSettings獲得與當(dāng)前PageLayout相關(guān)的標(biāo)尺。RulerSettings實(shí)現(xiàn)了IRulerSettings,它僅僅定義了一個(gè)屬性,即SmallestDivision用于設(shè)置最小的區(qū)分值(頁(yè)面尺寸單位)。4.5RulerSettings對(duì)象標(biāo)尺對(duì)象也是為了輔助395Element對(duì)象5.1概述5.2圖形元素5.3框架元素5Element對(duì)象5.1概述405Element對(duì)象在一幅地圖中,除了地理數(shù)據(jù)外,還可以擁有元素。Element是一個(gè)非常龐大復(fù)雜的對(duì)象集合,它主要分為兩大部分:圖形元素(GraphicElement)和框架元素(FrameElement)。圖形元素包括MarkerElement、LineElement、FillshapeElement、TextElement、DataGraphElement、PictureElement和GroupElement等對(duì)象,它們都是作為圖形的形式而存在,在視圖上是可見的??蚣茉匕‵rameElement、MapFrame、MapSurroundFrame、OleFrame和TableFrame等對(duì)象,它們都是作為不可見的容器而存在的。IElement是所有圖形元素和框架元素類都實(shí)現(xiàn)的接口。這個(gè)接口可以讓程序員確定元素的Geometry屬性,它也定義了方法讓用戶查找和繪制元素。5Element對(duì)象在一幅地圖中,除了地理數(shù)據(jù)外,還可以415.1圖形元素所有的圖形元素(GraphicsElement)類都實(shí)現(xiàn)了IGraphicElement接口,這個(gè)接口僅定義了一個(gè)SpatialReference屬性,用于設(shè)置這些圖形元素的空間參考。除此以外,圖形元素還實(shí)現(xiàn)ITransform2D接口,這個(gè)接口定義的方法和屬性可以讓圖形元素移動(dòng)、旋轉(zhuǎn)和縮放。5.1圖形元素所有的圖形元素(GraphicsElem42LineElement和MarkerElement對(duì)象LineElement和MarkerElement是最簡(jiǎn)單的圖形元素,它們?cè)跀?shù)據(jù)視圖(data

view)或者布局視圖(Pagelayoutview)上表現(xiàn)為線和點(diǎn)的形式。要將圖形元素顯示在視圖上,一般的步驟是這樣的:產(chǎn)生一個(gè)新的元素對(duì)象;確定元素顯示時(shí)使用的Symbol(符號(hào))和Geometry(幾何形體對(duì)象);使用IGraphicsContainer::AddElement把元素添加到視圖中去;刷新視圖,讓添加的元素可以顯示出來(lái)。LineElement和MarkerElement對(duì)象Lin43LineElement和MarkerElement對(duì)象以LineElement為例,添加它到視圖需要使用兩個(gè)接口:IElement和ILineElement,前者用于確定線元素的Geometry,后者用于確定Symbol。注意:能夠使用的Symbol和Geometry不是混用的,LineElement元素只能使用用于修飾LineElement對(duì)象的符號(hào),也只能使用Line或者Polyline作為Geometry。MarkerElement也是一樣,使用的是Marker類型的Symbol和點(diǎn)作為它的Geometry。MarkerElement類支持IMarkerElement接口,這個(gè)接口的Symbol方法用于在新建一個(gè)MarkerElement對(duì)象時(shí)設(shè)置點(diǎn)符號(hào)(MarkerSymbol)??磳?shí)例LineElement和MarkerElement對(duì)象以L44地圖為了顯示圖形的附加信息,一般都是需要采用文字標(biāo)注來(lái)完成。地圖的標(biāo)注有兩種形式:一種是保存在地理數(shù)據(jù)庫(kù)中以標(biāo)注類的形式存在;另一種是使用文字元素。TextElement對(duì)象實(shí)現(xiàn)了ITextElement接口,這個(gè)接口定義了設(shè)置文字元素的屬性,如ScaleText(文字尺寸)、Text(字符)和Symbol(文字的修飾符號(hào))。注意:TextElement的Geometry是一個(gè)點(diǎn),即Point對(duì)象。TextElement對(duì)象地圖為了顯示圖形的附加信息,一般都是需要采用文字標(biāo)注來(lái)完成。45DataGraph是一種基于地理數(shù)據(jù)而創(chuàng)建的圖表。在ArcMap中載入地理數(shù)據(jù)后,點(diǎn)擊“View”-“Graphs”-“Create…”,可依據(jù)表或圖層的數(shù)值數(shù)據(jù)產(chǎn)生一張圖表。這樣的圖表就是DataGraphElement對(duì)象,可將其添加到頁(yè)面布局上。IDataGraphElement接口僅僅被DataGraphElement對(duì)象所實(shí)現(xiàn),它定義了兩個(gè)屬性,IDataGraphElement::DataGraph用于設(shè)定元素的數(shù)據(jù)圖表對(duì)象,IDataGraphElement::Map為圖表的父地圖對(duì)象。DataGraphElement對(duì)象DataGraph是一種基于地理數(shù)據(jù)而創(chuàng)建的圖表。在Arc46GroupElement對(duì)象可以將多個(gè)元素編為一組當(dāng)一個(gè)實(shí)體來(lái)使用。如果用戶需要對(duì)多個(gè)元素進(jìn)行相同的操作,如同時(shí)移動(dòng)多個(gè)元素的時(shí)候,可以將它們編為一個(gè)組。GroupElement是一個(gè)組件類,即用戶可以新建一個(gè)單獨(dú)的GroupElement對(duì)象用于處理元素。GroupElement類默認(rèn)實(shí)現(xiàn)IGroupElement3接口,它定義了操作GroupElement的方法和屬性。AddElement方法可以將一個(gè)元素添加到GroupElement對(duì)象;ClearElements可以清除GroupElement中所有的元素;DeleteElement方法可以根據(jù)GroupElement中的某個(gè)元素的索引值刪除這個(gè)元素。ReplaceElement方法替換組中的某個(gè)元素。GroupElement對(duì)象GroupElement對(duì)象可以將多個(gè)元素編為一組當(dāng)一個(gè)實(shí)體47FillshapeElement是一個(gè)抽象類,它的子類有CircleElement、EllipseElement、PolygonElement和RectangleElement。這些對(duì)象的共同特點(diǎn)是它們的Geometry屬性都是一個(gè)二維的封閉圖形,在視圖上分別表現(xiàn)為圓形元素、橢圓形元素、多邊形元素和矩形元素。IFillshapeElement是所有FillshapeElement類都實(shí)現(xiàn)的接口,它定義了用于顯示圖形元素的Symbol屬性,這個(gè)Symbol屬性必須設(shè)置為IFillsymbol對(duì)象。FillShapeElement對(duì)象FillshapeElement是一個(gè)抽象類,它的子類有C48在制作地圖時(shí),可以向PageLayout中插入圖片,這樣的圖片作為一種元素—圖片元素(PictureElement)。主要的圖片元素有:BmpPictureElement、EmfPictureElement、GifPictureElement、Jp2PictureElement、JpgPictureElement、PictureElement、PngPictureElement和TifPictureElement。所有的圖片元素都實(shí)現(xiàn)了IPictureElement4接口,使用于管理和操作圖片元素。Filter屬性是供OpenFileDialog使用的過(guò)濾器;MaintainAspectRatio屬性可以決定調(diào)整圖片尺寸時(shí)是否保持其長(zhǎng)寬比例;PictureAspectRatio返回圖片X、Y方向長(zhǎng)度的比率。只有MaintainAspectRatio屬性為False時(shí),才可獲得PictureAspectRatio的值。PictureDescription可以添加圖片的附加描述信息;SavePictureInDocument屬性則確定這張圖片是否會(huì)被保存到地圖文件中ImportPictureFromFile用于從文件導(dǎo)入一張圖片。PictureElement對(duì)象在制作地圖時(shí),可以向PageLayout中插入圖片,這樣的圖495.2框架元素框架元素(FrameElement)是一種包含其他地圖元素的容器。所有的圖片元素都屬于框架元素,除此之外,還有兩個(gè)主要的框架元素:MapFrame(地圖框架)和地圖附屬物框架(MapSurroundFrame)。MapFrame對(duì)象是Map的容器,用于管理Map對(duì)象MapSurroundFrame對(duì)象用于管理MapSurround對(duì)象,MapSurround就是為了修飾地圖而使用的比例尺、比例文本、指北針、圖例等對(duì)象。每個(gè)MapSurroundFrame都是與一個(gè)MapFrame相聯(lián)系的。如果一個(gè)MapFrame被刪除了那么它其中所有的MapSurroundFrame對(duì)象也將被刪除。所有的框架元素類都實(shí)現(xiàn)了IFrameElement接口,這個(gè)接口定義了操作框架元素最一般的屬性和方法。5.2框架元素框架元素(FrameElement)是一50MapFrame是由PageLayout控制的。使用IGraphicsContainer.FindFrame方法可以查找到某個(gè)特定對(duì)象的框架對(duì)象。MapFrame對(duì)象支持IMapFrame接口,使用IMapFrame定義的屬性和方法可以控制其中的Map對(duì)象。Map屬性可以獲得這個(gè)地圖框架內(nèi)的地圖對(duì)象,它是一個(gè)只讀屬性MapBounds屬性則可以返回地圖對(duì)象的范圍,即一個(gè)Envelope對(duì)象MapScale屬性來(lái)確定地圖顯示的比例CreateSurroundFrame方法用于創(chuàng)建一個(gè)MapSurroundFrame對(duì)象MapFrame對(duì)象還實(shí)現(xiàn)了IMapGrids接口,它可以用于管理地圖框架中的MapGrid(地圖格網(wǎng))5.2.1MapFrame對(duì)象MapFrame是由PageLayout控制的。使用IGra51MapSurroundFrame是一種用于管理MapSurround對(duì)象的框架元素。MapSurround是指北針、比例尺和圖例一類的對(duì)象,它們是一種“智能”的,會(huì)自動(dòng)與某個(gè)地圖對(duì)象關(guān)聯(lián),隨著地圖視圖的變化而變化的對(duì)象。當(dāng)?shù)貓D框架發(fā)生旋轉(zhuǎn)的時(shí)候,指北針對(duì)象的方向也會(huì)發(fā)生變化。MapSurroundFrame支持MapFrameResized事件,當(dāng)?shù)貓D的尺寸改變的時(shí)候,它會(huì)監(jiān)聽這個(gè)事件,并自動(dòng)更新比例尺等對(duì)象。IMapsurroundFrame接口是MapsurroundFrame對(duì)象的默認(rèn)接口,IMapSurroundFrame::MapFrame屬性可以得到與自身關(guān)聯(lián)的MapFrame對(duì)象,而IMapSurroundFrame::MapSurround屬性則可以得到它持有的MapSurround對(duì)象5.2.2MapSurroundFrame對(duì)象MapSurroundFrame是一種用于管理MapSurr52TableFrame是一種可以容納Table對(duì)象的框架元素,只能放置在布局視圖中,而不能添加到Map對(duì)象中去。ITableFrame接口是TableFrame類實(shí)現(xiàn)的唯一接口,它提供了操作框架元素中表的屬性和方法。StartCol和StartRow可以設(shè)置顯示表時(shí)的列數(shù)和行數(shù)TableView屬性可以讓程序員得到一個(gè)ITabelView對(duì)象去改變表視圖的屬性,諸如選擇顯示等。Table屬性將會(huì)返回給用戶一個(gè)與框架相關(guān)的ITable對(duì)象,它實(shí)際上是普通屬性表或是要素類,也就是這個(gè)數(shù)據(jù)表的數(shù)據(jù)源對(duì)象。TableProperty屬性得到的ITableProperty對(duì)象來(lái)獲得它的指針。當(dāng)用戶在ArcMap打開一個(gè)要素圖層的屬性表,點(diǎn)擊“Table

Options”按鈕,選擇“AddTabletoLayout”后,會(huì)在布局視圖中發(fā)現(xiàn)一份數(shù)據(jù)表。5.2.3TableFrame對(duì)象TableFrame是一種可以容納Table對(duì)象的框架元素,536MapGrid對(duì)象模型ArcObjects中也提供了用于輔助顯示地圖的地圖格網(wǎng)MapGrids對(duì)象,它出現(xiàn)了地圖邊緣上,用于顯示經(jīng)緯度或者方格網(wǎng)。必須出現(xiàn)在PageLayout視圖而不是Map視圖。一個(gè)地理網(wǎng)格主要由三部分組成GridLine(格網(wǎng)線)GridLabel(格網(wǎng)標(biāo)注)GridBorder(格網(wǎng)邊框)6MapGrid對(duì)象模型ArcObjects中也提供了用546.1MapGrid對(duì)象MapGrid對(duì)象是布局視圖中的一種參考線或點(diǎn),它可以幫助用戶快速地確定地圖中要素的位置。MapGrid對(duì)象由MapGrids來(lái)管理,一個(gè)MapGrids中可以存在多個(gè)MapGrid對(duì)象。在布局視圖中獲得一個(gè)MapGrid的指針非常容易,使用IGraphicsContainer::FindFrame可以得到PageLayout對(duì)象的MapFrame對(duì)象,然后通過(guò)QI方法可以得到。6.1MapGrid對(duì)象MapGrid對(duì)象是布局視圖中的55privateIMapGridGetMapGrid(){

IActiveViewpActiveView=axPageLayoutControl1.PageLayoutasIActiveView;

IGraphicsContainer

pGraphicsContainer=pActiveViewasIGraphicsContainer;

IMap

pMap=pActiveView.FocusMap;

IMapFrame

pMapFrame=pGraphicsContainer.FindFrame(pMap)asIMapFrame;

IMapGridspMapGrids=pMapFrameasIMapGrids;

IMapGridpMapGrid=pMapGrids.get_MapGrid(0); returnpMapGrid; }privateIMapGridGetMapGrid()56MapGrid是一個(gè)抽象類,它有四個(gè)子類對(duì)象,如MeasuredGrid、Graticule、IndexGrid和CustomOverlayGrid。IMapGrid是所有類型的地圖格網(wǎng)類都實(shí)現(xiàn)的接口,它用于設(shè)置MapGrid對(duì)象的一般屬性和方法Border屬性,用于設(shè)置地圖網(wǎng)格的邊框LabelFormat屬性用于設(shè)置地圖網(wǎng)格上的標(biāo)簽格式Linesymbol則可以用于設(shè)置網(wǎng)線的樣式IMapGrid接口還定義了多個(gè)設(shè)置tick對(duì)象的屬性,tic就是一個(gè)小記號(hào)點(diǎn),如網(wǎng)線之間的交點(diǎn)、網(wǎng)線與邊的交點(diǎn)等SetSubTicksVisiblity等方法可以按照用戶的要求來(lái)確定這些點(diǎn)MapGrid是一個(gè)抽象類,它有四個(gè)子類對(duì)象,如Measu57Graticule是使用經(jīng)緯線來(lái)劃分地圖的地圖格網(wǎng)對(duì)象,它實(shí)現(xiàn)了兩個(gè)接口IGraticule和IMeasuredGrid。由于Graticule對(duì)象是使用經(jīng)緯網(wǎng),因而需要設(shè)置空間參考屬性。MeasuredGrid也是使用經(jīng)緯度作為地圖網(wǎng)格來(lái)劃分地圖的,它與Graticule對(duì)象的不同之處在于它的空間參考屬性可以和MapFrame對(duì)象一致,也可以不一致。它除了實(shí)現(xiàn)IMeasureGrid接口外,還實(shí)現(xiàn)了IProjectedGrid接口用于設(shè)置它的投影屬性。IndexGrid是使用索引值的方式來(lái)劃分地圖的區(qū)域的對(duì)象,通常南北方向用“ABC”,而東西方向用“123”來(lái)表示,它適合小區(qū)域內(nèi)地塊的劃分等。Graticule是使用經(jīng)緯線來(lái)劃分地圖的地圖格網(wǎng)對(duì)象,它實(shí)586.2MapGridBorder對(duì)象地圖格網(wǎng)邊框的有兩種類型:SimpleMapGridBorder和CalibratedMapGridBorder。它們都實(shí)現(xiàn)了IMapGridBorder接口。IMapGridBorder::DisplayName屬性可以得到邊框的顯示名,它們的DisplayName分別是“simpleborder”和“calibratedborder”。SimpleMapGridBorder對(duì)象只是使用簡(jiǎn)單的直線來(lái)作為地圖的邊框,因而在ISimpleMapGridBorder接口中必須設(shè)置的是LineSymbol屬性,它用于確定邊框線的樣式、寬度和顏色。CalibratedMapGridBorder是使用一種漸變線段的邊框?qū)ο?,這個(gè)對(duì)象支持的接口是ICalibratedMapGridBorder,它定義了邊框的前景色、后景色、寬度,線段的間隔長(zhǎng)度等屬性。6.2MapGridBorder對(duì)象地圖格網(wǎng)邊框的有兩種596.3MapGridLabel對(duì)象地圖格網(wǎng)標(biāo)簽:無(wú)論是在地圖中使用經(jīng)緯網(wǎng)還是方里網(wǎng),都必須設(shè)置一些標(biāo)識(shí)性字符,這些字符都需要使用到MapGridLabel對(duì)象來(lái)設(shè)置。IGridLabel接口控制著所有GridLabel對(duì)象的一般屬性。IGridLabel::LabelAlignment屬性可以設(shè)置格網(wǎng)標(biāo)注在格網(wǎng)對(duì)象的四個(gè)邊上的水平和垂直方向,它需要傳入一個(gè)esriGridAxisEnum枚舉類型值。DMSGridLabel對(duì)象的特點(diǎn)是其標(biāo)注字符使用的是經(jīng)緯度的單位,即度、分和秒,例如110。10’10”。DMSGridLabel類實(shí)現(xiàn)IDMSGridLabel接口用于管理經(jīng)緯網(wǎng)標(biāo)注對(duì)象的屬性,如字體、標(biāo)注類型等。6.3MapGridLabel對(duì)象地圖格網(wǎng)標(biāo)簽:無(wú)論是在606.4MapGridFactory對(duì)象MapGridFactory對(duì)象可以讓程序員快速新建一個(gè)地圖格網(wǎng)對(duì)象,這些新建的格網(wǎng)對(duì)象的屬性被設(shè)置為缺省值。MapGridFactory是一個(gè)抽象類,它唯一的接口是IMapGridFactory,其中定義的create方法可以新建MapGrid對(duì)象。MapGridFactory的子類有GraticuleFactory、IndexGridFactory、MeasuredGridFactory、CustomOverlayGridFactory和MgrsGridFactory五種。它們沒有自己的接口,全部都是實(shí)現(xiàn)IMapGridFactory。CreateMapGridByFactory實(shí)例6.4MapGridFactory對(duì)象MapGridFa617MapSurround對(duì)象MapSurround是與地圖對(duì)象關(guān)聯(lián)的用于修飾地圖的輔助圖形元素對(duì)象。它們的形狀或數(shù)值會(huì)隨著地圖屬性的變化而自動(dòng)改變,如地圖縮放后,ScaleBar(比例尺)對(duì)象將會(huì)自動(dòng)調(diào)整比例,ScaleBarText(比例尺文本)也會(huì)相應(yīng)改變它的比例值,即MapSurround類型對(duì)象會(huì)監(jiān)聽Map對(duì)象的行為而做出相應(yīng)反應(yīng)主要接口:IMapSurround、IMapSurroundEvent包含以下幾種對(duì)象:圖例指北針比例尺比例尺文本7MapSurround對(duì)象MapSurround是與地627.1圖例圖例(Legend)是與一個(gè)Map對(duì)象中圖層的著色操作(renderer)相關(guān)的對(duì)象,著色對(duì)象可以在地圖上產(chǎn)生專題圖。Legend類的主要接口是ILegend,使用它可以修改legend的屬性和獲得它的組成對(duì)象。每個(gè)LegendItem都有一個(gè)或者多個(gè)LegendGroup(圖例組),而這個(gè)數(shù)目則取決于地圖有多少種著色方案。每個(gè)LegendGroup都有一個(gè)或者多個(gè)LegendClass(著色類)對(duì)象,而每個(gè)LegendClass代表了一個(gè)使用自身的符號(hào)和標(biāo)簽制作的圖例分類。7.1圖例圖例(Legend)是與一個(gè)Map對(duì)象中圖層的63第04章地圖及相關(guān)對(duì)象課件647.2指北針MarkerNorthArrow是一種用于指示地圖空間方位的圖形,它其實(shí)是ESRINorth字庫(kù)中的字符符號(hào),字庫(kù)中的任何一種字體的符號(hào)都可以當(dāng)作指北針使用。MarkerNorthArrow從抽象類NorthArrow繼承而來(lái),它是一個(gè)MapSurround對(duì)象。MarkerNorthArrow對(duì)象的兩個(gè)主要接口是INorthArrow和IMarkerNorthArrow。INorthArrow接口可以設(shè)置指北針對(duì)象的一般屬性,如顏色、尺寸和引用位置。IMarkerNorthArrow接口定義了一個(gè)屬性MarkerSymbol,它用于設(shè)置指北針的符號(hào)。7.2指北針MarkerNorthArrow是一種用于指657.3比例尺ScaleBar對(duì)象也是一種MapSurround,它有多個(gè)子類,如ScaleLine、SinglefillScaleBar和DoublefillScaleBar等,這些類都實(shí)現(xiàn)了IScaleBar和IScaleMarks接口。IScaleBar接口可以管理一個(gè)比例尺對(duì)象的大部分屬性,如比例尺顏色、高度,它也定義了管理比例尺對(duì)象上Label的屬性,如Labelsymbol、LabelPosition等,它們分別用于設(shè)置比例尺中的標(biāo)識(shí)字符符號(hào)和位置。IScaleMarks接口負(fù)責(zé)管理與一個(gè)比例尺相關(guān)的單個(gè)標(biāo)記(mark)的屬性,如高度、符號(hào)和位置7.3比例尺ScaleBar對(duì)象也是一種MapSurr667.4比例尺文本比例尺文本對(duì)象ScaleText本質(zhì)上是一個(gè)文本元素,但是它會(huì)隨著相關(guān)地圖的變化而改變比例值。ScaleText類實(shí)現(xiàn)了IScaleText接口,它定義了文本的格式,如symbol、style等。用戶也可以通過(guò)text只讀對(duì)象來(lái)得到比例文本的字符值。7.4比例尺文本比例尺文本對(duì)象ScaleText本質(zhì)上是678地圖輸出地圖輸出分為兩種類型:打印輸出:調(diào)用與計(jì)算機(jī)相連的打印設(shè)備將地圖打印在紙質(zhì)媒介上,使用Printer類轉(zhuǎn)換輸出:將地理數(shù)據(jù)輸出為不同格式的文件,如JPEG、PDF等,Export類8地圖輸出地圖輸出分為兩種類型:68第四章地圖及相關(guān)對(duì)象第四章地圖及相關(guān)對(duì)象69主要內(nèi)容

Map對(duì)象圖層對(duì)象地圖顯示(MapDisplay)PageLayout對(duì)象圖形元素與框架元素MapGrid對(duì)象MapSurround對(duì)象主要內(nèi)容

Map對(duì)象701.Map對(duì)象地圖對(duì)象(Mapobject)是顯示和操作地圖數(shù)據(jù)的容器。地圖對(duì)象上能顯示的圖形有兩類地理數(shù)據(jù):包括矢量類型的要素?cái)?shù)據(jù)、柵格數(shù)據(jù)、Tin數(shù)據(jù)等,這些數(shù)據(jù)都保存在Geodatabase或數(shù)據(jù)文件如shapefile中。元素:包括圖形元素和框架元素。圖形元素可以顯示出來(lái),而框架元素充當(dāng)了“容器”的角色。在ArcMap中可以使用“Draw”工具在Map上直接繪制矩形、圓形、文本等對(duì)象,在布局視圖上也可以給地圖添加指北針、圖例、比例尺等圖形對(duì)象,這些都是圖形元素。1.Map對(duì)象地圖對(duì)象(Mapobject)是顯示和操作711.Map對(duì)象Map對(duì)象有雙重身份數(shù)據(jù)的管理容器,可以加載地理數(shù)據(jù)和圖形元素?cái)?shù)據(jù)顯示,可以讓用戶看到這些數(shù)據(jù),如當(dāng)改變視圖范圍、刷新地圖的時(shí)候它是數(shù)據(jù)的顯示者。地圖對(duì)象中的所有圖層共享相同的空間參考第一個(gè)載入的圖層的空間參考被自動(dòng)地設(shè)置為地圖對(duì)象的空間參考

。新載入的圖層,如果它們的空間參考與地圖的空間參考不同,會(huì)被投影到地圖的空間參考。1.Map對(duì)象Map對(duì)象有雙重身份721.Map對(duì)象

Map對(duì)象實(shí)現(xiàn)的主要接口:IMapIActiveViewIViewManagerIActiveViewEventsIGraphicsContainerIMapBookmarkITableCollection

1.Map對(duì)象Map對(duì)象實(shí)現(xiàn)的主要接口:731.1IMap接口IMap接口是有關(guān)地圖操作任務(wù)的起點(diǎn),它主要用于管理Map對(duì)象中的layer對(duì)象、要素選擇集、MapSurround對(duì)象、標(biāo)注引擎和空間參考等對(duì)象IMap接口中定義的屬性和方法1.1IMap接口IMap接口是有關(guān)地圖操作任務(wù)的起點(diǎn)74通過(guò)MapDocument獲得map對(duì)象

IMapDocumentpMapDocument=newMapDocumentClass(); pMapDocument.Open(path,null); IMappMap=pMapDocument.get_Map(i);通過(guò)MapControl獲得Map對(duì)象IMappMap=axMapControl1.Map;IActiveViewpActiveView=pMapasIActiveView;或pActiveView=axMapControl1.ActiveView;Map對(duì)象的獲取通過(guò)MapDocument獲得map對(duì)象Map對(duì)象的獲取75通過(guò)PageLayoutControl獲得Map對(duì)象IActiveViewpActiveView=axPageLayoutControl1.PageLayoutasIActiveView;或pActiveView=axPageLayoutControl1.ActiveView;pMap=pActiveView.FocusMap;通過(guò)命令或工具類中獲得Map對(duì)象IHookHelperm_hookHelper=null;IMapm_Map;IActiveViewm_ActiveView;publicoverridevoidOnCreate(objecthook){if(hook==null)return;m_hookHelper=newHookHelperClass();m_hookHelper.Hook=hook;m_Map=m_hookHelper.FocusMap;m_ActiveView=m_hookHelper.ActiveView;}Map對(duì)象的獲取通過(guò)PageLayoutControl獲得Map對(duì)象Map對(duì)76ArcObjects中有兩種不同的選擇集:要素選擇集和元素選擇集要素選擇集可以基于地圖的,也可以是基于圖層的,使用IMap.SelectByShape方法構(gòu)造的是基于地圖的要素選擇集。遍歷選擇集:清空選擇集:

IMap.ClearSelection();地圖的要素選擇集ArcObjects中有兩種不同的選擇集:要素選擇集和元素選771.2IGraphicsContaner接口IGraphicsContaner接口用于管理Map中的元素對(duì)象實(shí)例:添加元素IGraphicsContainerpGraphicsContainer=pMapasIGraphicsContainer;//定義一個(gè)line類型的ElementILineElementpLineEle=newLineElementClass();//設(shè)置這個(gè)Element的符號(hào)對(duì)象pLineEle.Symbol=pSymbol;IElementpEle=pLineEleasIElement;//設(shè)置元素的幾何形體對(duì)象屬性pEle.Geometry=pGeo;//將元素添加到Map對(duì)象中pGraphicsContainer.AddElement(pEle,0);pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,null,null);1.2IGraphicsContaner接口IGraph781.3IActiveView接口IActiveView接口定義了Map對(duì)象的數(shù)據(jù)顯示功能。在ArcObjects中,有4個(gè)對(duì)象實(shí)現(xiàn)了這個(gè)接口,即PageLayout、Map、Globe和Scene。在ArcMap中,IMxDocument::ActiveView擁有當(dāng)前活動(dòng)視圖對(duì)象的一個(gè)指針。如果處于布局視圖狀態(tài),那么IMxDocument::ActiveView返回的IActiveView對(duì)象是指向PageLayout對(duì)象的;如果處于在數(shù)據(jù)視圖狀態(tài),那么這個(gè)屬性就會(huì)返回一個(gè)當(dāng)前使用的Map對(duì)象的指針。1.3IActiveView接口IActiveView接791.3IActiveView接口IActiveView::Extent屬性返回Map對(duì)象當(dāng)前視圖的范圍,它是一個(gè)Envelope對(duì)象。FullExtent屬性則可以返回視圖的全圖范圍,因此要顯示整幅地圖的代碼為://將地圖的當(dāng)前范圍設(shè)置為全圖范圍

pActiveView.Extent=pActiveView.FullExtent;pActiveView.Refresh();IActiveView::ScreenDisplay屬性指向當(dāng)前視圖的ScreenDisplay對(duì)象。每一個(gè)視圖對(duì)象都有一個(gè)ScreenDisplay對(duì)象用于控制視圖的圖形繪制工作。IActiveView::PartialRefresh方法可以讓視圖對(duì)象使用不同的方式來(lái)局部刷新以重繪地圖。pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection,null,null)1.3IActiveView接口IActiveView:80地圖中活動(dòng)視圖的內(nèi)容包括以下幾種:ConstantValueDescriptionesriViewNone0Drawsnothing.esriViewBackground1Drawsthebackground.esriViewGeography2Drawsthegeography.esriViewGeoSelection4Drawstheselectedgeography.esriViewGraphics8Drawstheannotation.esriViewGraphicSelection16Drawstheselectedannotation.esriViewForeground32Drawstheforeground.地圖中活動(dòng)視圖的內(nèi)容包括以下幾種:ConstantValue811.4ITableCollection接口Map對(duì)象中除了可以添加地理數(shù)據(jù)外,還能夠添加純屬性表,加入屬性表是為了和要素類等對(duì)象進(jìn)行關(guān)聯(lián)和連接。AddTable方法可以將一個(gè)table對(duì)象添加進(jìn)Map對(duì)象;Table屬性可以依據(jù)表的標(biāo)識(shí)號(hào)獲得特定的屬性表,如:

ITableCollectionpTableCol=pMapasITableCollection; ITablepTable=pTableCol.get_Table(0);RemoveAllTables方法可以讓pTableCol對(duì)象刪除地圖中的所有屬性表,RemoveTable可以依據(jù)表的標(biāo)識(shí)號(hào)刪除某個(gè)屬性表,TableCount則可以返回地圖對(duì)象中所有的屬性表的數(shù)目。1.4ITableCollection接口Map對(duì)象中除822.圖層對(duì)象Map對(duì)象中裝載的地理數(shù)據(jù)是以圖層的形式組織到地圖對(duì)象的。Layer對(duì)象本身沒有包含數(shù)據(jù),而僅僅是獲得了數(shù)據(jù)的引用而已,是用于管理數(shù)據(jù)源的鏈接,在ArcObjects中,地理數(shù)據(jù)始終是保存在GeoDatabase或者地理文件中。此外,圖層中還保存著符號(hào)化信息(注記要素類除外)。ArcGIS中也可以在一個(gè)要素類上新建一個(gè)圖層文件,即lyr文件,這個(gè)文件也是僅僅獲取了地理數(shù)據(jù)的存儲(chǔ)位置而已,而沒有擁有數(shù)據(jù)。2.圖層對(duì)象Map對(duì)象中裝載的地理數(shù)據(jù)是以圖層的形式組織到832.圖層對(duì)象ILayer是所有圖層類都實(shí)現(xiàn)了的一般接口,它定義了所有圖層的公共方法和屬性。要素圖層、柵格圖層、TIN圖層、CAD圖層等2.圖層對(duì)象ILayer是所有圖層類都實(shí)現(xiàn)了的一般接口,它842.1要素圖層要素?cái)?shù)據(jù)是GIS中最常使用的數(shù)據(jù)類型之一,它可以用于表示離散矢量對(duì)象的信息。IFeatureLayer2IGeoFeaturelayerIGeoDatasetIFeatureSelectionIFeatureLayerDefinitionILayerFieldsIIdentify2.1要素圖層要素?cái)?shù)據(jù)是GIS中最常使用的數(shù)據(jù)類型之一85IFeatureLayer2接口用于管理要素圖層的數(shù)據(jù)源,即要素類(Featureclass)。DataSourceType屬性返回要素圖層的數(shù)據(jù)源的類型.Search方法,對(duì)要素圖層進(jìn)行查詢(**)DisplayField屬性,指定顯示地圖圖層提示的字段IFeatureLayer接口IFeatureLayer2接口用于管理要素圖層的數(shù)據(jù)源,即86IGeoFeaturelayer接口繼承了ILayer和IFeatureLayer兩個(gè)接口,用于控制要素圖層中與地理相關(guān)的內(nèi)容,例如要素的著色和標(biāo)注等功能。SearchDisplayFeatures方法,顯示只符合查詢要求的要素Renderer屬性用于設(shè)置圖層的著色對(duì)象;DisplayAnnotation屬性可以設(shè)置要素圖層是否出現(xiàn)標(biāo)注,當(dāng)它為true的時(shí)候,用戶可以在這個(gè)要素圖層上依據(jù)要素類的某個(gè)字段進(jìn)行標(biāo)注。實(shí)例:要素圖層的符號(hào)化IGeoFeatureLayer接口IGeoFeaturelayer接口繼承了ILayer和IF87IGeoDataset接口僅有兩個(gè)屬性,用于管理地理要素集的范圍和空間參考。Extent可以返回當(dāng)前數(shù)據(jù)集的范圍,是一個(gè)IEnvelope類型的對(duì)象;SpatialReference屬性則可以讓用戶獲得這個(gè)數(shù)據(jù)集的空間參考。所有的圖層和數(shù)據(jù)集實(shí)現(xiàn)了IGeoDataset接口IGeoDataset接口IGeoDataset接口僅有兩個(gè)屬性,用于管理地理要素集88IFeatureSelection接口負(fù)責(zé)管理一個(gè)圖層中的要素的選擇集的方法和屬性。SelectFeatures

(IFeatureSelection)和Search(IFeatureLayer)方法的區(qū)別:要素圖層的Search方法返回的是ICursor對(duì)象,它僅僅是一個(gè)指向要素的指針;使用IFeatureSelection::SelectFeatures方法,則符合要求的要素會(huì)被標(biāo)記為“被選擇的要素集”,即高亮顯示,這個(gè)選擇集是一個(gè)ISelectionSet對(duì)象,可以用SelectionSet返回,如:

IFeatureSelection

pSel=pFeatureLayerasIFeatureSelection;

ISelectionSetpSelectionSet=pSel.SelectionSet;IFeatureSelection接口IFeatureSelection接口負(fù)責(zé)管理一個(gè)圖層中的要89IFeatureLayerDefinition接口定義了CreateSelectionLayer方法,可以將一個(gè)圖層選擇集中的要素轉(zhuǎn)換為一個(gè)單獨(dú)的要素圖層。它要求四個(gè)參數(shù):LayerName定義了新圖層的名稱;如果希望使用當(dāng)前圖層的要素選擇集,需要設(shè)useCurrentSelection為TRUE;joinTableNames是一個(gè)可能與當(dāng)前圖層連接的表名稱,使用這個(gè)方法同樣也可以將連接表的數(shù)據(jù)放入新的圖層中;DefinitionExpression可以用于設(shè)定一個(gè)選擇過(guò)濾,將要素選擇集中符合條件的要素放入新的圖層。IFeatureLayerDefinition接口IFeatureLayerDefinition接口定義了90

ILayerFields接口:可以直接獲取一個(gè)要素圖層的要素類字段結(jié)構(gòu)。另外,也可以從要素類著手獲得要素類的字段。Iidentify接口:

定義了Identify()方法返回FeatureIdentifyObject類型的對(duì)象數(shù)組實(shí)例:使用Iidentify識(shí)別要素其他接口ILayerFields接口:可以直接獲取一個(gè)要素圖層的要91底圖圖層是一種特殊的圖層組,用于可視化及漫游時(shí)存儲(chǔ)參考圖層,如影像圖、街道、公路網(wǎng)、地形信息等。底圖的顯示性能非常強(qiáng)大,它是用高

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論