使用以下方法进行测量,但只能在赤道附近准确。
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投影。
答案 0 :(得分:0)
OpenLayer拥有您需要测量的所有内容:ol.Sphere#getLength采用几何图形并以米为单位计算其大小。
查看Measure Example,了解如何使用它。
const lineString = new ol.geom.LineString([[-1e7, 1e6], [-1e6, 3e6]]);
const meters = ol.Sphere.getLength(line);