Openlayers實(shí)現(xiàn)面積測量的方法
概述
在 Openlayers 中面積的量測和長度的測量大同小異,都需要借助于ol/sphere
模塊,不同的是長度計(jì)算是調(diào)用ol/sphere
模塊的getLength
方法,而面積則需要調(diào)用getArea
方法。
如果還不清楚如何在 Openlayers 中計(jì)算長度,可以參考Openlayers實(shí)現(xiàn)長度測量
實(shí)踐
效果
代碼分析
同長度測量一樣,監(jiān)聽draw
類的實(shí)例對象的drawstart
方法,然后監(jiān)聽當(dāng)前繪制的幾何對象的change
事件,在這個(gè)監(jiān)聽回調(diào)函數(shù)中調(diào)用ol/sphere
的getArea
方法獲取經(jīng)緯度
this.draw.on("drawstart", ({ feature }) => { this.listener = feature.getGeometry().on("change", (evt) => { const geom = evt.target; const area = getArea(geom); }); });
ol/sphere的getArea方法
getArea方法用于計(jì)算地球表面上幾何形狀的面積,并且考慮了球體的曲率,這意味著它并不是計(jì)算平面上的面積,而是計(jì)算球面上閉合路徑所圍成的面積。
參數(shù)
geometry (ol/geom/Polygon | ol/geom/MultiPolygon):
- geometry 是一個(gè)幾何對象,通常是 Polygon(多邊形)或者 MultiPolygon(多個(gè)多邊形的集合)。
- 對于 Polygon,它表示一個(gè)閉合的區(qū)域,getArea 計(jì)算的是該區(qū)域的球面面積。
- 對于 MultiPolygon,計(jì)算的是多個(gè)多邊形的總球面面積。
返回值
getArea方法返回的是一個(gè)數(shù)值,其單位是平方米。
ol/sphere實(shí)用 API 介紹
除了已經(jīng)提到的getLength、getArea和getDistance方法外,ol/sphere模塊還提供了許多其它實(shí)用的 API 方法。如下介紹:
getClosestPoint
計(jì)算一點(diǎn)到球面上某幾何形狀的最近點(diǎn)。
Sphere.getClosestPoint(geometry, point);
containsCoordinate
判斷一個(gè)點(diǎn)是否在球面上某幾何形狀內(nèi)。
Sphere.containsCoordinate(geometry, point);
getBearing
計(jì)算從一個(gè)點(diǎn)到另一個(gè)點(diǎn)的方位角(即從第一個(gè)點(diǎn)到第二個(gè)點(diǎn)的航向角)。方位角是指沿著大圓航線,連接這兩個(gè)點(diǎn)的方向。
Sphere.getBearing([lon1, lat1], [lon2, lat2]);
getIntersection
計(jì)算兩條大圓?。ㄇ蛎嫔系膬蓷l最短路徑)之間的交點(diǎn)。如果相交,則返回交點(diǎn),否則返回null
Sphere.getIntersection( [lon1, lat1], [lon2, lat2], [lon3, lat3], [lon4, lat4] );
isFlat
判斷一個(gè)幾何對象是否為平面(即判斷其是否位于球面的某個(gè)平面上)。如果幾何對象包含任何曲率,isFlat 返回 false;如果對象的坐標(biāo)位于平面上,返回 true。
Sphere.isFlat(geometry);
isValid
判斷一個(gè)幾何對象是否有效。這對于確保幾何對象在球面坐標(biāo)系中是有效的非常有用。
Sphere.isValid(geometry);
getEnvelope
獲取幾何對象的包圍盒(Bounding Box),即可以包圍該幾何對象的最小矩形框。對于球面幾何,返回的是一個(gè)近似的矩形包圍盒。返回幾何對象的包圍盒,表示為最小的經(jīng)緯度矩形。
Sphere.getEnvelope(geometry);
到此這篇關(guān)于Openlayers實(shí)現(xiàn)面積測量的文章就介紹到這了,更多相關(guān)Openlayers面積測量內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript對象的property和prototype是這樣一種關(guān)系
javascript對象的property和prototype是這樣一種關(guān)系...2007-03-03fullpage.js全屏滾動(dòng)插件使用實(shí)例
這篇文章主要介紹了fullpage.js全屏滾動(dòng)插件使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09在Html中使用Requirejs進(jìn)行模塊化開發(fā)實(shí)例詳解
在前端模塊化的時(shí)候,不僅僅是js需要進(jìn)行模塊化管理,html有時(shí)候也需要模塊化管理。這里就介紹下如何通過requirejs,實(shí)現(xiàn)html代碼的模塊化開發(fā)2016-04-04js實(shí)現(xiàn)表格的隔行變色和上下移動(dòng)
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)表格的隔行變色和上下移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02Three.js利用Detector.js插件如何實(shí)現(xiàn)兼容性檢測詳解
這篇文章主要給大家介紹了關(guān)于Three.js利用Detector.js插件如何實(shí)現(xiàn)兼容性檢測的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-09-09javascript eval和JSON之間的聯(lián)系
本文著重解釋eval函數(shù)和JSON數(shù)據(jù)格式之間的聯(lián)系以及一些細(xì)節(jié)上的問題。2009-12-12深入理解JavaScript和TypeScript中的class
class 聲明創(chuàng)建一個(gè)基于原型繼承的具有給定名稱的新類,下面這篇文章主要給大家介紹了關(guān)于JavaScript和TypeScript中class的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2018-04-04單線程JavaScript實(shí)現(xiàn)異步過程詳解
這篇文章主要介紹了單線程JavaScript實(shí)現(xiàn)異步過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05