GIS二次開發(fā)實習(xí)指導(dǎo)書new_第1頁
GIS二次開發(fā)實習(xí)指導(dǎo)書new_第2頁
GIS二次開發(fā)實習(xí)指導(dǎo)書new_第3頁
GIS二次開發(fā)實習(xí)指導(dǎo)書new_第4頁
GIS二次開發(fā)實習(xí)指導(dǎo)書new_第5頁
已閱讀5頁,還剩79頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 劉玉娟 編 李樹敏 審gis二次開發(fā)實 驗 指 導(dǎo) 書目錄:第一部分:gis二次開發(fā)簡述與開發(fā)流程一、 gis二次開發(fā)的目的與意義二、 gis二次開發(fā)的基本要求三、 gis二次開發(fā)的流程第二部分:vb與mapobjects小型系統(tǒng)的開發(fā)第一章:功能需求分析: 第二章:菜單設(shè)計:第三章:模塊與類模塊的編寫:第四章:各功能的設(shè)計與實現(xiàn)第五章:系統(tǒng)的合成第一部分:gis二次開發(fā)簡述與開發(fā)流程一、gis二次開發(fā)目的與意義:gis二次開發(fā)的目的:主要訓(xùn)練學(xué)生使用gis二次開發(fā)組件開發(fā)gis掌握組件式開發(fā)gi應(yīng)用軟件的能力,增強學(xué)生的動手能力,以便將來更好的適應(yīng)社會的就業(yè)的需求。二、gis二次開發(fā)需要達(dá)

2、到的要求:通過gis二次組件式開發(fā),使學(xué)生更好的掌握以下內(nèi)容:1、窗體界面設(shè)計(主要包括菜單、工具條、對話框、狀態(tài)欄、比例尺與圖例的設(shè)計)2、數(shù)據(jù)讀寫(主要包括文件的讀寫、數(shù)據(jù)庫的讀寫)3、模塊與函數(shù)的編寫(主要包括模塊、類模塊、帶參數(shù)的函數(shù)、帶返回值的函數(shù))4、功能算法設(shè)計與實現(xiàn)主要包括緩沖區(qū)查詢功能、最短路徑查詢功能等功能的設(shè)計與實現(xiàn);三、gis二次開發(fā)的基本流程目前gis二次開發(fā)是指根據(jù)特有的需要完成的功能,如防洪管理信息系統(tǒng),最主要是根據(jù)防洪部門的特殊要求,如洪水區(qū)淹沒范圍、洪水淹沒建筑模擬等,但不管是用什么控件(mapx、mapobject、arcengine等)通過gis二次開發(fā)出

3、來的什么系統(tǒng),它們的大致開發(fā)流程一般都相似,一般都是根據(jù)軟件工程學(xué)中的瀑布模型的步驟完成,即制定計劃、需求分析、軟件設(shè)計、程序編寫、軟件測試和運行維護(hù)等六個基本步驟。在瀑布模型中,軟件開發(fā)的各項活動嚴(yán)格按照線性方式進(jìn)行,當(dāng)前活動接受上一項活動的工作結(jié)果,實施完成所需的工作內(nèi)容。當(dāng)前活動的工作結(jié)果需要進(jìn)行驗證,如果驗證通過,則該結(jié)果作為下一項活動的輸入,繼續(xù)進(jìn)行下一項活動,否則返回修改,如下圖1所示: 軟件計劃需求分析與定義軟件設(shè)計軟件實現(xiàn)軟件測試軟件維護(hù)軟件計劃需求分析與定義軟件設(shè)計軟件實現(xiàn)軟件測試軟件維護(hù) 圖1:gis二次開發(fā)開發(fā)的基本流程四、gis二次開發(fā)平臺的選擇:gis二次開發(fā)平臺現(xiàn)在

4、有許多種,可選用可視化開發(fā)語言visual c+,visual basic,delphi等,結(jié)合相關(guān)組件(mapx,mapobjects,arcobjects等)進(jìn)行相應(yīng)的開發(fā),根據(jù)所要完成的功能不同,可選擇不同的組件,只要掌握一種組件,其它組件上手與學(xué)習(xí)將會變得相對較容易,根據(jù)我校的實院情況,我們選擇相對比較簡單的visual basic做為可視化開發(fā)語言結(jié)合mapobject組件進(jìn)行小型系統(tǒng)的開發(fā).五、vb與mapobject開發(fā)難點歸納:1、 掌握pme模型,即屬性、方法、事件模型的基本概念(在此不做祥細(xì)的解釋,省略);2、 學(xué)會vb中模塊與類模塊的編寫;vb的代碼存儲在模塊中,在vb中

5、提供了三種類型的模塊:窗體模塊、標(biāo)準(zhǔn)模塊和類模塊。簡單的應(yīng)用程序可以只有一個窗體,所用的程序都駐留在窗體模塊中,而當(dāng)應(yīng)用程序龐大復(fù)雜時,就要另外附加窗體。最終可能有幾個窗體中有一些共同都要執(zhí)行的代碼,為了在兩個窗體中不產(chǎn)生重復(fù)代碼,可創(chuàng)建一個獨立的模塊,用它實現(xiàn)代碼公用。該獨立模塊即是標(biāo)準(zhǔn)模塊。此外還可以建立包含共享代碼與數(shù)據(jù)的類模塊。每個標(biāo)準(zhǔn)模塊、類模塊和窗體模塊可包含:(1)聲明。 可將常數(shù)、類型、變量和動態(tài)鏈接庫(dll)過程的聲明放在窗體、類或標(biāo)準(zhǔn)模塊的聲明部分。每個模塊只有一個聲明部分。(2)每個模塊可有多個過程,過程是劃分vb代碼的最小單元,每個過程是一個可執(zhí)行的代碼片段。vb中主

