【问题标题】:Openlayers 3 view setProperties does not populate the mapOpenlayers 3 视图 setProperties 不填充地图
【发布时间】:2017-02-20 09:09:46
【问题描述】:

我正在尝试动态设置我的地图属性,但它不起作用。

var map = new ol.Map({
    target: 'map',
    layers: [
        new ol.layer.Tile({
            source: new ol.source.OSM()
        })
    ],
    view: new ol.View({
        center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'),
        zoom: 4
    })
});

我正在尝试像这样设置最小最大缩放级别:

map.getView().setProperties({minZoom: 5, maxZoom: 9});

此代码不设置视图。

我正在获取地图视图属性,map.getView().getProperties(); 但它只返回:

我在设置extent、zoom、minZoom、maxZoom参数但是没有出现。

DEMO APP

(实际上地图创建后不能设置project、extent、min、max zoom和resolutions)

这是一个错误吗?

【问题讨论】:

  • 我认为OL只允许你在创建后设置observable properties。作为一种变通方法,也许您可​​以将处理程序附加到 ol.control.Zoom,并在那里进行动态门控?

标签: openlayers openlayers-3


【解决方案1】:

我从this answer那里得到了解决方案

您可以通过这种方式在地图中设置新视图来做您想做的事情:

map.setView(new ol.View({
    center: map.getView().getCenter(),
    zoom: map.getView().getZoom(),
    maxZoom: 9,
    minZoom: 5
}));

如果您想保留所有视图属性而不是分配特定的东西,您可以获取它们并将它们传递给新视图:

var properties = map.getView().getProperties();
properties["minZoom"] = 5;
properties["maxZoom"] = 9;
map.setView(new ol.View(properties));

我更新了你的jsfiddle example

您可以使用setProperties 更改的唯一视图属性是getProperties 列出的视图属性。您当然可以添加一个新属性,但新属性 minZoom 和 maxZoom 不会像您预期的那样工作,因为地图仍会处理旧属性

【讨论】:

  • 但开发人员不知道这一点。因为setProperties()方法是官方的函数,保留在api文档中,但是不起作用。
【解决方案2】:

地图的默认投影是EPSG:3857,因此将ol.view 中的变换从EPSG:4326 更改为EPSG:3857。这是一个常见问题,我自己也遇到过。如果投影不匹配,则不会显示任何内容/不起作用。

更新小提琴:

http://jsfiddle.net/1zo8r5Lp/461/

【讨论】:

  • 我看过,但setProperties({minZoom: 5, maxZoom: 9}) 不限制地图缩放级别在 5 到 9 之间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
  • 2013-10-27
相关资源
最近更新 更多