OpenLayers 項(xiàng)目完整分析——(二)源代碼總體結(jié)構(gòu)分析上一篇 / 下一篇 2008-01-07 23:33:48 / 個(gè)人分類(lèi):OpenLayers
(二)源代碼總體結(jié)構(gòu)分析 通過(guò)前面的項(xiàng)目介紹,我們大概已經(jīng)知道 Openlayers是什么,能夠做什么,有什么意義。接下來(lái)我們分析它怎么樣,以及怎樣實(shí)現(xiàn)的等問(wèn)題。 這個(gè)圖是從它的文檔上截取的,旨在從感官上認(rèn)識(shí)一下OpenLayers的類(lèi)。下面分別介紹(文檔中的類(lèi)是按字母順序排列的,也按這個(gè)順序說(shuō)吧): 我們看到在類(lèi)的頂層“高高在上”的是OpenLayers,它為整個(gè)項(xiàng)目實(shí)現(xiàn)提供名稱(chēng)空間(JavaScript語(yǔ)言沒(méi)有名稱(chēng)空間一說(shuō),但是它確實(shí)有自己的機(jī)制實(shí)現(xiàn)類(lèi)似的功能,后面會(huì)說(shuō)明),它直接擁有一常量 VERSION_NUMBER,以標(biāo)識(shí)版本。 Ajax: 顧名思義,用于實(shí)現(xiàn)Ajax功能,只是OpenLayers的開(kāi)發(fā)者們把它單獨(dú)寫(xiě)到一個(gè)類(lèi)里了,其中用到了Prototype.js框架里的一些東西。同時(shí),設(shè)計(jì)的時(shí)候也考慮了跨瀏覽器的問(wèn)題。 BaseTypes: 這里定制了OpenLayers中用到的 string,number 和 function。比如,OpenLayers. String. startsWith,用于測(cè)試一個(gè)字符串是否一以另一個(gè)字符串開(kāi)頭;OpenLayers. Number. limitSigDigs,用于限制整數(shù)的有效數(shù)位;OpenLayers. Function.bind,用于把某一函數(shù)綁定于對(duì)象等等。 Console: OpenLayers.Console,此名稱(chēng)空間用于調(diào)試和把錯(cuò)誤等輸出到“控制臺(tái)”上,需要結(jié)合使用../Firebug/firebug.js。 Control: 我們通常所說(shuō)的控件類(lèi),它提供各種各樣的控件,比如上節(jié)中說(shuō)的圖層開(kāi)關(guān) LayerSwitcher,編輯工具條EditingToolbar等等。加載控件的例子 : class = new OpenLayers.Map('map', { controls: [] }); map.addControl(new OpenLayers.Control.PanZoomBar()); map.addControl(new OpenLayers.Control.MouseToolbar()); Events: 用于實(shí)現(xiàn)OpenLayers的事件機(jī)制。具體來(lái)說(shuō), OpenLayers中的事件分為兩種,一種是瀏覽器事件,例如mouseup,mousedown之類(lèi)的;另外一種是自定義的,如addLayer之類(lèi)的。 OpenLayers中的事件機(jī)制是非常值得我們學(xué)習(xí)的,后面將具體討論。 Feature: 我們知道:Feature是 geography 和attributes的集合。在OpenLayers中,特別地OpenLayers.Feature 類(lèi)由一個(gè)marker 和一個(gè)lonla組成。 OpenLayers. Feature.WFS與OpenLayers. Feature. Vector繼承于它。 Format: 此類(lèi)用于讀/寫(xiě)各種格式的數(shù)據(jù),它的子類(lèi)都分別創(chuàng)建了各個(gè)格式的解析器。這些格式有: XML、 GML、GeoJSON 、 GeoRSS、JSON、KML 、WFS、WKT( Well-Known Text )。 Geometry: 怎么翻譯呢,幾何?是對(duì)地理對(duì)象的描述。它的子類(lèi)有Collection、Curve、LinearRing、LineString、MultiLineString、MultiPoint、MultiPolygon、Point、Polygon、Rectangle、Surface,正是這些類(lèi)的實(shí)例,構(gòu)成了我們看到的地圖。需要說(shuō)明的是, Surface 類(lèi)暫時(shí)還沒(méi)有實(shí)現(xiàn)。 Handler: 這個(gè)類(lèi)用于處理序列事件,可被激活和取消。同時(shí),它也有命名類(lèi)似于瀏覽器事件的方法。當(dāng)一個(gè) handler 被激活,處理事件的方法就會(huì)被注冊(cè)到瀏覽器監(jiān)聽(tīng)器listener ,以響應(yīng)相應(yīng)的事件;當(dāng)一個(gè)handler被取消,這些方法在事件監(jiān)聽(tīng)器中也會(huì)相應(yīng)的被取消注冊(cè)。Handler通過(guò)控件control被創(chuàng)建,而control通過(guò)icon表現(xiàn)。 Icon: 在計(jì)算機(jī)屏幕上以圖標(biāo)的形式呈現(xiàn),有url、尺寸size和位置position3個(gè)屬性。一般情況,它與 OpenLayers.Marker結(jié)合應(yīng)用,表現(xiàn)為一個(gè) Marker。 Layer: 圖層。 Map: 網(wǎng)業(yè)中動(dòng)態(tài)地圖。它就像容器,可向里面添加圖層Layer和控件Control。實(shí)際上,單個(gè)Map是毫無(wú)意義的,正是Layer和Control成就了它。 Marker: 它的實(shí)例是 OpenLayers.LonLat 和OpenLayers.Icon的集合。通俗一點(diǎn)兒說(shuō), Icon附上一定的經(jīng)緯度就是Marker。 它們的組合關(guān)系是: Popup: 地圖上一個(gè)小巧的層,實(shí)現(xiàn)地圖“開(kāi)關(guān)”功能。使用例子: Class = new OpenLayers.Popup("chicken", new OpenLayers.LonLat(5,40), new OpenLayers.Size(200,200), "example popup", true); map.addPopup(popup); Renderer : 渲染類(lèi)。 在OpenLayers中,渲染功能是作為矢量圖層的一個(gè)屬性存在的,我們稱(chēng)之為渲染器,矢量圖層就是通過(guò)這個(gè)渲染器提供的方法將矢量數(shù)據(jù)顯示出來(lái)。以SVG 和VML為例,繼承關(guān)系是這樣的: 至于 OpenLayers. Renderer. Elements為什么要存在,以及它的渲染機(jī)制,后面會(huì)說(shuō)。 Tile: 設(shè)計(jì)這個(gè)類(lèi)用于指明單個(gè)“瓦片”Tile,或者更小的分辨率。Tiles存儲(chǔ)它們自身的信息,比如url和size等。它的類(lèi)繼承關(guān)系如下: Util:“ 跑龍?zhí)?#8221;的類(lèi)。 寫(xiě)到這里,可以看到OpenLayers 的類(lèi)纏繞的挺麻煩的,接下來(lái)的文章將從代碼部分分析更細(xì)部的東西。 相關(guān)閱讀:
|
|
|
來(lái)自: Java修煉館 > 《openlayer》