如何获取GPX文件的范围以将其显示在地图上(使用openalyers)

时间:2019-05-06 15:00:11

标签: openlayers openlayers-5

我正在研究https://openlayers.org/en/latest/examples/gpx.html上的openlayers 5.x的GPX源示例

我能够成功加载我的GPX文件并将其显示在地图上,但是我无法获得它的范围来知道最小/最大纬度和经度以使其动态地适应地图。

这是我的代码(与示例相同):

run.py

GPX文件可以正确显示,但是我无法获得调整地图大小以进行缩放的程度。我尝试过:

var GpxVector = new VectorLayer({
   source: new VectorSource({
      url: 'https://host.domain.com/filename.gpx',
      format: new GPX(),
   }),
   style: function(feature) {
      return GpxStyle[feature.getGeometry().getType()];
   }
});

map.addLayer(GpxVector);

没有任何可解析的功能:

console.log(GpxVector.getSource().getFeatures());

请注意,来源已在此处,并在地图上正确显示:

length: 0
__proto__: Array(0)

给予:

console.log(GpxVector.getSource());

但没有范围:

c {disposed_: false, pendingRemovals_: {…}, dispatching_: {…}, listeners_: {…}, revision_: 0, …}

给予:

console.log(GpxVector.getSource().getExtent());

VectorLayer也没有范围:

[Infinity, Infinity, -Infinity, -Infinity]

给予:

console.log(GpxVector.getExtent());

有人可以帮助我,告诉我如何访问GPX文件的范围或至少它的要点,以便我自己计算吗?

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

除非图层在地图上可见,否则不会加载源。如果您设置任意的打开中心并放大视图,则源将被加载,然后您可以安装:

  // fit when the source loads
  GpxVector.getSource().on('addfeature', function(){
      map.getView().fit(GpxVector.getSource().getExtent());
  });

  // open the view to force a load
  map.getView().setCenter([0, 0]);
  map.getView().setZoom(0);