Как получить размер файла GPX для отображения его на карте (с помощью openalyers) - PullRequest
0 голосов
/ 06 мая 2019

Я работаю на примере исходного кода GPX openlayers 5.x, доступного по адресу https://openlayers.org/en/latest/examples/gpx.html

Я могу успешно загрузить свой файл 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);

Файл 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 или хотя бы к его точкам, чтобы я сам мог рассчитать его?

Буду признателен за любую помощь!

1 Ответ

1 голос
/ 06 мая 2019

Источник не будет загружен, если слой не виден на карте.Если вы установите произвольный центр открытия и увеличите масштаб изображения, источник загрузится, а затем вы можете установить:

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