5

openlayers 3 とベクターレイヤーを含むマップがあります。このベクターレイヤーにサイズ変更するためにマップしたいのですが、これまでのところ、マップの作成中にベクターレイヤーのポイントにアクセスできないため、このベクターの最後のポイントをマップの中心にすることができました。

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
  })
});
4

4 に答える 4

6

ol.source.Vector の範囲に収まらないのはなぜですか?

var source = new ol.source.Vector();

...

map.getView().fitExtent(source.getExtent(), map.getSize());
于 2014-05-01T02:38:01.280 に答える
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());
}
于 2014-01-13T17:32:40.183 に答える
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 
    ] ....
于 2014-11-12T17:27:55.203 に答える