Проверка открытого слоя, если объект находится в области просмотра - PullRequest
0 голосов
/ 14 июля 2020

Моя цель - отображать только те объекты, которые имеют координаты внутри окна просмотра карты (область карты, отображаемая в данный момент).

Я получаю экстент области просмотра, выполнив:

var mapExtent = this.map.getView().calculateExtent(this.map.getSize());
mapExtent = ol.proj.transformExtent(mapExtent, 'EPSG:3857', 'EPSG:4326');

и после, в al oop, где я читаю элемент одного магазина,

var point = ol.proj.fromLonLat([
      element.get('longitude'),
      element.get('latitude')
]);

elementPoint = new ol.geom.Point(point);
var feature = new ol.Feature(elementPoint);
var coordsFeatures = feature.getGeometry().getCoordinates();

и после, просто чтобы быстро увидеть, находится ли точка внутри моего окна просмотра, я использую только журнал консоли:

console.log(ol.extent.containsXY(mapExtent, coordsFeatures[0],coordsFeatures[1]));
/*if(!ol.extent.containsXY(mapExtent, coordsFeatures[0],coordsFeatures[1])){
     return true;
}*/

Но я не знаю, почему результат только ложный, даже если точно есть точки внутри отображаемой области карты.

Что я делаю неправильно?

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Вы смешиваете проекции.

Для экстента вы меняете с 3857 на 4326.

Для точки, применяя ol.proj.fromLonLat(), вы меняете с 4326 на 3857 ( по умолчанию )

Просто используйте 3857 или 4326 для обоих

0 голосов
/ 14 июля 2020

Так что я отправлю правильный код на случай, если он понадобится кому-то другому. Как упомянул @GH (еще раз спасибо), моя проблема заключалась в проекциях смешивания, поэтому я изменил свой код следующим образом:

вместо использования координаты я получаю экстент функции:

var extentFeature = feature.getGeometry().getExtent();

и после того, как я применил к нему тот же самый transformExtent, используемый для карты:

extentFeature = ol.proj.transformExtent(extentFeature, 'EPSG:3857', 'EPSG:4326');

if(!ol.extent.containsExtent(mapExtent, extentFeature)){
   return true;
}

, теперь он работает! : D

...