Openlayers 3計算長度和面積


1.比較粗糙的計算方式

    計算長度

var length = lineFeature.getGeometry().getLength();
                        if (length > 1000) {
                            length = length / 1000;
                            unit = 'km';
                        } else {
                            unit = 'm';
                        }

    說明:直接使用geom的getLength方法獲取長度,openlayers默認的長度單位是m。所有如果長度大於1000,需要轉換成km。

    計算面積

var area = polygonFeature.getGeometry().getArea();
                        if (area > 1000000) {
                            area = area / 1000000;
                            unit = 'km²';
                        } else {
                            unit = 'm²';
                        }

    說明:直接使用geom的getArea方法獲取面積,同理如果面積大於1000000,需要轉換為km(2)。

2.精准計算

    計算長度

var sphere = new ol.Sphere(6378137);
var lonLatLine = lineFeature.getGeometry().transform(mapProjection, 'EPSG:4326');
                        var lineCoordinates = lonLatLine.getCoordinates();
                        var length = 0;
                        for (var i = 0; i < lineCoordinates.length - 1; i += 1) {
                            length += sphere.haversineDistance(lineCoordinates[i], lineCoordinates[i + 1]);
                        }
                        if (length > 1000) {
                            length = length / 1000;
                            unit = 'km';
                        } else {
                            unit = 'm';
                        }

    說明:ol.Sphere是一個地形對象,可提供計算精准長度和面積。通過實際地理形狀計算,需要把坐標轉換為對應坐標系的經緯度,調用geom的transform(projection1, projection2),把投影系1下的坐標轉化為投影系2的坐標,例如把墨卡托投影系EPSG:3857(大地坐標)下的坐標轉換為EPSG:4236投影系下的坐標(經緯度)。使用Sphere對象的haversineDistance函數計算兩個坐標之間的距離。

   計算面積

var lonLatPolygon = polygonFeature.getGeometry().transform(mapProjection, 'EPSG:4326');
                        var area = Math.abs(sphere.geodesicArea(lonLatPolygon.getCoordinates()[0]));
                        if (area > 1000000) {
                            area = area / 1000000;
                            unit = 'km²';
                        } else {
                            unit = 'm²';
                        }

   說明:其他不用再多介紹了,主要說下geodesicArea函數,它用來計算多邊形的面積,計算出來的面積有正負之分,如果多邊形是沿順時針方向畫,面積為正;否則為負。所以需要使用Math.abs求絕對值。


免責聲明!

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



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