簡體   English   中英

打開圖層檢查功能是否在視口中

[英]Open layer check if feature is in viewport

我的目的是僅顯示在我的 map 視口(當前顯示的地圖區域)內具有坐標的要素。

我通過執行以下操作來獲得視口的范圍:

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

然后,在我正在讀取一家商店的元素的循環中,

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;
}*/

但我不知道為什么,結果只是假的,即使在當前顯示的map區域內肯定有點。

我做錯了什么?

您正在混合預測。

對於范圍,您從 3857 更改為 4326。

對於這一點,通過應用ol.proj.fromLonLat() ,您可以從 4326 更改為 3857 (默認值

只需使用 3857 或 4326 即可

所以我會發布正確的代碼以防其他人需要它。 正如@GH(再次感謝)所提到的,我的問題是混合投影,所以我以這種方式更改了我的代碼:

而不是使用坐標,我得到了特征的范圍:

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

在我應用了與 map 相同的 transformExtent 之后:

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

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

現在它可以工作了::D

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM