#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, указанном выше, и посмотрите на исправление.