在OpenLayers 3放大时如何调整功能大小并防止其缩放


14

我已经初始化了一个自定义的OpenLayers 3地图(用于显示附近要出售的房屋),并以图像作为地图。

然后,我为每个房屋动态创建附加要素和图层(每个要素的锚点设置为其图像的中间)。

我一直在尝试size初始化功能时使用该属性,但是它所做的是裁剪图像而不是调整其大小。

我想我已经resize在OL2的某处看到了图层的功能,但是在OL3中找不到了……那种功能会达到我想要的结果吗?

还有一个问题是,缩小地图时要素缩放比例过大,放大地图时要素缩放比例过小。有没有一种方法可以指定特征的坐标,然后在其周围进行某种不可见的边距/填充以防止其过大或过小(某种静态尺寸)?

这是特征的实际行为(这里看到的特征是黑房子): 缩小-接下来:完美的尺寸,但是缩小房屋时应该小得多(如第一张图所示)。完美变焦-房子应该保持更大,而不是在最后一张照片中再次缩小。放大太多

Answers:


14

我假设您使用ol.style.Iconol.style.Icon有一个scale 选项,您可以使用缩放图标图像。

例如,如果您想按比例缩小图像,则可以使用以下方法:

var style = new ol.style.Style({
  image: new ol.style.Icon({
    url: 'http://example.com/icon.png',
    scale: 0.5,
    // …
  })
});

现在,如果要scale基于当前分辨率使用不同的值,可以将样式函数传递给矢量层:

var iconStyle = new ol.style.Icon({
  url: 'http://example.com/icon.png',
  // …
});

var styles = [new ol.style.Style({
  image: iconStyle
})];

var vectorLayer = new ol.layer.Vector({
  source: new ol.source.Vector(),
  style: function(feature, resolution) {
    // "func" is your function that gives you a scale for a resolution
    var scale = func(resolution);
    iconStyle.setScale(scale);
    return styles;
  })
});

请注意,作为一种优化,上面的代码重用了ol.style.Icon对象,ol.style.Style对象和样式数组,以避免每次调用样式函数时都创建对象。


1
多亏了你,我终于可以工作了。我对您的代码做了一些调整:源代码需要包含要素本身:source: new ol.source.Vector({features:[iconFeature]}),否则,层中不会插入任何东西(由于某些原因,可能与要素的几何元素有关)。
杰夫·诺埃尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.