6、要有子過程、函數(shù)過程或者屬性過程等(3)各種模塊類型 窗體模塊(文件擴展名為.frm)窗體模塊是vb應(yīng)用程序的基礎(chǔ)。窗體模塊可以包含處理事件的過程、通用過程以及變量、常數(shù)、自定義類型和外部過程的窗體級聲明。寫入窗體模塊的代碼是該窗體所屬的具體應(yīng)用程序?qū)S玫?;也可以引用該程序?nèi)的其它窗體和對象每個窗體模塊都包含事件過程,在事件過程中有為響應(yīng)該事件而執(zhí)行的程序段。窗體可包含控件。在窗體模塊中,對窗體上的每個控件都有一個對應(yīng)的事件過程集。除了事件過程,窗體模塊還可包含通用過程,它對來自該窗體中任何事件過程的調(diào)用都作出響應(yīng)。 標(biāo)準(zhǔn)模塊(文件擴展名為*.bas):標(biāo)準(zhǔn)模塊是程序中的一個獨立容器,包含全局

7、變量、function(函數(shù))過程和sub過程(子過程)。可將那些與特定窗體或控件無關(guān)的代碼放入標(biāo)準(zhǔn)模塊中。標(biāo)準(zhǔn)模塊中包含應(yīng)用程序內(nèi)的允許其它模塊訪問的過程和聲明。它們可以包含變量、常數(shù)、類型、外部過程和全局聲明或模塊級聲明。寫入標(biāo)準(zhǔn)模塊的代碼不必固定在特定的應(yīng)用程序上;與窗體不同,標(biāo)準(zhǔn)模塊不包含對象或?qū)傩栽O(shè)置,而只包含可在代碼窗口中顯示和編輯的代碼。 類模塊(文件擴展名為*.cls) 在vb中類模塊是面向?qū)ο缶幊痰幕A(chǔ)??梢栽陬惸K中編寫代碼建立新對象。這些新對象可以包含自定義的屬性和方法。實際上,窗體正是這樣一種類模塊,在其上可安放控件,可顯示窗體窗口 用類模塊創(chuàng)建對象,這些對象可被應(yīng)用程

8、序內(nèi)的過程調(diào)用。標(biāo)準(zhǔn)模塊只包含代碼,而類模塊包含代碼又包含數(shù)據(jù),可視為沒有物理表示的控件。 總結(jié):模塊:說白了就是可以放一堆function和sub的一個單獨的文件,非對象化的,可以看成是變量與函數(shù)和過程的娛樂場所。類模塊:說白了就是一個自定義的類。里面主要面向?qū)ο蟮摹?你可以自定一個對象,然后設(shè)置它的屬性和方法。舉個例子:比如說關(guān)機,可以寫成模塊中的一個過程。 而游戲中,比如一個坦克,最好寫成一個類模塊。 比如說有坦克的生命,坦克的攻擊力,坦克的攻擊范圍,這是屬性。 還有坦克的死亡等,這些方法。 還有坦克被攻擊等,這是事件。寫模塊與類模塊主要是為了程序結(jié)構(gòu)更加清楚,代碼重用性更好,以免所有代

9、碼都寫于窗體中顯得更加擁擠,便于程序的調(diào)試。 模塊設(shè)計的考慮 在vb中創(chuàng)建應(yīng)用程序的最重要的部分是設(shè)計階段。首先需要為應(yīng)用程序設(shè)計一個用戶界面,這個界面的設(shè)計比較容易確定。但設(shè)計代碼的結(jié)構(gòu)就是一項較復(fù)雜的工作。構(gòu)造應(yīng)用程序的方法不同,可能會造成應(yīng)用程序的性能以及代碼的可維護(hù)性,可使用性不同。 vb應(yīng)用程序呈層次結(jié)構(gòu)。典型應(yīng)用程序包括若干個模塊:應(yīng)用程序中每個窗體的窗體模塊、共享代碼的標(biāo)準(zhǔn)模塊和類模塊。每個模塊包含若干含 有代碼的過程:event過程,sub過程或function過程及property過程。 在很多情況中都存在著多個對象共享的重復(fù)過程。這種情況最好創(chuàng)建一個共享的子過程,使大家都可

10、以調(diào)用它。即使將來修改這些子程序,則只在一個地方修改就可進(jìn)行全部修改,這將大大提高程序的可讀性和可維護(hù)性。可以把所有的共享操作放在標(biāo)準(zhǔn)的模塊中。 3、 掌握過程的分類及編寫(1) 過程 :一個應(yīng)用程序是由若干模塊組成的,而每個模塊又是由若干個更小的代碼片段組成,將組成這些模塊的代碼片段稱為過程。通過過程,可以將整個程序按功能進(jìn)行分塊,每個過程用來完成一項特定的功能。使用過程來組織代碼,不僅可以使程序的結(jié)構(gòu)更加清晰,而且便于查找和修改代碼。當(dāng)在其它工程中使用某個相同功能時,可以將過程作為可重用的代碼,直接拿到該工程中使用。vb中過程基本分類: 函數(shù)過程(function procedure):函

