OpenLayers:在大型建筑物上附加地面层图像
OpenLayers: Attaching an ground layer image over an large building
我有以下任务:
在植物上附加地面层(以 jpg 图像形式提供)。
我认为我找到了解决方案。
CodePen 上的现场演示:http://codepen.io/mizech/full/dXBoRq/
但它没有按预期工作。如果放大或缩小地图,图像不会变大或变小。
此外:图像应该随地图旋转。那也不行。
因此我的问题是:
我需要做些什么才能让它按应有的方式工作(图像在放大和缩小时缩放,图像在旋转时跟随) ?
还是我应该选择完全不同的方法?
非常感谢有关代码示例的任何提示。
这里是我的代码:
var layer = new ol.layer.Tile({
source: new ol.source.OSM()
});
var control = new ol.control.FullScreen();
var center = ol.proj.transform([6.9690055, 49.2175355], 'EPSG:4326', 'EPSG:3857');
var overlay = new ol.Overlay({
position: center,
element: document.getElementById('plant')
});
var view = new ol.View({
center: center,
zoom: 17
});
var map = new ol.Map({
target: 'map',
layers: [layer],
controls: [control],
overlays: [overlay],
view: view
});
#plant {
width: 1300px;
height: 400px;
border: 1px solid black;
transform: rotate(16.5deg);
}
#plant img {
opacity: 0.6;
}
<div id="map" class="map">
<div id="plant"><img src="http://placehold.it/1300x400" alt="bild" /></div>
</div>
您可以尝试使用其他选项来完成您喜欢的效果,我能想到的有两个选项:
1.使用ol.layer.Image()
,代码示例:
var extent = ol.proj.transformExtent([7.2, 49.3, 6.5, 49.1],
'EPSG:4326', 'EPSG:3857');
new ol.layer.Image({
opacity: 0.6,
source: new ol.source.ImageStatic({
url: 'http://placehold.it/1300x400',
imageExtent: extent
})
})
范围还只是粗略估计。
2. 使用矢量图层为使用您的图像的图标设置样式,已在此处解释:
https://gis.stackexchange.com/questions/130603/how-to-resize-a-feature-and-prevent-it-from-scaling-when-zooming-in-openlayers-3/
要使其随地图一起旋转,请在您的图标样式中使用 rotateWithView: true
,如下所示:
var iconStyle = new ol.style.Icon({
src: 'http://placehold.it/1300x400',
rotateWithView: true,
opacity: 0.6
});
我有以下任务:
在植物上附加地面层(以 jpg 图像形式提供)。
我认为我找到了解决方案。
CodePen 上的现场演示:http://codepen.io/mizech/full/dXBoRq/
但它没有按预期工作。如果放大或缩小地图,图像不会变大或变小。
此外:图像应该随地图旋转。那也不行。
因此我的问题是:
我需要做些什么才能让它按应有的方式工作(图像在放大和缩小时缩放,图像在旋转时跟随) ?
还是我应该选择完全不同的方法?
非常感谢有关代码示例的任何提示。
这里是我的代码:
var layer = new ol.layer.Tile({
source: new ol.source.OSM()
});
var control = new ol.control.FullScreen();
var center = ol.proj.transform([6.9690055, 49.2175355], 'EPSG:4326', 'EPSG:3857');
var overlay = new ol.Overlay({
position: center,
element: document.getElementById('plant')
});
var view = new ol.View({
center: center,
zoom: 17
});
var map = new ol.Map({
target: 'map',
layers: [layer],
controls: [control],
overlays: [overlay],
view: view
});
#plant {
width: 1300px;
height: 400px;
border: 1px solid black;
transform: rotate(16.5deg);
}
#plant img {
opacity: 0.6;
}
<div id="map" class="map">
<div id="plant"><img src="http://placehold.it/1300x400" alt="bild" /></div>
</div>
您可以尝试使用其他选项来完成您喜欢的效果,我能想到的有两个选项:
1.使用ol.layer.Image()
,代码示例:
var extent = ol.proj.transformExtent([7.2, 49.3, 6.5, 49.1],
'EPSG:4326', 'EPSG:3857');
new ol.layer.Image({
opacity: 0.6,
source: new ol.source.ImageStatic({
url: 'http://placehold.it/1300x400',
imageExtent: extent
})
})
范围还只是粗略估计。
2. 使用矢量图层为使用您的图像的图标设置样式,已在此处解释: https://gis.stackexchange.com/questions/130603/how-to-resize-a-feature-and-prevent-it-from-scaling-when-zooming-in-openlayers-3/
要使其随地图一起旋转,请在您的图标样式中使用 rotateWithView: true
,如下所示:
var iconStyle = new ol.style.Icon({
src: 'http://placehold.it/1300x400',
rotateWithView: true,
opacity: 0.6
});