[英]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.