11、數(shù)過程用來完成特定的功能并返回相應(yīng)的結(jié)果。在事件或其它過程中可按名稱調(diào)用函數(shù)。函數(shù)過程能夠接收參數(shù),并且總是以該函數(shù)名返回一個值。這類過程一般用于完成計算任務(wù)。 子過程:子過程是沒有返回值的函數(shù)。在事件過程或其它過程中可按名稱調(diào)用子過程。子過程能夠接收到參數(shù),并可用于完成過程中的任務(wù)并返回一些數(shù)值。但是,與函數(shù)過程不同,子過程不返回與其特定子過程名相關(guān)聯(lián)的值。子過程一般用于接收或處理輸入數(shù)據(jù)、顯示輸出或者設(shè)置屬性。 屬性過程:屬性過程用來創(chuàng)建和操作程序中用戶定義的屬性。這是一種有用的,在某種程度上相當(dāng)高級的特性,它使能夠定制現(xiàn)有的vb控件并通過創(chuàng)建新的對象,屬性和方法來擴展vb語言 通用過程:

12、通用過程表示如何完成一指定的任務(wù)。一旦定義了通用過程,可由其他過程來調(diào)用。建立通用過程的理由之一就是幾個不同的事件過程也許要執(zhí)行同樣的動作。將公共語句放入通用過程,并用事件過程來調(diào)用它,這樣就不必重復(fù)代碼,也容易維護(hù)應(yīng)用程序。 通用過程包含在標(biāo)準(zhǔn)模塊中,它可由程序中任何部分調(diào)用。通用過程與事件過程不同,因為它并不與某個運行事件或使用工具箱控件創(chuàng)建的對象相關(guān)聯(lián)。通用過程與vb的內(nèi)建語句和函數(shù)類似,它們都名稱調(diào)用、可接收參數(shù)、并且分別完成一特定任務(wù)。允許把一個經(jīng)常用到的過程以熟悉的名稱寫入某個標(biāo)準(zhǔn)模塊中。 (2) 使用過程編程的優(yōu)點 消除了重復(fù)語句行,使程序更易閱讀。,簡化了程序開發(fā),其它程序可重

13、復(fù)使用該通用過程,擴展vb語言。 (3) 各種過程的語法說明: 子過程語法 private|public|friendstaticsub過程名(參數(shù)表) 程序段exit sub 程序段 end sub sub語句的語法包含下面部分: public可選的。表示所有模塊的所有其它過程都可訪問這個sub過程。private可選的。表示只有在包含其聲明的模塊中的其它過程可以訪問該sub過程friend可選的。只能在類模塊中使用。表示該sub過程在整個工程中都可見的,但對對象實例的控件者是不可見的。 static可選的。表示在調(diào)用之間保留sub過程的局部就量的值。static屬性對在sub外聲明的變量不

14、會產(chǎn)生影響,即使過程中也使用了這些變量。 過程名是必需。sub的名稱遵循標(biāo)準(zhǔn)的變量命名約定。 參數(shù)表是可選的。代表在調(diào)用時要傳遞給sub過程的參數(shù)的變量列表。多個變量由用逗號隔開。重點說明: 如果沒有使用private,public或friend,sub過程在缺省情況是公用的。如果沒有使用static,則在調(diào)用之后不會保留變量的值。friend關(guān)鍵字只能在類模塊中使用。不過friend過程可以被工程的任何模塊中的過程訪問。 sub過程可以是遞歸的,也就是說,該過程可以調(diào)用自己來完成某個特定的任務(wù)。不過,遞歸可能會導(dǎo)致堆棧上溢。通常static關(guān)鍵字和遞歸的sub過程不在一起使用。 所有的可執(zhí)行

15、代碼都必須屬于某個過程,不能在別的sub,function或property過程中定義sub過程。 exit sub 語句使執(zhí)行從一個sub過程中退出。 sub過程 與function過程的相似之處是:它們都 是一個可以獲取參數(shù),執(zhí)行一系列語句,以及改變其參數(shù)的值的獨立過程。而與function過程不同的是sub過程不能用于表達(dá)式 可以使用過程名并后跟相應(yīng)的參數(shù)列表來調(diào)用一個sub過程。 在sub過程中使用的變量分類為兩類:一類是在過程內(nèi)顯示定義的,另一類則不是。 不能使用gosub,goto或return來進(jìn)入或退出sub過程 每次調(diào)用過程都會執(zhí)行sub和end sub之間的語句塊??梢詫⒆?/p>

16、過程放入標(biāo)準(zhǔn)模塊、類模塊和窗體模塊中。 在過程調(diào)用中,發(fā)送到子過程的參數(shù)值和類型必須與子過程聲明語句中參數(shù)值和類型相符 將變量傳遞給過程被稱為傳遞稱為引用參數(shù),因為變量能夠被過程修改并返回給程序。 事件過程:事件是窗體或控件所能識別的動作。一個控件的事件過程將控件的實際名字、下劃線(_)和事件名組合起來。其語法為:private sub controlnake_eventname(參數(shù)表) 語句塊 exit sub 語句塊 end sub function過程:在定義了一個函數(shù)之后,可以像調(diào)用任何一個vb的內(nèi)部函數(shù)一樣使用它,即可以在任何表達(dá)式,語句或函數(shù)中引用它。 函數(shù)過程是標(biāo)準(zhǔn)模塊中位中f

