openMeteo.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import requests
  2. import json
  3. import time
  4. def alt(longitude, latitude):
  5. if len(longitude) != len(latitude):
  6. print ("Les tableaux de longitude et de latitude doivent avoir la même taille.")
  7. return "error"
  8. total_elements = len(longitude)
  9. batch_size = 100
  10. start = 0
  11. res=[]
  12. i=0
  13. while start < total_elements:
  14. print(i,"/",total_elements/batch_size)
  15. i=i+1
  16. end = min(start + batch_size, total_elements)
  17. longitude_batch = longitude[start:end]
  18. latitude_batch = latitude[start:end]
  19. res=res+req(longitude_batch, latitude_batch, len(longitude_batch))
  20. # Mettez à jour l'indice de début pour le prochain lot
  21. start = end
  22. return res
  23. def req(latitude, longitude,nb):
  24. longi=""
  25. latti=""
  26. for i in range(nb):
  27. if i > 0:
  28. longi += ","
  29. latti += ","
  30. longi += str(longitude[i])
  31. latti += str(latitude[i])
  32. url = f'https://api.open-meteo.com/v1/elevation?latitude={latti}&longitude={longi}'
  33. rd=0
  34. while(1):
  35. print(rd)
  36. rd=rd+1
  37. try:
  38. response = requests.get(url)
  39. if response.status_code == 200:
  40. try:
  41. data = json.loads(response.text)
  42. if 'elevation' in data:
  43. elevation = data['elevation']
  44. return elevation
  45. else:
  46. print("Impossible d'obtenir l'altitude pour les coordonnées spécifiées.")
  47. except:
  48. print(url)
  49. print(latitude,",",longitude)
  50. time.sleep(1)
  51. else:
  52. print(f"Erreur de réponse de l'API. Code de statut : {response.status_code}")
  53. except requests.exceptions.RequestException as e:
  54. print(f"Une erreur s'est produite lors de la requête : {e}")