打开图层检查功能是否在视口中
Open layer check if feature is in viewport
我的目的是仅显示在我的地图视口(当前显示的地图区域)内具有坐标的要素。
我通过以下方式获得视口的范围:
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;
}*/
但不知道为什么,即使确定当前显示的地图区域内有点,结果也只是错误的。
我哪里做错了?
你在混合预测。
对于范围,你从3857改成4326。
对于这一点,通过应用 ol.proj.fromLonLat()
,您可以将 4326 更改为 3857(default)
两者都使用 3857 或 4326
所以我会 post 正确的代码,以防其他人可能需要它。正如@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
我的目的是仅显示在我的地图视口(当前显示的地图区域)内具有坐标的要素。
我通过以下方式获得视口的范围:
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;
}*/
但不知道为什么,即使确定当前显示的地图区域内有点,结果也只是错误的。
我哪里做错了?
你在混合预测。
对于范围,你从3857改成4326。
对于这一点,通过应用 ol.proj.fromLonLat()
,您可以将 4326 更改为 3857(default)
两者都使用 3857 或 4326
所以我会 post 正确的代码,以防其他人可能需要它。正如@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