17、unction語句與end function 語句之間的一系列語句。在標(biāo)準(zhǔn)模塊中聲明的函數(shù)在缺省的狀態(tài)下是公用函數(shù),它們可在任何事件中過程中使用。1.函數(shù)過程的語法 public|private|friendstaticfunctionname(arglist)as數(shù)據(jù)類型 程序段 name=expression exit function 程序段 name=expression end function function 語句的語法重點說明包含下面部分: public、private、static與sub過程一樣;friend只能在類模塊中使用。表示該function過程在整個工程中都是可見

18、的,但對于對象實例的控制者是不可見的。arglist代表在調(diào)用時要傳遞給function過程的參數(shù)變量列表,多個參數(shù)變量應(yīng)用逗號隔開。 數(shù)據(jù)類型是function過程的返回值的數(shù)據(jù)類型,可以是byte,boolean,integer,long,currency,single,double,date,strig(不包含定長字符串),object,variant或任何用戶定義類型。 程序段是在function過程中執(zhí)行的任何語句塊。 expression是function的返回值。 其中的參數(shù)表,參數(shù)的語法以及語法各個部分如下: optionbyval|byrefparamarrayvarname

19、()as數(shù)據(jù)類型=defaultvalue optional表示參數(shù)不是必需的。如果使用了該選項,則arglist中的后續(xù)參數(shù)都必須是可選的,而且必須都使用optional關(guān)鍵字聲明。如果使用了paramarray,則任何參數(shù)都不能使用optional聲明。 byval 表示該參數(shù)按值傳遞。 byref表示該參數(shù)按地址傳遞,byref是vb的缺省選項。 paramarray只用于arglist的最后一個參數(shù),指明最后這個參數(shù)是一個variant元素的optional數(shù)組。 varname代表參數(shù)的變量的名稱;遵循標(biāo)準(zhǔn)的變量命名約定。 數(shù)據(jù)類型表示傳遞給該過程的參數(shù)的數(shù)據(jù)類型;可以是byte,b

20、oolean,integer,long,currency,single,double,date,string,object或variant. defaultvalue表示任何常數(shù)或常數(shù)表達(dá)式,只對于option參數(shù)時是合法的。如果類型為object,則顯示缺省值只能是nothing sub過程與function過程之間有三點區(qū)別: 語句或表達(dá)式的右邊包含函數(shù)過程和參數(shù),這就調(diào)用了函數(shù) 與變量完全一樣,函數(shù)過程應(yīng)該定義返回值的數(shù)據(jù)類型 給functionname賦一個值,就可返回這個值。function過程返回一個值時,該值可成為表達(dá)式的一部分 例如,下面是已知直角三角形兩直角邊的值,計算斜邊的

21、函數(shù)。function hypotenuse(a as integer,b as integer) as string hypotenuse=sqr(a2+b2) end function在vb中調(diào)用function過程的方法和調(diào)用任何內(nèi)部函數(shù)的方法是一樣的: label1.caption=hypotenuse(cint(text1.text),cint(text2.text) strx=hypotenuse(width,height) 4、掌握new、set、nothing的用法new的用法,又稱對象實例化:dim variable as new classnew是可選關(guān)鍵字,用于在運行時創(chuàng)

22、建新對象,該對象被視為它的類所定義的對象,如:private sub command1_click()dim objform as new form1objform.showend sub這樣點擊確定按鈕,該窗體就被復(fù)制。在mapobject中,打印出對象圖,凡是對象下標(biāo)有(creatable)的均需加new,否則就不加,set是對象間賦值用的,和new無關(guān)。mapobject對象圖見附錄1:nothing 在mo中的用法:解除關(guān)聯(lián),就象人經(jīng)婚后又想結(jié)婚,那必須先離婚,解除關(guān)聯(lián),再結(jié)婚,否則將會犯重婚罪,程序達(dá)不到你所需要的要求。有了上述基礎(chǔ),即可實現(xiàn)小型系統(tǒng)的開發(fā):下面介紹一個小型系統(tǒng)的開發(fā)

23、,以完成其上所有功能及其它功能。第二部分:vb與mapobjects小型系統(tǒng)的開發(fā)第一章:需求分析1、用戶需求分析:在完成gis二次開發(fā)課程后,對當(dāng)前gis專業(yè)學(xué)生的擇業(yè)方向及就業(yè)市場的前期調(diào)查,其就業(yè)方向80%的學(xué)生愿意從事gis二次開發(fā),而就業(yè)市場的大都會選擇動手能力強的,用一篇程基礎(chǔ)的優(yōu)秀大學(xué)生作為引進(jìn)人才的標(biāo)準(zhǔn)。本人在與多位gis軟件開發(fā)者進(jìn)行了全面深入地探討和分析,結(jié)合我校的實際情況,同時多位老師的一至意見,如何提高學(xué)生的動手能力?答案只有一個:真刀實槍的干,這就要求每個學(xué)生必須獨立完成gis小型系統(tǒng)的開發(fā),以提高學(xué)生的動手能力。2、系統(tǒng)開發(fā)背景:現(xiàn)在的gis二次開發(fā)的組件相當(dāng)多,如

24、何讓學(xué)生在短時間內(nèi)掌握gis二次開發(fā)的流程,及以后的自學(xué)開發(fā)的能力,這就要求選擇一種相對比較簡單而又能完成gis的大部分功能的軟件,因此本人多方聽取意見,最后選擇了vb與mo小型系統(tǒng)的開發(fā),其數(shù)據(jù)可以用mapobjects內(nèi)自帶的數(shù)據(jù),也可用老師提供的數(shù)據(jù),還可以自己采集數(shù)據(jù),然后進(jìn)行開發(fā)。3、開發(fā)目標(biāo):通過本次gis二次開發(fā)實習(xí),使學(xué)生能很好的掌握mapobjects控件中的對象,為將來學(xué)習(xí)其他控件打下基實的基礎(chǔ),同時讓學(xué)生掌握面向?qū)ο蟮膅is二次開發(fā),為將來在工作單位工作作好鋪墊。通過本次二次開發(fā),能讓學(xué)生有效的掌握gis中的一些基本概念、原理、方法,鞏固學(xué)生對理論課知識的理解能力,同時通

