OpenLayers-------源代碼總體結構分析

這個圖是從它的文檔上截取的,旨在從感官上認識一下OpenLayers的類。下面分別介紹(文檔中的類是按字母順序排列的,也按這個順序說吧):

 

  我們看到在類的頂層“高高在上”的是OpenLayers,它爲整個項目實現提供名稱空間JavaScript語言沒有名稱空間一說,但是它確實有自己的機制實現類似的功能,後面會說明),它直接擁有一常量VERSION_NUMBER,以標識版本。

 

  Ajax:顧名思義,用於實現Ajax功能,只是OpenLayers的開發者們把它單獨寫到一個類裏了,其中用到了Prototype.js框架裏的一些東西。同時,設計的時候也考慮了跨瀏覽器的問題。

 

  BaseTypes:這裏定製了OpenLayers中用到的stringnumber  function比如,OpenLayers. String. startsWith,用於測試一個字符串是否一以另一個字符串開頭;OpenLayers. Number. limitSigDigs,用於限制整數的有效數位;OpenLayers. Function.bind,用於把某一函數綁定於對象等等。

 

  ConsoleOpenLayers.Console,此名稱空間用於調試和把錯誤等輸出到“控制檯”上,需要結合使用../Firebug/firebug.js

 

  Control:我們通常所說的控件類,它提供各種各樣的控件,比如上節中說的圖層開關LayerSwitcher,編輯工具條EditingToolbar等等。加載控件的例子:

 

        class = new OpenLayers.Map('map', { controls: [] });

    map.addControl(new OpenLayers.Control.PanZoomBar());

    map.addControl(new OpenLayers.Control.MouseToolbar());

 

  Events:用於實現OpenLayers的事件機制。具體來說,OpenLayers中的事件分爲兩種,一種是瀏覽器事件,例如mouseup,mousedown之類的;另外一種是自定義的,如addLayer之類的。OpenLayers中的事件機制是非常值得我們學習的,後面將具體討論。

 

  Feature:我們知道:Featuregeography attributes的集合。在OpenLayers中,特別地OpenLayers.Feature 類由一個marker 和一個lonla組成OpenLayers. Feature.WFSOpenLayers. Feature. Vector繼承於它。

 

  Format:此類用於讀/寫各種格式的數據,它的子類都分別創建了各個格式的解析器。這些格式有:XMLGMLGeoJSONGeoRSSJSONKMLWFSWKT(Well-Known Text)

 

  Geometry:怎麼翻譯呢,幾何?是對地理對象的描述。它的子類有CollectionCurveLinearRingLineStringMultiLineStringMultiPointMultiPolygonPointPolygonRectangleSurface,正是這些類的實例,構成了我們看到的地圖。需要說明的是,Surface 類暫時還沒有實現。

 

  Handler:這個類用於處理序列事件,可被激活和取消。同時,它也有命名類似於瀏覽器事件的方法。當一個handler 被激活,處理事件的方法就會被註冊到瀏覽器監聽器listener ,以響應相應的事件;當一個handler被取消,這些方法在事件監聽器中也會相應的被取消註冊Handler通過控件control被創建,而control通過icon表現

 

  Icon:在計算機屏幕上以圖標的形式呈現,有url尺寸size位置position3個屬性。一般情況,它OpenLayers.Marker結合應用表現爲一個Marker

 

  Layer:圖層

 

  Map網頁中動態地圖。它就像容器,可向裏面添加圖層Layer和控件Control。實際上,單個Map是毫無意義的,正是LayerControl成就了它。

 

  Marker:它的實例是OpenLayers.LonLat OpenLayers.Icon的集合。通俗一點兒說,Icon附上一定的經緯度就是Marker

 

  Popup地圖上一個小巧的層,實現地圖“開關”功能。使用例子:

 

      Class = new OpenLayers.Popup("chicken",

                   new OpenLayers.LonLat(5,40),

                   new OpenLayers.Size(200,200),

                   "example popup",

                   true);

      map.addPopup(popup);

 

  Renderer:渲染類。在OpenLayers中,渲染功能是作爲矢量圖層的一個屬性存在的,我們稱之爲渲染器,矢量圖層就是通過這個渲染器提供的方法將矢量數據顯示出來。以SVGVML爲例,繼承關係是這樣的:    

至於OpenLayers. Renderer. Elements爲什麼要存在,以及它的渲染機制,後面會說。

 

  Tile:設計這個類用於指明單個“瓦片”Tile,或者更小的分辨率Tiles存儲它們自身的信息,比如urlsize等。它的類繼承關係如下:

 

  Util:“跑龍套”的類。

 

  寫到這裏,可以看到OpenLayers 的類纏繞的挺麻煩的,接下來的文章將從代碼部分分析更細部的東西。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章