我是使用OpenLayers 3的新手并遇到以下问题: 我已经创建了一个自定义控件(选择框;参见图片),我想在其中添加3个预定义的缩放选项(请参阅图像后的代码)。
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的比例的特定值(我甚至不知道它代表什么...)
非常感谢你提前和&如果问题不明确,我很乐意澄清并在必要时提供更多代码/截图。
干杯:)
答案 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());