25、過一整個系統(tǒng)的開發(fā),使學(xué)生掌握模塊化設(shè)計方法以及通過gis系統(tǒng)更好的管理空間數(shù)據(jù)和屬性數(shù)據(jù)的能力,同時爭對不同的用戶能完成不同的功能的能力。4、運行環(huán)境41硬件環(huán)境:現(xiàn)有的計算機基本上都滿足用戶的需求,最低硬件環(huán)境如下:a 一臺586 以上的微機及兼容b內(nèi)存16mb(最好32mb內(nèi)存)cvga 彩顯一臺4.2軟件環(huán)境a.windows 98 以上的操作系統(tǒng)bmicrosoft visual basic 6.0.中文版數(shù)據(jù)庫管理系統(tǒng)cmapobjects2.1以上的組件版本5、數(shù)據(jù)流圖gis小型系統(tǒng)的開發(fā)的數(shù)據(jù)流對各功能模塊都不一樣,比較繁瑣,各個功能模塊的數(shù)據(jù)流圖將在以后的各個模塊中加以介紹。

26、6. 功能要求6.1功能劃分本系統(tǒng)有以下功能模塊:1)地圖操作模塊 2)圖層控制作模塊 3)幾何對象操作模塊 4)投影模塊5)查詢模塊6)專題圖制作模塊 7)空間分析模塊8)幫助模塊6.2功能描述下面詳細(xì)描述一下各個功能模塊:1)地圖操作模塊地圖操作模塊主要完成對地圖打開、刪除、保存等操作,以及地圖的放大,縮小漫游等功能;2)圖層控制作模塊 圖層控制模塊主要完成圖層的類型、圖層的上移、下移、可見性、可編輯性操作;3)幾何對象操作模塊幾何對象操作模塊主要完成點、線、面的繪制、節(jié)點的捕捉、面與面的交、并、差集等操作,以及幾何對象的之間的距離、緩沖區(qū)的建立等操作。4)投影模塊主要完成地理坐標(biāo)向投影坐

27、標(biāo)的轉(zhuǎn)換,投影文件的生成等操作;5)查詢模塊查詢模塊:主要完成風(fēng)景區(qū)查詢、圖形查屬性、屬性查圖形、圖屬互查等。6)專題圖制作模塊 專題圖制作模塊:主要完成圖層的標(biāo)注渲染、點密度渲染、按值渲染等至少七種渲染方式。7)空間分析模塊空間分析模塊:主要完成地理信息系統(tǒng)的疊加分析、緩沖區(qū)分析、最短路徑分析等操作;8)錯誤處理模塊:主要對常見錯誤進(jìn)行處理。8)幫助模塊做一個小型幫助系統(tǒng),以便用戶更好的查詢相應(yīng)的信息:7、用戶界面要求:超越vb的界面,全新感覺,操作簡便,一目了然,視圖優(yōu)美等特點。并且采用菜單界面驅(qū)動方式,給操作用戶帶來了極大的便利,對用戶友好。對鼠標(biāo)和鍵盤單獨支持。第二章:窗體界面的設(shè)計窗

28、體界面設(shè)計的一般原則:界面友好、美觀、清晰、操作方便等。在窗體界面設(shè)計及今后的編程過程中將涉及到一些控件及變量,其變量的命名有為重要,其約定為: 為使變量名所見即所得,并盡可能的短的原則(同時要滿足vb的命名規(guī)則):如:lyr:代表圖層名; dc:數(shù)據(jù)連接對象名:fname:文件名:一、菜單的設(shè)計:1、菜單的設(shè)計:1.1菜單的變量名:建議采用:m_頂級菜單_下拉菜單的方法:根據(jù)數(shù)據(jù)的不同,菜單多少可適當(dāng)?shù)脑鰷p。1.2主菜單的設(shè)計其主菜單可設(shè)計如下:1.3 下拉式菜單的設(shè)計:其下接式菜單根據(jù)需要可進(jìn)行設(shè)計,舉例如下:1.4菜單設(shè)計的步驟:首先:新建工程:在form窗口上點擊右鍵,然后點(菜單編輯

29、器),進(jìn)行菜單編輯器,進(jìn)行一項項的設(shè)計:說明:(1)在設(shè)計菜單時,必須填寫的caption與name兩項: (2)可設(shè)置快捷鍵:是否可見,生效等; (3):分別是左移:菜單升一級;右移:菜單降一級;上移與下移:可交換菜單的順序。1.5 菜單名字的命名:按上面菜單命名的約定,可如下:如 (1)“文件”菜單下面的子菜單“打開”命名為:m_file_open; (2) “編輯”下面的子菜單“選擇”菜單的子菜單“選點”命名為:m_edit_select_point;1.6 菜單事件的響應(yīng):以打開文件為例:private sub m_file_open_click()m_file_open:菜單名;cl

