【发布时间】:2018-07-07 10:58:12
【问题描述】:
我有两个 Openlayers 地图,显示两个不同(无线电)频率的天空区域的两个图像(png 文件)。
我想知道是否可以将在一张地图上平移或缩放的结果复制到另一张地图上,并互惠互利。换句话说,我希望在另一张地图上同时复制一个窗口的一个交互(Pan - Zoom)的效果。
提前谢谢你
【问题讨论】:
标签: maps openlayers zooming interaction panning
我有两个 Openlayers 地图,显示两个不同(无线电)频率的天空区域的两个图像(png 文件)。
我想知道是否可以将在一张地图上平移或缩放的结果复制到另一张地图上,并互惠互利。换句话说,我希望在另一张地图上同时复制一个窗口的一个交互(Pan - Zoom)的效果。
提前谢谢你
【问题讨论】:
标签: maps openlayers zooming interaction panning
是的,您可以通过监听一个 ol.View 的事件并将它们应用到第二个地图上来做到这一点。
change:resolution 可以捕捉缩放,change:center 可以平移。
var view = new ol.View({
center: [0, 0], zoom: 2
});
var view2 = new ol.View({
center: [0, 0], zoom: 2
});
var source = new ol.source.OSM();
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: source
})
],
target: 'map',
view: view
});
var map2 = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
target: 'map2',
view: view2
});
function updateView(event, viewRef){
let newValue = event.target.get(event.key);
if(event.key === 'center') {
// we need to transform the value, it comes in an other projection
newValue = ol.proj.transform(newValue , source.getProjection(), 'EPSG:3857');
// offset the value somehow here
}
viewRef.set(event.key, newValue);
}
view.on('change:resolution', function(event){
updateView(event, view2);
});
view.on('change:center', function(event){
updateView(event, view2);
});
.map{
max-height: 100px;
}
<link href="https://openlayers.org/en/v4.6.4/css/ol.css" rel="stylesheet"/>
<script src="https://openlayers.org/en/v4.6.4/build/ol-debug.js"></script>
<div id="map" class="map"></div>
<div id="map2" class="map"></div>
【讨论】: