OpenLayer学习之矢量地图
一、首先了解下矢量地圖和柵格地圖
?
矢量圖使用直線和曲線來描述圖形,這些圖形的元素是一些點、線、矩形、多邊形、圓和弧線等等,矢量地圖放大和縮小不會失真(圖片你要是放大一定程度明顯可以看出一個一個小格→柵格地圖的缺點)。為了便于存儲,傳遞,使用,矢量地圖會按照一定的格式來表達,比如常見的GeoJSON,TopoJSON,GML,KML,ShapeFile等等。 除了最后一個ShapeFile,其他幾個格式的矢量地圖OpenLayers 3都支持,使用起來也是非常的簡單。
??????????????????????
二、矢量圖層的構成
矢量圖層是在客戶端渲染的,在 web 環境中,對應的就是瀏覽器。構成一個矢量圖層的包含一個數據(source)和一個樣式(style),數據構成矢量圖層的要素,樣式規定要素顯示的方式和外觀。一個初始化成功的矢量圖層包含一個到多個要素(feature),每個要素由地理屬性(geometry)和多個其他的屬性,可能包含名稱等。
三、初始化圖層:
new ol.layer.Vector({source: new ol.source.Vector({url: '../data/geojson/line-samples.geojson', // 地圖來源format: new ol.format.GeoJSON() // 解析矢量地圖的格式化類})})- 加載代碼之所以這么簡單,是因為OpenLayers 3內置了對應矢量地圖格式的解析類,比如ol.format.GeoJSON。 它們都位于包ol.format下面,可以在API官方文檔中查詢得到。 如果是shapefile這種不支持的,則需要自己解析。 解析后,矢量地圖都會轉換為對應于OpenLayers 3中的feature。 所以,當加載完成后,可以通過source的getFeatures方法來獲取所有的矢量圖形。
- 需要注意坐標系,因為.geojson文檔里用的是和當前地圖用的不一樣的坐標系。
四、獲取得要素
那么,在一個矢量圖層中怎么取得它的某個 feature 呢,一般的想法是 vector.getFeature(),其實不是的,vector 的數據包含在 source 中,要取得 vector 的 feature 數據,要在 source 中,例如 vector.getSource().getFeatures(),該函數會返回一個 feature array,直接使用 [ ],取用即可,或者根據要素的 ID 取得(getFeatureById())。
??????同樣的,只要數據相關的操作,都要得到 vector 的 source 實例,然后進行操作,例如 添加要素(addFeature)、刪除要素(removeFeature),對每個要素進行相同的操作(forEachFeature)。
五、取得要素的 geometry
? 利用 getGeometry() 可以獲得要素的地理屬性,這個函數當然返回要素包含的 geometry,geometry 包含很多類型,主要有 point、multi point、linear ring、line string、multi line string、polygon、multi polygon、circle。
??????取得 geometry 后,就可以獲得要素的坐標了,可以根據坐標做一些地理判斷,比如判斷 一個坐標是否位于要素內(containsCoordinate(coordinate)?或者?containsXY(x, y)),取得要素的中心坐標等。
?
轉載于:https://www.cnblogs.com/tuboshu/p/10752387.html
總結
以上是生活随笔為你收集整理的OpenLayer学习之矢量地图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 8.使用Exists监控ZNode的三大
- 下一篇: 期货大赛项目|九,fileinput插件