繁体   English   中英

OpenLayers 4中如何按比例缩放?

[英]How zoom base on scale in OpenLayers 4?

我想基于比例缩放到ol3地图(例如1:50000)。 这意味着ol地图中的每1cm必须在现实世界中显示50000cm。 用于将比例转换为分辨率的方法如下:

var getResolutionFromScale = function(scale, units) {
    var dpi = getDpi();
    var mpu = ol.proj.METERS_PER_UNIT[units];
    var inchesPerMeter = 39.37;
    return parseFloat(scale) / (mpu * inchesPerMeter * dpi);
}

function getDPI()
{
    var div = document.createElement("div");
    div.style.width="1in";
    var body = document.getElementsByTagName("body")[0];
    body.appendChild(div);
    var dpi = document.defaultView.getComputedStyle(div, null).getPropertyValue('width');
    body.removeChild(div);
    return parseFloat(dpi);
}

现在进行测试,我使用ScaleLine,当scaleLine控件显示1000m时,其长度必须为2cm,但几乎为2.5cm。

问题在哪里? 如何缩放比例?

在线演示

该投影是墨卡托投影 ,该投影保留角度但不保留距离。 这意味着在整个地图上比例尺是不一样的:(

要看到它,只需从赤道移动到极点,然后看ScaleLine长度就会增加。

因此,您无法在全球范围内计算比例,而必须在本地进行计算(计算地图投影中视图中心的2个点之间的距离与hasrsine距离以得出比例)。 请注意,DPI取决于您使用的设备(屏幕,打印机),并且彼此之间可能有很大不同。

您可以使用geometry.getLength()ol.Sphere.getLength()来计算两个距离。 查看以下示例: https : //openlayers.org/en/latest/examples/measure.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM