OpenLayers 6.4.3 和 AGM 之间的缩放问题(Angular Google 地图)

Zoom issue between OpenLayers 6.4.3 and AGM (Angular Google Maps)

在我更新到 OpenLayers 6.4.3 AGM(Angular Google 地图)之前,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:[]
   });
  }

在上面列出的堆栈闪电战中尝试它并查看修复。