Проблема масштабирования между OpenLayers 6.4.3 и AGM (угловые Карты Google)

#openlayers #angular-google-maps #openlayers-6 #agm

#openlayers #angular-google-maps #openlayers-6 #agm

Вопрос:

До моего обновления до 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 все векторные объекты были идеально выровнены after…no векторные объекты выровнены…

Обновить:

Похоже, что «Преобразование» может работать не так, как раньше…чем больше я смотрю на эту проблему, тем очевиднее, что здесь существует конфликт проекций между OpenLayers и AGM.

Обновить:

Проблема, безусловно, связана с проблемой масштабирования, когда чем дальше от целого целого числа вы получаете, тем сильнее смещение.

Я создал здесь StackBlitz, чтобы продемонстрировать проблему. Просто используйте кнопку «Рисовать» и верхнюю часть, чтобы отследить одно из полей. Нажмите «Остановить рисование» и переместите карту.

https://stackblitz.com/edit/angular-openlayer-play-n5brr8?file=src/app/app.component.ts

Любая помощь приветствуется.

Комментарии:

1. С какой версии OL вы обновили?

2. Мы обновили с 5.3.1 до 6.4.3

3. Это должна быть проблема преобразования координат, но почему agM и OpenLayers используются вместе?

4. Потому что изображения Google более актуальны, чем изображения Bing.

Ответ №1:

Итак, для тех, кто ищет решение этой проблемы…

При создании карты добавьте эти параметры.

 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:[]
   });
  }
 

Попробуйте это в stack blitz, указанном выше, и посмотрите на исправление.