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

How to get the extent of a GPX file to display it on a map (using openalyers)

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

我能够成功加载我的 GPX 文件并将其显示在地图上,但我无法获得它的范围以了解 min/max 纬度和经度以使其在地图上动态适应。

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

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

GPX 文件显示正确,但我无法获取其范围以调整地图大小以进行缩放。我试过:

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());

给出:

[Infinity, Infinity, -Infinity, -Infinity]

VectorLayer 也没有范围:

console.log(GpxVector.getExtent());

给出:

undefined

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

如有任何帮助,我们将不胜感激!

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

  // 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);