什么是开放层2的最佳测量策略

时间:2018-03-28 13:10:46

标签: javascript openlayers

使用以下方法进行测量,但只能在赤道附近准确。

  measureControl.getCustomLength = function (evt, onlySum) {
    var idx = evt.geometry.components.length;

    if (idx < 2)
        return '';

    var geom = new OpenLayers.Geometry.LineString([
        evt.geometry.components[idx - 2],
        evt.geometry.components[idx - 1]
    ]);

    var lastLengthArr = this.getBestLength(geom);

    var str = '';

    if (idx > 2 || onlySum) {

        str += 'Total: ' + (evt.units === 'km' ? ConvertKmToOtherUnitsForMapLen(evt.measure, true, 3) : ConvertKmToOtherUnitsForMapLen(evt.measure / 1000, true, 3)) + '<br>';           
    }
    if (!onlySum) {
        str += 'Current segment: ' + (lastLengthArr[1] === 'km' ? ConvertKmToOtherUnitsForMapLen(lastLengthArr[0], true, 3) : ConvertKmToOtherUnitsForMapLen(lastLengthArr[0] / 1000, true, 3));           
    }

    return str;
}

还有另一种更好的方法来实施测量工具,以便在地图上的任何位置获得最佳效果吗?我正在使用EPSG:4326投影。

1 个答案:

答案 0 :(得分:0)

OpenLayer拥有您需要测量的所有内容:ol.Sphere#getLength采用几何图形并以米为单位计算其大小。

查看Measure Example,了解如何使用它。

const lineString = new ol.geom.LineString([[-1e7, 1e6], [-1e6, 3e6]]);
const meters = ol.Sphere.getLength(line);