Javascript OL3:缩放到地图上的矢量图层
我有一张带有openlayers 3和矢量层的地图。 我想将贴图调整为该矢量层的大小,但到目前为止,我所能得到的只是将贴图置于该矢量最后一点的中心,因为创建贴图时无法访问矢量层的点:Javascript OL3:缩放到地图上的矢量图层,javascript,openlayers-3,Javascript,Openlayers 3,我有一张带有openlayers 3和矢量层的地图。 我想将贴图调整为该矢量层的大小,但到目前为止,我所能得到的只是将贴图置于该矢量最后一点的中心,因为创建贴图时无法访问矢量层的点: if (trackMap != null) { for (var i = 0; i < trackMap.length; i++) { var trackInfo = trackMap[i]; lat = parseFloat(trackInfo.lat); lon = parse
if (trackMap != null) {
for (var i = 0; i < trackMap.length; i++) {
var trackInfo = trackMap[i];
lat = parseFloat(trackInfo.lat);
lon = parseFloat(trackInfo.lon);
var layergpx = new ol.layer.Vector({
source: new ol.source.Vector({
parser: new ol.parser.GPX(),
url: '${contextRoot}/gps/gpx2' + trackInfo.url
})
});
layers.push(layergpx);
vectorLayers.push(layergpx);
}
}
map = new ol.Map({
controls: ol.control.defaults().extend([
new ol.control.FullScreen()
]),
layers: layers,
renderer: ol.RendererHint.CANVAS,
target: 'map',
view: new ol.View2D({
center: ol.proj.transform([lon, lat], 'EPSG:4326', 'EPSG:3857'),
zoom: 13
})
});
if(trackMap!=null){
对于(var i=0;i
所以。。。经过几天的测试和思考,我解决了这个问题。
不是没有进一步的问题,但是计算服务器端的边界并将它们传输到脚本使它变得更容易
Javascript对于解决问题来说相当简短:
if (minLon != null && minLat != null && maxLon != null && maxLat != null){
var bottomLeft = ol.proj.transform([minLon, minLat], 'EPSG:4326', 'EPSG:3857');
var topRight = ol.proj.transform([maxLon, maxLat], 'EPSG:4326', 'EPSG:3857');
extent = new ol.extent.boundingExtent([bottomLeft,topRight]);
map.getView().fitExtent(extent, map.getSize());
}
为什么不适合ol.source.Vector的范围
var source = new ol.source.Vector();
我有一种方法可以以视图为中心,而不用担心将度数从一个标准转换为另一个标准。我想知道这个把戏是否适用于你。首先从所有源获取扩展数据块。分解其中心并将该中心输入视口:
try {
extentEMRG = geoSrcEMRG.getExtent();
extentWARN = geoSrcWARN.getExtent();
ext2Layers = ol.extent.getIntersection(extentEMRG, extentWARN);
center2Layers = ol.extent.getCenter(ext2Layers);
//alert(center2Layers);
} catch (e) {
alert(e.message);
}
var map = new ol.Map({
view: new ol.View({
center: center2Layers
, zoom: 8
})
, layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
, vLayerWARN
, vLayerEMRG
] ....
从版本ol.View.fitExtent()
替换为ol.View.fit()
是否要调整地图的大小或将其放大?在放大的视图2中尝试FitExtent。我尝试了FitToExtend,但问题是,在调用FitToExtend时,轨迹没有加载扩展必须与地图位于同一坐标系中。哪一个是地图、图层和延伸的坐标系?是的。我尝试了一些其他人发布的东西,在那里他有一个计数器,等待所有层加载完毕,然后放大到一定程度,但这是非常不稳定的。您不能从服务器端获取扩展并用该扩展启动映射吗?fitExtent将不再受支持(),因此您只需使用函数
fit
。但是如果范围不相交怎么办。我想你想要的是工会,而不是十字路口。谢谢你的问题,等我有时间再看一下。有一段时间没看那个项目了!
try {
extentEMRG = geoSrcEMRG.getExtent();
extentWARN = geoSrcWARN.getExtent();
ext2Layers = ol.extent.getIntersection(extentEMRG, extentWARN);
center2Layers = ol.extent.getCenter(ext2Layers);
//alert(center2Layers);
} catch (e) {
alert(e.message);
}
var map = new ol.Map({
view: new ol.View({
center: center2Layers
, zoom: 8
})
, layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
, vLayerWARN
, vLayerEMRG
] ....
var source = new ol.source.Vector();
map.getView().fit(source.getExtent(), map.getSize());