30、ick:單擊事件代碼的編寫及函數(shù)的調(diào)用end sub二、工具條與狀態(tài)欄的設(shè)計:1、新建工具欄toolbar:(1)toolbar 和imagelist控件包含在vb控件庫 microsoft windows common controls 6.0 中,通過:點擊工具箱上的右鍵,在彈出式菜單上選擇右鍵,選中其又稱部件;在彈出式對話框中選擇:在窗體上放置imagelist控件;設(shè)置imagelist1的屬性,通過點擊imagelist1上的按鈕,增加圖片 zoomin.bmp;zoomout.bmp;pan.bmp;globe.bmp(這些文件在esri目錄下的sample文件夾下的data中的目

31、錄bitmaps下)(2)在窗體上放置toolbar控件設(shè)置toolbar1的屬性,將toolbar1的圖像列表設(shè)置為imagelist1;增加按鈕zoomin,zoomout,pan等,設(shè)置樣式為2-tbrbuttongroup,并設(shè)置相應(yīng)的顯示圖片;增加第4個按鈕設(shè)置樣式為4-tbrplaceholder;增加第5個按鈕btnfullextent設(shè)置圖片為globe.bmp。(3)將imagelist控件與toolbar控件關(guān)聯(lián) 在設(shè)置toolbar上的按鈕上圖片時,需要對其進(jìn)行將imagelist控件與toolbar控件進(jìn)行關(guān)聯(lián):將toolbar1的圖像列表設(shè)置為imagelist1,然

32、后通過屬性頁上的點擊前后移按鈕,同時設(shè)置與通過索引對應(yīng),如下圖所示:(4)通過以上三步,即完成了工具條的設(shè)計,最后做出的界面如下圖所示:最后通過編程所要完成的工具條上的功能:當(dāng)然工具條的個數(shù)與順序根據(jù)實際情況確定。2、狀態(tài)欄的設(shè)計:在設(shè)置好工具條后,在工具箱上還有一個按鈕,這個按鈕即是狀態(tài)欄按鈕,將其托入窗體底部,點其右鍵彈出式菜單的屬性,將會彈出屬性頁,根據(jù)功能的需要設(shè)置其屬性,特別是屬性頁面上的panels面版的設(shè)計,與工具條設(shè)置相似,插入想要的控制面版的個數(shù)即可,最后完成工具欄上設(shè)計。三、對話框的設(shè)計:微軟的第三方控件有很多,現(xiàn)以對話框控件為例:對其進(jìn)行設(shè)計,其設(shè)計也相當(dāng)簡單:然后對于自

33、己要做的對話框進(jìn)行設(shè)計: 1、 對話框控件的設(shè)計: 1.1 對話框控件的加載;點擊工具箱上的右鍵,在彈出式菜單上選擇右鍵,選中其又稱部件;在彈出式對話框中選擇:,在工具箱上將會出現(xiàn)對話框控件:,將按下,在窗體中拖動,其對話框?qū)⒃诖绑w上加載;1.2對話框?qū)傩缘脑O(shè)計:由于對話框的默認(rèn)屬性name為:commondialog1,其編程及不方便,因此可將其name屬性改為:dlg1,這樣dlg1就代表了所加載的對話框:(當(dāng)然,對話框的name屬性可根據(jù)你的需要進(jìn)行命名):然后是對對話框進(jìn)行編程:2、自己編寫的對話框的設(shè)計:根據(jù)自己想要完成的功能,可對其對話框進(jìn)行設(shè)計的:主要包括對話框的頁面設(shè)計及屬性的

34、編寫:現(xiàn)以對圖層控制對話框為例:根據(jù)功能的需要可做出如下圖層控制對話框:其自做對話框的步驟大致如下:(1)新建一個窗體,更改其上的屬性;(2)在工具箱中按功能選擇相應(yīng)的控件,將其進(jìn)行排版;(3)修改窗體上的各個控件的屬性,以便以后編程;四、圖例控件與比例尺控件的設(shè)計:圖例控件與比例尺控件的設(shè)計相當(dāng)簡單,只須將這兩個控件加載進(jìn)來,放在適當(dāng)?shù)奈恢眉纯?。加載圖例與比例尺控件只須找“部件”對話框中的:找到后在工具箱上將會出現(xiàn):與兩個按鈕即是比例尺與圖例控件。二、程序的調(diào)試:在設(shè)計好界面后,需編寫相應(yīng)代碼,代碼的編寫一般不會一寫完就全部正確,需要進(jìn)行調(diào)試:其調(diào)試方法主要有以下幾種:()菜單法;()工具條

