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