У меня есть сценарий использования, в котором я хочу определить, лежат ли определенные координаты в пределах области вида, видимой в области просмотра. Наш подход состоит в том, чтобы начать с получения координат некоторых пикселей с помощью метода нашей карты getCoordinateFromPixel. Это работает, но проблема в том, что мы также хотим увеличить масштаб программно. Мы заметили, что вызов getCoordinateFromPixel на карте с точно такими же аргументами возвращает точно то же самое до и после вызова setZoom для вида карты. Как ни странно (?) Мы также заметили, что когда мы увеличиваем вручную между двумя вызовами getCoordinateFromPixel на карте, результаты меняются.
Возьмем, к примеру, этот скрипт:
import 'ol/ol.css';
import Map from 'ol/Map';
import View from 'ol/View';
import VectorLayer from 'ol/layer/Vector';
import VectorSource from 'ol/source/Vector';
import GeoJSON from 'ol/format/GeoJSON';
import Feature from 'ol/Feature';
let markerView = new View({
center: [5000, 1000],
zoom: 2,
});
let map = new Map({
target: 'map-container',
layers: [
new VectorLayer({
source: new VectorSource({
format: new GeoJSON(),
url: './data/countries.json'
}),
})
],
view: markerView
});
window.setTimeout(() => {
console.log(JSON.stringify(map.getCoordinateFromPixel([0, 0])));
map.getView().setZoom(5);
}, 2000);
window.setTimeout(() => {
console.log(JSON.stringify(map.getCoordinateFromPixel([0, 0])));
}, 4000);
Когда вы выполняете это в проекте OpenLayers, замыкание, запущенное через 2000 мс, выведет на консоль то же самое, что и после 4000 мс, даже если мы значительно увеличили масштаб!
Мне было интересно, знает ли кто-нибудь об обходном пути, исправлении или просто причине этого. Я попытался просмотреть события, которые запускает карта, чтобы, возможно, повторно выполнить getCoordinateFromPixel в обработчике, но я не нашел события, которое запускает карта, когда мы (программно) изменили масштаб.
Я буду рад предоставить более подробную информацию, если это необходимо.
Большое спасибо заранее,
Джошуа