35、法;()sgbox法;()問號法;上述的四種方法,分別加以介紹:、菜單法:主要利用菜單進(jìn)行操作,如下圖所示: 對以上英文的簡要說明(一定要學(xué)會并記住快捷鍵的使用):用得最多的就是加粗體的部分:(1)step into:在函數(shù)中一步一步的走,快捷鍵:f8(2)step over:調(diào)過函數(shù)體:快捷鍵:shift+f8(3)step out:調(diào)出函數(shù)體:快捷鍵:ctrl+shift+f8(4)run to cursor:運行到鼠標(biāo)位置:快捷鍵:ctrl+f8(5)add watch:添加到監(jiān)視窗口(6)edit watch:編輯監(jiān)視窗口:快捷鍵:ctrl+w(7)quick watch:快速監(jiān)視:快

36、捷鍵:shift+f9(8)toggle breakpoint:設(shè)置斷點:快捷鍵:f9(9)clear all breakpoint:清除所有斷點:快捷鍵:ctrl+shift+f9、工具條法:(在工具條上空白處任點一下右鍵,將會彈出一個彈出式菜單,選debug,將會出現(xiàn)如下圖所示,然后會看到下圖的右圖所示:)移動到下面的每一個按鈕,會看到相應(yīng)的提示信息,看每一提示信息將會能理解其所意思(在此不多述),如下圖所示:、sgbox法:這是一種常用的方法,在調(diào)式程序時,經(jīng)常會用到,如看是否以運行到你指定的位置,看是否答到了你想要的結(jié)果時使用,如下面一段程序:dim dc as new mapobje

37、cts2.dataconnectiondim lyr as new mapobjects2.maplayerdim fname as stringprivate sub command1_click()dc.database = app.pathif not dc.connect then exit subdlg.showopenfname = dlg.filenamemsgbox fnameset lyr.geodataset = dc.findgeodataset(fname)map1.layers.add lyrend sub運行程序,將會彈出fname:如下圖:、問號法(還是用上段程序

38、)通過立即窗口,你將會看到程序運行結(jié)果。三、函數(shù)注釋一個好的程序員必須學(xué)會函數(shù)的注釋;一般系統(tǒng)給人做完以后,為使后人好維護(hù),也為了使自己的東西過一兩年后拿出來能即時上手,因此必須學(xué)會函數(shù)的注釋。函數(shù)注釋通常包括以下幾個部分:() 函數(shù)說明:主要說明此函數(shù)或過程主要用于做什么() 參數(shù)說明:主要說明函數(shù)中的形參類型及作用() 重要參數(shù):函數(shù)內(nèi)部的重要參數(shù)說明(沒有重要參數(shù)的可以省略不寫)() 返回值說明:主要說明此函數(shù)返回值的類型及作用函數(shù)注釋寫成如下形式:*函數(shù)說明:參數(shù)說明:重要參數(shù):返回值說明:*函數(shù)的注釋后面會看到,現(xiàn)在此不再舉例。ok,講完了窗體的設(shè)計及程序調(diào)式方法以后,就可以寫程序了

39、:下面從數(shù)據(jù)的讀寫開始講起。第三章:數(shù)據(jù)的讀寫mo支持的數(shù)據(jù)源有很多種,其數(shù)據(jù)的讀寫出不盡相同,現(xiàn)以讀shp文件與數(shù)據(jù)庫為例進(jìn)行編程:一、讀shape文件的步驟:讀shape文件的步驟與操作mis數(shù)據(jù)庫類似;如有mis數(shù)據(jù)庫為:學(xué)生管理數(shù)據(jù)庫:里面有多張表如(1)學(xué)生成績管理表;(2)學(xué)生籍貫表等若要找到一個學(xué)生的成績,必須先找到學(xué)生管理數(shù)據(jù)庫,然后在里面找學(xué)生成績管理表,才能找到該生的有關(guān)成績,同理加載shape文件也一樣:(1)先找到相應(yīng)的數(shù)據(jù)庫;(2)然后在數(shù)據(jù)庫中加載查找所要的圖層;(3)最后加載圖層以下是最基本的讀數(shù)據(jù)的代碼;當(dāng)然可與對話框結(jié)合起來寫,在下章節(jié)中介紹:dim dc a

40、s new mapobjects2.dataconnection定義一個數(shù)據(jù)鏈接dim lyr as new mapobjects2.maplayer定義一個圖層private sub form_load()dc.database = app.path連接數(shù)據(jù)庫if not dc.connect then exit subset lyr.geodataset = dc.findgeodataset(river)查找圖層map1.layers.add lyr添加圖層end sub(2)讀數(shù)據(jù)庫數(shù)據(jù)mo支持esri公司的空間數(shù)據(jù)庫引擎,空間數(shù)據(jù)庫能存儲、管理、提取相應(yīng)的空間數(shù)據(jù)通過sql、orac

41、le等數(shù)據(jù)庫來獲?。含F(xiàn)以sql為例讀取sql中的數(shù)據(jù)庫private sub form_load() dim pdconn as new mapobjects2.dataconnection with pdconn .server = stout設(shè)置服務(wù)器名稱 .database = esri_ce設(shè)置相應(yīng)的數(shù)據(jù)庫 .user = myuser設(shè)置用戶名 .password = mypassword設(shè)置用戶密碼 end with if not pdconn.connect then msgbox error connecting to sql database, vbcriticalelsei

