From a0c2cae4cb8f910c7146e2a3228cd0b6675c1681 Mon Sep 17 00:00:00 2001 From: J Kishore kumar Date: Sun, 21 Aug 2011 20:38:51 +0530 Subject: [PATCH] Created Chennai rail demo; Updated nonsc code --- chennai_rail_helper.py | 7 ++++ mtc_nonsc_dataloader/loader.sql | 25 ++++++------ run.py | 60 ++++++++++++++++++++++++++++- static/img/thumbs/chennai-rail.png | Bin 0 -> 48511 bytes static/js/index.js | 3 ++ templates/chennai-rail.html | 2 + templates/index.html | 5 +++ 7 files changed, 90 insertions(+), 12 deletions(-) create mode 100644 chennai_rail_helper.py create mode 100644 static/img/thumbs/chennai-rail.png create mode 100644 templates/chennai-rail.html diff --git a/chennai_rail_helper.py b/chennai_rail_helper.py new file mode 100644 index 0000000..418173c --- /dev/null +++ b/chennai_rail_helper.py @@ -0,0 +1,7 @@ +def find_nearest_chennai_rail_stop(cur, lonlat): + point = "POINT(" + lonlat.replace(',', ' ') + ")" + cur.execute("select stop_id from chennai_rail.stops where ST_DWithin(the_geom,st_geomfromtext(%s,4326),0.036) order by ST_Distance(the_geom, st_geomfromtext(%s,4326)) limit 1", (point, point)) + row = cur.fetchone() + if row != None: + return row[0] + return None diff --git a/mtc_nonsc_dataloader/loader.sql b/mtc_nonsc_dataloader/loader.sql index b3c8e69..cf4df76 100644 --- a/mtc_nonsc_dataloader/loader.sql +++ b/mtc_nonsc_dataloader/loader.sql @@ -2,12 +2,15 @@ drop schema MTC_NonSc cascade; create schema MTC_NonSc; +CREATE DOMAIN MTC_NonSc.wgs84_lat AS double precision CHECK(VALUE >= -90 AND VALUE <= 90); +CREATE DOMAIN MTC_NonSc.wgs84_lon AS double precision CHECK(VALUE >= -180 AND VALUE <= 180); + create table MTC_NonSc.Stops ( - stop_id text primary key, - stop_name text, - stop_lat wgs84_lat not null, - stop_lon wgs84_lon not null + stop_id text primary key, + stop_name text, + stop_lat MTC_NonSc.wgs84_lat not null, + stop_lon MTC_NonSc.wgs84_lon not null ); create table MTC_NonSc.Trips @@ -18,18 +21,18 @@ create table MTC_NonSc.Trips create table MTC_NonSc.Stop_Times ( - trip_id text not null references MTC_NonSc.Trips, - stop_id text not null references MTC_NonSc.Stops, - arrival_time gtfstime not null, - departure_time gtfstime not null, + trip_id text not null references MTC_NonSc.Trips, + stop_id text not null references MTC_NonSc.Stops, + arrival_time interval not null, + departure_time interval not null, stop_sequence integer not null ); create table MTC_NonSc.Frequencies ( trip_id text not null, - start_time gtfstime not null, - end_time gtfstime not null, + start_time interval not null, + end_time interval not null, headway_secs integer not null ); @@ -57,7 +60,7 @@ delete from MTC_Nonsc.Frequencies where trip_id not in (select trip_id from MTC_ -- Adding Stop_Times from StopTimes insert into MTC_NonSc.Stop_Times(trip_id, stop_id, arrival_time, departure_time, stop_sequence) -select trip_id, stop_id, secs_to_gtfstime(stop_time), secs_to_gtfstime(stop_time), sequence from StopTimes; +select trip_id, stop_id, stop_time * '1 second'::INTERVAL, stop_time * '1 second'::INTERVAL, sequence from StopTimes; -- Adding GIS column to Stops select AddGeometryColumn('mtc_nonsc', 'stops', 'the_geom', 4326, 'POINT', 2); diff --git a/run.py b/run.py index 3818090..7caadfc 100644 --- a/run.py +++ b/run.py @@ -6,6 +6,8 @@ from dbhelper import connect_to_DB, find_nearest_node from mtchelper import find_nearest_mtc_stage from mtc_nonsc_helper import find_nearest_mtc_nonsc_stop +from chennai_rail_helper import find_nearest_chennai_rail_stop +from datetime import datetime, timedelta app = Flask(__name__) app.config.from_object('configuration') @@ -89,7 +91,7 @@ def mtc_nonsc_route_kml(): finish_stage = find_nearest_mtc_nonsc_stop(g.cur, finish_location) g.cur.execute(" \ SELECT changeover_id FROM non_scheduled_route( \ - '%s', '%s', '%s')" % ('MTC_NonSc', start_stage, finish_stage)) + '%s', '%s', '%s')" % ('mtc_nonsc', start_stage, finish_stage)) changeovers = [str(x[0]) for x in g.cur.fetchall()] if len(changeovers) == 0: return render_template('route.kml', kml_data=None) @@ -139,6 +141,58 @@ def mtc_nonsc_route_kml(): return render_template('route.kml', kml_data=kml_data + kml_data2) +def Placemark(label, kml_text): + return "\n\n" \ + + kml_text + "\n" + +@app.route("/chennai-rail_route.kml") +def chennai_rail_route_kml(): + if not "start_location" in request.args or not "finish_location" in request.args: + return render_template('route.kml', kml_data=None) + start_location = request.args["start_location"] + finish_location = request.args["finish_location"] + start_stop = find_nearest_chennai_rail_stop(g.cur, start_location) + finish_stop = find_nearest_chennai_rail_stop(g.cur, finish_location) + query_time = datetime.now() + g.cur.execute(" \ + SELECT stop_id, trip_id, waiting_time, travel_time, ST_AsKML(the_point) \ + FROM gtfs_route_with_schema( 'chennai_rail', '%s', '%s', '%s')" % ( + start_stop, + finish_stop, + query_time.isoformat())) + route_data = g.cur.fetchall() + if len(route_data) == 0: + return render_template('route.kml', kml_data=None) + kml_rows = [] + kml_data2 = '' + stop_time = query_time + for row_data in route_data[:-1]: + g.cur.execute(""" + SELECT + ST_ASKML(ST_Makeline(iq.the_geom)) + FROM (SELECT st.trip_id, s.the_geom + FROM + chennai_rail.Stops s, + chennai_rail.Stop_Times st + WHERE s.stop_id = st.stop_id + AND st.trip_id = '%s' + ORDER BY st.stop_sequence) AS iq + GROUP BY iq.trip_id + """ % (row_data[1]) + ) + trip_geom = g.cur.fetchone()[0] + kml_rows.append(("%s(waiting=%s, travel=%s)" % (row_data[1], row_data[2], row_data[3]), trip_geom)) + stop_label = "%s %s" %(row_data[0], stop_time.strftime('%d-%b-%Y \ + %H:%M:%S')) + stop_time += row_data[2] + row_data[3] + kml_data2 += Placemark(stop_label, row_data[4]) + stop_label = "%s %s" %(route_data[-1][0], stop_time.strftime('%d-%b-%Y \ + %H:%M:%S')) + kml_data2 += Placemark(stop_label, route_data[-1][4]) + kml_data = '\n'.join([Placemark(x[0], x[1]) for x in kml_rows]) + + return render_template('route.kml', kml_data=kml_data + kml_data2) + @app.route("/routing.js", methods=["GET"]) def routing_js(): if not "start_location" in request.args or not "finish_location" in request.args: @@ -164,5 +218,9 @@ def mtc_dijkstra(): def mtc_nonsc(): return render_template('mtc-nonsc.html') +@app.route("/chennai-rail") +def chennai_rail(): + return render_template('chennai-rail.html') + if __name__ == "__main__": app.run() diff --git a/static/img/thumbs/chennai-rail.png b/static/img/thumbs/chennai-rail.png new file mode 100644 index 0000000000000000000000000000000000000000..96f94e72918fc91818804af9ea10bf44ab25a0c2 GIT binary patch literal 48511 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 - nonsc MTC - Nonscheduled +
+
Chennai rail
+Chennai Rail +
{% endblock %}