我有一个带有openlayers 3和矢量图层的地图。 我想映射以调整大小到这个矢量图层,但到目前为止,我能够得到的是将地图置于此向量的最后一个点上,因为在创建地图时无法访问矢量图层的点: / p>
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
})
});
答案 0 :(得分:6)
为什么不适合ol.source.Vector的范围?
var source = new ol.source.Vector();
...
map.getView().fitExtent(source.getExtent(), map.getSize());
答案 1 :(得分:5)
从版本3.7.0 ol.View.fitExtent()
替换为ol.View.fit()
var source = new ol.source.Vector();
map.getView().fit(source.getExtent(), map.getSize());
答案 2 :(得分:1)
所以...经过几天的测试和思考后,我解决了这个问题。 并非没有进一步的问题,但计算边界服务器端并将它们传输到脚本使它更容易。
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());
}
答案 3 :(得分:0)
我有一种方法可以实现视图居中,而不必担心将度数从一个标准转换为另一个标准。想知道这个技巧适用于你。您首先从所有来源获取范围。将其中心分解并输入中心到视口:
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
] ....