42、f pdconn.geodatasets.count 0 then dim player as new mapobjects2.maplayer set player.geodataset = pdconn.findgeodataset(pdconn.geodatasets(0).name)map1.layers.add player end ifend sub第四章:模塊與類模塊的編寫:一個龐大的系統(tǒng),不光是各個窗體的堆積,可將其程序?qū)懙揭粋€模塊與類模塊中,這樣做的好處主要表現(xiàn)在:1、代碼重用性;2、代碼的可移值性。 現(xiàn)以模塊與類模塊完成畫圖(map_draw)操作,在這一章主要介紹函數(shù)的三

43、種方式的編寫:(1) 不帶參數(shù)的函數(shù);(2) 帶參數(shù)的函數(shù);(3) 具有返回值的函數(shù); 一、模塊的編寫步驟: 1、在vb窗口中選擇主菜單的,然后選擇其下的子菜單后,將出現(xiàn)如下界面:2、點擊“add module”對話框中的“打開”按鈕,將出現(xiàn)如下模塊代碼對話框: 3、打開其屬性窗口,修改模塊的”name”屬性后,在其工程資源管理器中將會要模塊文件夾下出現(xiàn):map_draw(map_draw),即map_draw模塊以生成:其模塊的代碼窗口標(biāo)題將發(fā)生改變。 4、在其模塊代碼窗口中加入相應(yīng)的代碼:加入代碼為:public dc as new mapobjects2.dataconnectionpu

44、blic lyr as new mapobjects2.maplayerpublic m_rect as new mapobjects2.rectanglepublic m_eli as mapobjects2.ellipsepublic m_poly as new mapobjects2.polygonpublic shp as objectpublic p1 as objectpublic p2 as objectpublic resshp as object*函數(shù)說明:drawpoint(map1 as object, x as single, y as single) as objec

45、t此函數(shù)主要用于畫點參數(shù)說明:map1為傳進(jìn)來一地圖對象,x,y為傳進(jìn)來的點的坐標(biāo)重要參數(shù):evpoly:地理事件,主要通過地理事件添加點返回值說明:其返回值主要返回一個對象(點對象)*public function drawpoint(map1 as object, x as single, y as single) as object畫點dim poly as new mapobjects2.pointdim evpoly as new mapobjects2.geoeventset poly = map1.tomappoint(x, y)set drawpoint = polyset e

46、vpoly = map1.trackinglayer.addevent(poly, 0)with map1.trackinglayer.symbol(0).symboltype = mopointsymbol.size = 5.color = moredend withend functionpublic function drawline(map1 as object) as object畫線dim poly as new mapobjects2.linedim evpoly as new mapobjects2.geoeventset poly = map1.tracklineset dr

47、awline = polyset evpoly = map1.trackinglayer.addevent(poly, 0)with map1.trackinglayer.symbol(0).symboltype = molinesymbol.size = 5.color = moredend withend function*函數(shù)說明:drawpoly(map1 as object) as object此函數(shù)主要用于畫多邊形參數(shù)說明:map1為傳進(jìn)來一地圖對象,返回值說明:其返回值主要返回一個對象(多邊形對象)*public function drawpoly(map1 as object)

48、 as object畫多邊形dim poly as new mapobjects2.polygondim evpoly as new mapobjects2.geoeventset poly = map1.trackpolygonset drawpoly = polyset evpoly = map1.trackinglayer.addevent(poly, 0)dim i as integeri = map1.trackinglayer.eventcountif i = 1 thenset p1 = polyset p1 = map1.trackinglayer.event(0).shape

49、end ifif i = 2 thenset p2 = polyset p2 = map1.trackinglayer.event(1).shapeset resshp = p1.getintersect(p2)end ifwith map1.trackinglayer.symbol(0).symboltype = mofillsymbol.style = mograyfill.color = mored.outlinecolor = moredend withend functionpublic function drawrect(map1 as object) as object畫矩形di

50、m poly as new mapobjects2.rectangledim evpoly as new mapobjects2.geoeventset poly = map1.trackrectangleset drawrect = polyset evpoly = map1.trackinglayer.addevent(poly, 0)with map1.trackinglayer.symbol(0).symboltype = mofillsymbol.style = mograyfill.color = moblue.outlinecolor = moblueend withend fu

51、nctionpublic function drawcircle(map1 as object) as object畫圓形dim poly as new mapobjects2.ellipsedim evpoly as new mapobjects2.geoeventset poly = map1.trackcircleset drawcircle = polyset evpoly = map1.trackinglayer.addevent(poly, 0)with map1.trackinglayer.symbol(0).symboltype = mofillsymbol.style = m

52、ograyfill.color = mogreen.outlinecolor = mogreenend withend functionpublic function draweli(map1 as object) as object畫橢圓dim poly1 as new mapobjects2.rectangledim poly as new mapobjects2.ellipsedim evpoly as new mapobjects2.geoeventset poly1 = map1.trackrectanglewith poly.bottom = poly1.bottom.top = poly1.top.left = poly1.left.right = poly1.rightend withset draweli = polyset evpoly = map1.trackinglayer.addevent(

溫馨提示

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

評論

0/150

提交評論