Фильтрация Geo JSON по значению свойства time - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть Geo JSON с погодными данными примерно с 140 метеостанций. Проблема состоит в том, что каждая станция указана в списке 3 раза, поскольку Geo JSON содержит данные из 3 различных показаний для каждой станции: 3 часа чтения go, 2 часа чтения go и 1 час чтения go , В URL, откуда я получаю этот Geo Json, перечислены данные в следующей последовательности: -3h данные для всех станций, затем -2h данные для всех станций и, наконец, -1h данные. Эта последовательность показана на рисунке, и, как вы можете видеть, одна и та же станция указана 3 раза (функции # 0, # 142 и # 283) в соответствии с часом показаний. Также можно видеть, что формат properties time равен 2020-02-22T21:00:00, где минуты и секунды всегда 00:00 для -3h, -2h и -1h, поскольку показания выполняются в час.

GeoJSON with same station listed 3 times

Когда я запускаю скрипт, он просто показывает мне данные из -3h, вероятно, потому что это первая дата, которую он получает в последовательности.

Вот основная часть скрипта, где я получаю температуру:

<script>
//Get current date-time withh same format GeoJSON uses 
var curdt = new Date().toJSON().substring(0,19); 

map.on('load', function() {
map.addSource('points', {
'type': 'geojson',
'data': 
'https://api.ipma.pt/open-data/observation/meteorology/stations/obs-surface.geojson',
 });
 map.addLayer({
 'id': 'Temp (ºC)',
 'type': 'symbol',
 'source': 'points',

  // filter data by properties time
  "filter": [
  "<=",
  [ "get", "time" ], curdt
  ],

 'layout': {
 "visibility": "none",
 'text-field': ['get', 'temperatura'],
 'text-font': ['Open Sans Semibold', 'Arial Unicode MS Bold'],
 'text-offset': [0, 0],
 'text-anchor': 'top',
 "text-size": 15
 });

  ---
 </script>

Я хотел бы отфильтровать (игнорировать) более старые данные и просто получить данные о погоде -1h. Например, если current date-time равно 2020-02-22T23:18:35, я хотел бы получить данные Geo JSON для всех станций, имеющих properties->time: 2020-02-22T22:00:00.

У меня очень мало знаний о JS, и я попытался адаптировать один параметр фильтра, и он работает для time <= current time, но как я могу заставить его работать для time = (current time - 1h)?

Есть ли способ отфильтровать только данные -1h Geo JSON и отобразить эти значения вместо -3h значений, которые он отображает сейчас? Спасибо.

1 Ответ

0 голосов
/ 27 февраля 2020

Проблема решена путем фильтрации propreties time для отображения только -1h данных вместо -3h данных

 <script>
 //subtract one hour from current time
 var subtracthour = new Date();
 subtracthour.setHours(subtracthour.getHours()-1);
 // Can also subtrat extra minuts if needed
 //subtracthour.setMinutes(subtracthour.getMinutes()-15);

 // Convert to ISO Format used in this GeoJSON (2020-02-28T15:31:25)
 var dt = new Date(subtracthour).toJSON().substring(0,19); 

 // Apply the filter to get only "-1h" data 
 map.addLayer({
 'id': 'Temp (ºC)',
 'type': 'symbol',
 'source': 'points',

 'filter': [
 '>=',
 [ 'get', 'time' ], dt
 ],

 'layout': {
 'visibility": 'none',
 'text-field': ['get', 'temperatura'],
 'text-font': ['Open Sans Semibold', 'Arial Unicode MS Bold'],
 'text-offset': [0, 0],
 'text-anchor': 'top',
 'text-size': 15
 },

 ----
 </script>
...