Openlayers實現(xiàn)長度測量的方法
概述
在 Openlayers 中,計算兩點之間的距離,通常會用到ol/sphere
模塊。ol/sphere
模塊主要用于處理與球體(特別是地球球體)相關的數(shù)學和幾何計算。而長度測量主要用到ol/sphere
中的getDistance
函數(shù)。
getDistance
函數(shù)用于計算地球表面兩點之間的距離,通常用于經(jīng)緯度坐標。計算的是球面上兩點之間的大圓距離(即通過球體表面兩個點的最短路徑距離)。其返回值的單位是米 (m)
實踐
效果展示
繪制
結果
實現(xiàn)思路
繪制曲線可以采用 Openlayers 中的ol/interaction
模塊的Draw
類
實例化 Draw
this.draw = new Draw({ source: this.vectorLayer?.getSource(), type: "LineString", style: this.lineStyle, }); this.map.addInteraction(this.draw);
監(jiān)聽 this.draw 的 drawstart 方法
this.draw.on("drawstart", this.handleMeasureLineStart.bind(this));
在handleMeasureLineStart
回調(diào)方法中,接受一個evt對象,該對象包含繪制的feature
以及坐標coordinate
。效果圖一中,在選擇第一個點后,拖動鼠標,會實時顯示當前鼠標表示的點與起點之間的距離,這個邏輯就是在該回調(diào)中實現(xiàn)的。
監(jiān)聽繪制的 feature 的 change 事件
this.listenGeometryChange = feature.getGeometry().on("change", (evt) => { /*..處理邏輯..*/ });
通過evt.target獲取當前幾何對象geometry,通過該幾何對象的getFirstCoordinate()
方法獲取第一個點標記為起點,getLastCoordinate()
方法獲取最后一個點標記為終點。而繪制路線的轉(zhuǎn)折點可以通過幾何對象的getCoordinates()
方法獲取,這個方法包含首尾兩端的點。
計算坐標距離
最前面提到通過ol/sphere的getDistance()
方法計算兩點之間的距離,而在上一步中可以得到所有折線段的坐標,循環(huán)調(diào)用getDistance
方法,(需要注意的是如果當前坐標系不是經(jīng)緯度的話,就需要轉(zhuǎn)換)。就可以得到每段折線的距離。相加就是總長。但實際上例子中的總長是調(diào)用sphere.getLength(geometry)
方法獲取的,參數(shù)是幾何對象。
sphere.getLength()
方法是用于計算球體表面上沿大圓弧的距離。其參數(shù)可以是ol/geom/LineString | ol/geom/Polygon | ol/geom/MultiLineString | ol/geom/MultiPolygon的實例。- geometry 是一個表示線(如 LineString)或面(如 Polygon)的幾何對象。該幾何對象可以是包含多個點的路徑,或者是一個閉合的面。
- 對于一個 LineString(線),getLength 計算的是從第一個點到最后一個點之間的球面大圓距離。
- 對于 Polygon(面),getLength 計算的是邊界線的球面長度。如果是多邊形,則計算其外環(huán)的長度。
總結
Openlayers 中提供了內(nèi)置模塊ol/sphere用于計算距離,繪制幾何對象時,可以通過監(jiān)聽獲取當前幾何對象的關鍵值。
到此這篇關于Openlayers實現(xiàn)長度測量的文章就介紹到這了,更多相關Openlayers長度測量內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
javascript使用正則獲取url上的某個參數(shù)
使用indexOf取得?之后的參數(shù),以&使split進行分割成數(shù)組,下面展示了一個從url上獲取名為MenuCode參數(shù)的過程2014-09-09javascript實現(xiàn)隨機讀取數(shù)組的方法
這篇文章主要介紹了javascript實現(xiàn)隨機讀取數(shù)組的方法,涉及javascript隨機數(shù)及針對數(shù)組操作的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-08-08JavaScript使用Promise封裝Axios進行高效開發(fā)
這篇文章主要介紹了JavaScript使用Promise封裝Axios進行高效開發(fā),Axios是一個基于Promise的HTTP庫,它可以幫助我們更方便地發(fā)起HTTP請求,并且提供了許多高級功能,感興趣的同學可以參考下文2023-05-05