Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将地图的当前视口作为几何体、边界框或wkt从OpenLayers中取出?_Javascript_Openlayers_Latitude Longitude - Fatal编程技术网

Javascript 如何将地图的当前视口作为几何体、边界框或wkt从OpenLayers中取出?

Javascript 如何将地图的当前视口作为几何体、边界框或wkt从OpenLayers中取出?,javascript,openlayers,latitude-longitude,Javascript,Openlayers,Latitude Longitude,我试图找到一些我应该在哪里搜索这个主题的提示,但我什么也没找到——我花了很多时间在这个问题上 我还试图从OpenLayers地图中获取当前显示视口的当前坐标,以便仅添加当前视口当前边界框中的这些向量。对于OpenLayers 2: Map.getExtent() …将返回一个边界,然后您可以使用该边界以多种方式获取横向/纵向坐标: 理想情况下,您可以将向量转换为几何体对象,并使用Bounds.intersectBounds()对照Map.getExtent()检查它们是否在当前视口中 对于Op

我试图找到一些我应该在哪里搜索这个主题的提示,但我什么也没找到——我花了很多时间在这个问题上

我还试图从OpenLayers地图中获取当前显示视口的当前坐标,以便仅添加当前视口当前边界框中的这些向量。

对于OpenLayers 2:

Map.getExtent()
…将返回一个边界,然后您可以使用该边界以多种方式获取横向/纵向坐标:

理想情况下,您可以将向量转换为几何体对象,并使用Bounds.intersectBounds()对照Map.getExtent()检查它们是否在当前视口中

对于OpenLayers 3:

ol.Map.getView().calculateExtent(map.getSize())
…将返回坐标数组,表示范围的边界框。

对于openlayers 5.3

olmap.getView().calculateExtent(olmap.getSize());
openlayers 5.3的可运行代码如下:

(V6.5.0有相同的关于使用
getView和getSize
的API文档,上面的代码也应该与之配合使用。)

//导入模块
常量映射=ol.Map;
const View=ol.View;
const TileLayer=ol.layer.Tile;
const VectorLayer=ol.layer.Vector;
const fromlont=ol.proj.fromlont;
const OSM=ol.source.OSM;
const VectorSource=ol.source.Vector;
常数叠加=ol.Overlay;
const Style=ol.Style.Style;
常量填充=ol.style.Fill;
const Text=ol.style.Text;
//基本基本图层:光栅
var rasterLayer=新的Tillelayer({
资料来源:新OSM()
});
//使用底图创建主地图
var mapcenter=[100.5330981,13.7364029];
var olmap=新映射({
层:[光栅层]/*可以在此处添加更多层,或在后续步骤中添加*/,
目标:document.getElementById(“map1”),
视图:新视图({
中心:fromLonLat(地图中心),
缩放:17
})
});
//添加eng chula标记
常数engchula=[100.5330981,13.7364029];
var marker1=新覆盖({
职位:fromLonLat(engchula),
定位:“居中”,
元素:document.getElementById(“marker1”),
stopEvent:false
});
//“Eng chula”标签
var engchula1=新覆盖层({
职位:fromLonLat(engchula),
元素:document.getElementById(“engchula1”)
});
//将覆盖添加到“olmap”
olmap.addOverlay(marker1);
olmap.addOverlay(engchula1);
//演示.getSize()的使用
var size=olmap.getSize()//单位:像素;列x行
log(“getSize(像素):”+大小)//2个数字
//通过getView()获取“区段”
var extent=olmap.getView().calculateExtent(olmap.getSize());
log(“范围,LL_x:+Extent[0])//左边
console.log(“范围,LL_y:+Extent[1])//底部
console.log(“范围,UR_x:+Extent[2])//正确的
console.log(“范围,UR_y:+范围[3])//顶部
/*
状态:ok
*/
#映射1{
宽度:70%;
高度:500px;
}
#marker1{
宽度:25px;
高度:25px;
边框:2px实心#088;
边界半径:10px;
背景颜色:耐火砖;
不透明度:0.75;
}

带有Geojson数据的Openlayers v5.3.0 Web地图
:
找到“Eng_Chula”,然后单击它


谢谢!这很有效。我现在这样使用它:
this.map.getExtent().toGeometry().toString()
它返回类似于
多边形的东西((-8852235.9398912-2760000137764.060109-2760000137764.060109-2760000137764.060109-11370000,-8852235.9398912-2760000))
我对地理信息系统有点不熟悉,但是数字8852235-2760000,。。。看起来不像是横向/纵向值?当我得到地图的范围时,我得到了类似的结果。lat/long值在-90/90和-180/180范围内吗?这个答案帮助我解决了这个问题:谢谢,我认为openlayers 3有一个轻微的打字错误,这对我很有用
map.getView().calculateExtent(map.getSize())
使用原始示例中的
transformExtent
函数:对于ol3,请参见