OpenLayers3自定义比例选择选项:需要进行计算

时间:2016-12-19 16:59:12

标签: openlayers-3

我是使用OpenLayers 3的新手并遇到以下问题: 我已经创建了一个自定义控件(选择框;参见图片),我想在其中添加3个预定义的缩放选项(请参阅图像后的代码)。

image

let option2 = new Option('1 : 150.000', '2183910.7260319907', false, false);
option2.id = 'opt2';
select.appendChild(option2);

let option3 = new Option('1 : 30.000', '2183910.7260319907', false, false);
option3.id = 'opt3';
select.appendChild(option3);

let option4 = new Option('1 : 15.000', '2183910.7260319907', false, false);
option4.id = 'opt4';
select.appendChild(option4);

从其他来源我发现我只是"我需要将正确的值(在1:2M比例之上 2183910.7260319907 )传递到相应的比例选项,然后我已经实现了设置分辨率功能以更新地图

问题:我现在如何计算1:150.000,1:30.000和1:15.000的比例的特定值(我甚至不知道它代表什么...)

非常感谢你提前和&如果问题不明确,我很乐意澄清并在必要时提供更多代码/截图。

干杯:)

1 个答案:

答案 0 :(得分:1)

在网络制图中,我们使用分辨率,而不是缩放。分辨率仅表示每个屏幕像素的地图单位。

如果要应用纸质地图比例的概念,则需要对用户屏幕的分辨率进行假设,通常以每英寸点数(dpi)表示。然后你可以这样计算比例:

var inchesPerMeter = 39.3700787;
var dpi = 96;

function getResolutionForScale(scaleDenominator) {
  return scaleDenominator / inchesPerMeter / dpi;
}

要使用此功能,只需在您的选项中使用比例分母作为值。所以例如2000000表示“1:2.000.000”比例。然后很容易将比例应用于地图:

map.getView().setResolution(getResolutionForScale(scaleDenominator));

旁注如果你想获得超级准确:像Web Mercator这样的投影对于不同的纬度有不同的分辨率。为了适应这种情况,您可以使用ol.proj.getPointResolution()获取地图上特定位置的真实分辨率,并相应地调整getResolutionForScale()的结果:

var view = map.getView();
view.setResolution(ol.proj.getPointResolution(
    view.getProjection(),
    getResolutionForScale(scaleDenominator),
    view.getCenter());