首页 / 浏览问题 / WebGIS / 问题详情
iClient for Openlayers如何设置比例尺
269EXP 2025年04月16日

在iObjects.java里可以通过

m_MapControl.getMap().setVisibleScales(new double[]{(double) 1 /250000, (double) 1 /100000, (double) 1 /50000, (double) 1 /25000, (double) 1/10000, (double) 1/5000, (double) 1/2500, (double) 1/1250});
设置地图的比例尺,请问在iClient for Openlayers里应该如何设置?

var scales = [50000, 20000, 10000, 5000, 2500, 1500, 1000, 500, 250, 100, 50];
var dpi = 96;
var inchesPerMeter = 39.37;
var resolutions = scales.map(scale => {
    const resolution = scale / (dpi * inchesPerMeter);
    return resolution;
});

......

ol.supermap.initMap(url, {
        mapOptions: {
            target: 'map',
            view: new ol.View({
                center: [10000000, 4000000],
                zoom: 6,
                resolutions: resolutions,
                minResolution: resolutions[resolutions.length - 1],
                maxResolution: resolutions[0],
                constrainResolution: true
            }),
            controls: [
                new ol.supermap.control.ScaleLine(),
                new ol.control.Zoom({ target: 'zoomDiv' })
            ]
        }
    })

我通过以上代码对比例尺进行设置,然后设置在地图上移动时会显示当前状态,但这个现实的状态和ol.supermap.control.ScaleLine()控件显示的比例尺似乎不一致

1个回答

您可以参考这个,用的是OpenLayers自带的比例尺控件,默认是这种样式:https://iclient.supermap.io/examples/leaflet/editor.html#controler_scaleline

您可以获取当前的地图比例尺,自定义比例尺样式添加到前端

1,191EXP 2025年04月16日
这个是iClient for leaflet的地图吧,这个用的也是openlayes的比例尺控件吗?
不好意思,我看错位置了,意思是这样的,ol.supermap.control.ScaleLine()也是基于OpenLayers的控件,只有这种样式
我这边主要想知道的还是应该如何在iClient for Openlayers的地图里设置比例尺数组

目前就是我做了一个比例尺数组放了进去,但显示的比例尺和左下角控件显示的比例尺明显对不上,

所以想请教一下这个添加比例尺数组正确的方法
您看您的比例尺数组和加载的瓦片url中的scale是否一致

我试了您的代码,没有用initMap,直接设置的map,可以用map.getView().targetResolution_,和计算的resolutions值是一样的,说明设置是生效的

map = new ol.Map({
    target: 'map',
    view: new ol.View({
        center: [11609967.454289619,3896311.0034362925],
        zoom: 2,
        resolutions: resolutions,
        constrainResolution: true
    }),
});
感谢解答
也就是说代码是没问题的,只是ScaleLine并不是用一厘米等于实际多少米表示而造成的视觉偏差?
...