OpenLayers繪制圖形


OpenLayers繪制圖形

 

OpenLayers的顯示構成由外向內為:

  1. ol.Map:地圖對象。
  2. ol.layer.Vector:圖層對象layer。Map含有多個layer,最終的顯示效果是由多個layer疊加而成。
  3. ol.source.Vector和ol.style.Style:

一個layer由兩部分構成:數據源source和樣式style。其含義是,該layer下所有的圖形都使用同樣的繪制樣式。

  • ol.source.Vector:數據源,提供該layer下所有的圖形信息。
  • ol.style.Style:繪制樣式,為該layer下所有的圖形共用。具體見后面ol.style.Style詳解。
  1. ol.Feature:要素,即圖形。一個source下含多個Feature。Feature是所有圖形的一個封裝,具體代表什么圖形由內部的geometry參數決定。
  2. ol.geom.Geometry:具體圖形,決定了一個Feature具體代表什么圖形。其類型有:
    • ol.geom.Point:點。
    • ol.geom.LineString:線。
    • ol.geom.Circle:圓。
    • ol.geom.LinearRing:線性環。
    • ol.geom.MultiPoint:多點。
    • ol.geom.MultiLineString:多線。
    • ol.geom.MultiPolygon:多面。
    • ol.geom.Polygon:多邊形。

其結構如下:

 

因此,要繪制一個點,其過程為:

  1. 調用new ol.geom.Point來創建一個geometry對象。
  2. 將geometry對象作為屬性,調用new ol.Feature來創建一個Feature。
  3. 多個Feature構成一個features數組,作為屬性,調用new ol.source.Vector來創建一個source。
  4. 調用new ol.style.Style來創建一個style。
  5. 將3和4中創建的source和style作為屬性,調用來new ol.layer.Vector創建一個layer。
  6. 將layer作為屬性,調用new ol.Map來創建Map。

若要清空一個layer的所有圖形,那么獲取該layer的source,然后調用source.clear()即可。

 

ol.style.Style詳解

一個layer由兩部分構成:數據源source和樣式style。

其中,style即ol.style.Style,指明了各個類型的要素所使用的樣式。其屬性為:

  • geometry:要素的屬性/要素/返回一個地理要素的函數,用來渲染成相應的地理要素。一般與image屬性配合使用,用於定義image要顯示的位置。
  • fill:填充要素的樣式。只有一個color屬性。其格式為:

color: 'rgba(255, 125, 125, 0.5)'

  • image:圖片樣式,類型為 ol.style.Image,也可設置為ol.style.Image的兩個派生類:ol.stylel.Circle和ol.style.Icon。然而,image屬性並不僅僅對圖片生效。默認image會對整個layer的要素生效。例如將image賦值為ol.style.Circle,那么point要素會渲染成一個圓。
  • stroke:要素邊界樣式,類型為 ol.style.Stroke。主要屬性為color和width。
  • text:要素文字的樣式,類型為 ol.style.Text。主要配合ol.geom.Point在指定位置顯示文本。文本內容由ol.style.Text.text屬性控制。因此,若多個點共享同一個style,那么這些點顯示的文本是相同的。若要每個點顯示不同的文本,需要每個Feature單獨設置自己的style。
  • zIndex:z軸次序。用於layer的上下堆疊。

也就是說,一個ol.style.Style對象,是由多個ol.style.XXX組成。所以一個ol.style.Style對象就涵蓋了各個類型要素的顯示方式。

因此,一個layer只需要設置一個ol.style.Style,然后該layer下的所有要素就會按ol.style.Style中定義的對應類型style來進行渲染,即

若非常確定一個layer下不會顯示某些類型的要素,例如text,那么可以不為ol.style.Style設置對應的屬性。

ol.style.Style是layer的全局屬性,對layer的所有要素生效。但每個feature也可以調用setStyle()來設置自己的style。

例如:

對一個ol.geom.Point而言,fill和stroke屬性是無效的,其最主要的style是image屬性。將image屬性設為ol.stylel.Circle,則該點會顯示為一個圓;將image屬性設為ol.style.Icon,則該點會顯示為一個圖標。

對一個ol.geom.Circle而言,最主要的style屬性是fill和stroke,這兩個屬性決定了圓的內部顏色和外側輪廓。而image屬性則是無效的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM