-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathemt.py
91 lines (77 loc) · 2.62 KB
/
emt.py
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
82
83
84
85
86
87
88
89
90
91
#!flask/bin/python
from flask import Flask, request, render_template,redirect
import json
from math import *
import urllib3
import requests
urllib3.disable_warnings()
app = Flask(__name__)
epicenter = {"lat": 33.4, "lng": -75.5}
def dist(lat1, lon1, lat2, lon2):
R = 6371e3
toRad = pi / 180
lat1, lat2, lon1, lon2 = [float(x) for x in [lat1, lat2, lon1, lon2]]
phi_1 = lat1 * toRad
phi_2 = lat2 * toRad
delta_phi = (lat2-lat1) * toRad
delta_lambda = (lon2-lon1) * toRad
a = sin(delta_phi/2) * sin(delta_phi/2) + cos(phi_1) * cos(phi_2) * sin(delta_lambda/2) * sin(delta_lambda/2)
c = 2 * atan2(sqrt(a), sqrt(1-a))
d = R * c
return d
def updateDistances():
for p in ZONE_ARR:
p['distance'] = dist(p['lat'], p['long'], epicenter['lat'], epicenter['lng'])
try:
with open('data.json') as f:
ZONE_ARR = json.load(f)
except:
ZONE_ARR = []
try:
data = requests.get("https://weather.terrapin.com/wx/storm_show.jsp?area=ATL&storm=06A&dtype=ASCII", verify=False)
_,_,lat,lon,_,_ = [x for x in data.text.splitlines() if '<' not in x and '>' not in x and len(x) > 5][-1].split(', ')
epicenter = {"lat": float(lat), "lng": float(lon)}
print "Got em coordinates!"
except:
pass
updateDistances()
@app.route('/')
def index():
return render_template('index.html')
@app.route('/submitData', methods=['POST'])
def submitData():
obj = {
"name": request.form["name"], # Label
"status": request.form["status"], # Label
"lat": request.form["lat"], # Location
"long": request.form["long"], # Location
"food": request.form["food"], # Numerical
"water": request.form["water"], # Numerical
"capacity": request.form["capacity"], # Numerical
"occupancy": request.form["occupancy"], # Numerical
"electricity": request.form["electricity"], # Boolean
}
obj['distance'] = dist(obj['lat'], obj['long'], epicenter['lat'], epicenter['lng'])
added = 0;i = 0
for p in ZONE_ARR:
if p['name'] == request.form["name"]:
ZONE_ARR[i] = obj
added = 1
break
i=i+1
if not added:
ZONE_ARR.append(obj)
with open('data.json', 'w') as outfile:
json.dump(ZONE_ARR, outfile)
return redirect('/addData')
@app.route('/addData')
def addData():
return render_template('addData.html')
@app.route('/api/listZones')
def listZones():
return json.dumps(ZONE_ARR)
@app.route('/api/getEpicenter')
def getEpicenter():
return json.dumps(epicenter)
if __name__ == "__main__":
app.run(debug=True)