-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhttp_server.py
More file actions
103 lines (98 loc) · 3.67 KB
/
http_server.py
File metadata and controls
103 lines (98 loc) · 3.67 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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import SocketServer
import BaseHTTPServer
import json
from urlparse import urlparse, parse_qs
from GTOPO30 import getElevation, getElevationProfile
from find_station_neighbors import getFilteredNeighbors, stations
PORT = 9000
FEET_PER_METER = 3.28084
class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_HEAD(s):
s.send_response(200)
s.send_header("Content-type", "text/html")
s.end_headers()
def do_GET(s):
"""Respond to a GET request."""
req = urlparse(s.path)
if req.path.startswith('/index.html'):
s.send_response(200)
s.send_header("Content-type", "text/html")
s.end_headers()
s.wfile.write(open('public/index.html').read())
elif req.path.startswith('/elevationProfile'):
query = parse_qs(req.query)
try:
elevProfile = getElevationProfile(
float(query['lon0'][0]),
float(query['lat0'][0]),
float(query['lon1'][0]),
float(query['lat1'][0]))
except:
s.send_response(500)
return
max = -9999
min = 9000000
for x,y,z in elevProfile:
if z > max: max = z
if z > -999 and z < min: min = z
elevProfile = [{"lon":x,"lat":y,"elev":float(z)} for x,y,z in elevProfile]
resp = {
"maxElevation": float(max),
"minElevation": float(min),
"units": 'meters',
"points": elevProfile
}
s.send_response(200)
s.send_header("Content-type", "application/json")
s.end_headers()
s.wfile.write(json.dumps(resp))
elif req.path.startswith('/getElevation'):
query = parse_qs(req.query)
try:
lon,lat=(query['lon'][0],query['lat'][0])
elev = getElevation(lon,lat)
except:
s.send_response(500)
return
resp = {
"elev": float(elev),
"lat": float(lat),
"lon": float(lon),
"units": 'meters'
}
s.send_response(200)
s.send_header("Content-type", "application/json")
s.end_headers()
s.wfile.write(json.dumps(resp))
elif req.path.startswith('/getFilteredNeighbors'):
query = parse_qs(req.query)
try:
stationId = query['stationId'][0]
topoThresh = query['topoThresh']
if len(topoThresh)>0: topoThresh = float(topoThresh[0])/FEET_PER_METER
elevThresh = query['elevThresh']
if len(elevThresh)>0: elevThresh = float(elevThresh[0])/FEET_PER_METER
station = stations.find_one({
"_id":stationId
},{
"loc":1
})
except:
s.send_response(500)
return
if station:
filteredNeighbors, neighbors = getFilteredNeighbors(station,topoThresh=topoThresh,elevThresh=elevThresh)
resp={"station":station,
"filteredNeighbors":filteredNeighbors,
"neighbors":neighbors
}
else: resp={}
s.send_response(200)
s.send_header("Content-type", "application/json")
s.end_headers()
s.wfile.write(json.dumps(resp))
else:
s.send_response(500)
httpd = SocketServer.TCPServer(("", PORT), MyHandler)
print "serving at port", PORT
httpd.serve_forever()