在我更新到OpenLayers 6.4.3 AGM(Angular Google Maps(之前,OpenLayers通过加载、缩放和平移保持同步。。。现在各层的操作与OpenLayers矢量层的移动速度比AGM层快不同步。
共享值:
export class MapValues {
public static view: any = null;
public static googleLat = 0;
public static googleLng = 0;
public static googleZoom = 5;
public static map: olMap = null;
};
创建地图:
createMap() {
MapValues.view = new View({
center: [MapValues.googleLng, MapValues.googleLat],
zoom: MapValues.googleZoom,
projection: 'EPSG:3857',
maxZoom: 20,
minZoom: 5
});
let map = new olMap({
interactions: defaultInteractions({
doubleClickZoom: false,
dragPan: false,
altShiftDragRotate: false,
shiftDragZoom: false
}),
target: 'map',
view: MapValues.view,
controls:[]
});
}
对齐贴图:
alignMap() {
MapValues.view.on('change:center', function () {
MapValues.mapCenter = transform(MapValues.view.getCenter(), 'EPSG:3857', 'EPSG:4326');
MapValues.googleLat = MapValues.mapCenter[1];
MapValues.googleLng = MapValues.mapCenter[0];
});
MapValues.view.on('change:resolution', function () {
MapValues.googleZoom = MapValues.view.getZoom();
});
}
因此,每当地图被平移或缩放时;alignMap";在OpenLayers 6.4.3之前,所有矢量对象在。。。没有对齐矢量对象。。。
更新:
看起来像";变换";可能不会像以前那样工作。。。我越是关注这个问题,OpenLayers和AGM之间的投影冲突就越明显。
更新:
这个问题肯定是缩放问题,离整数越远,错位就越严重。
我在这里创建了一个StackBlitz来演示这个问题。只需使用";绘制";按钮和顶部以跟踪其中一个字段。单击";停止绘图";然后平移地图。
https://stackblitz.com/edit/angular-openlayer-play-n5brr8?file=src%2Fapp%2Fapp.component.ts
非常感谢您的帮助。
因此,对于那些正在寻找解决方案的人来说。。。
创建贴图时,请添加这些参数。
constrainResolution: true,
smoothResolutionConstraint: false,
所以它看起来是这样的。
createMap() {
MapValues.view = new View({
center: [MapValues.googleLng, MapValues.googleLat],
zoom: MapValues.googleZoom,
projection: 'EPSG:3857',
maxZoom: 20,
minZoom: 5,
constrainResolution: true,
smoothResolutionConstraint: false,
});
let map = new olMap({
interactions: defaultInteractions({
doubleClickZoom: false,
dragPan: false,
altShiftDragRotate: false,
shiftDragZoom: false
}),
target: 'map',
view: MapValues.view,
controls:[]
});
}
在上面列出的堆栈闪电战中尝试它,并查看修复程序。