-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapp.py
More file actions
81 lines (63 loc) · 2.81 KB
/
app.py
File metadata and controls
81 lines (63 loc) · 2.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from flask import Flask, request, jsonify, render_template
import requests
from math import radians, sin, cos, sqrt, atan2
app = Flask(__name__)
# Función para calcular la distancia usando la fórmula de Haversine
def calcular_distancia(lat1, lon1, lat2, lon2):
# Radio de la Tierra en kilómetros
R = 6371.0
# Convertir grados a radianes
lat1, lon1, lat2, lon2 = map(radians, [lat1, lon1, lat2, lon2])
# Diferencias
dlat = lat2 - lat1
dlon = lon2 - lon1
# Fórmula de Haversine
a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2
c = 2 * atan2(sqrt(a), sqrt(1 - a))
# Distancia
distancia = R * c
return distancia
# Ruta para servir la página HTML
@app.route('/')
def index():
return render_template('index.html')
# Ruta para obtener los eventos cercanos
@app.route('/obtener_eventos', methods=['POST'])
def obtener_eventos():
data = request.json
mi_lat = data['lat']
mi_lon = data['lon']
# URL de la API de EONET
url = "https://eonet.gsfc.nasa.gov/api/v2.1/events"
# Realizar la solicitud GET
response = requests.get(url)
# Verificar si la solicitud fue exitosa
if response.status_code == 200:
eventos_cercanos = []
data = response.json()
# Recorrer los eventos y calcular la distanca
for evento in data['events']:
# Verificar si el evento tiene la clave 'geometries'
if 'geometries' in evento and evento['geometries']:
# Usar la primera geometría (la posición actual del evento)
for geometria in evento['geometries']:
lat_evento = geometria['coordinates'][1]
lon_evento = geometria['coordinates'][0]
# Calcular la distancia entre tu ubicación y el evento
distancia = calcular_distancia(mi_lat, mi_lon, lat_evento, lon_evento)
if distancia <= 500: # Si el evento está dentro de los 500 km
# Extraer el tipo de evento
tipo_evento = evento.get('categories', [{}])[0].get('title', 'desconocido')
eventos_cercanos.append({
"titulo": evento['title'],
"distancia_km": distancia,
"ubicacion": (lat_evento, lon_evento),
"tipo": tipo_evento, # Agregar el tipo de evento
"link": evento['link'] # Agregar el enlace al evento
})
# Devolver los eventos cercanos
return jsonify(eventos_cercanos), 200
else:
return jsonify({"error": f"Error en la solicitud: {response.status_code}"}), 500
if __name__ == '__main__':
app.run()