class SimpleRouter(): def __init__(self): self._session = DBSession() def get_route(self, from_point, to_point): #get edges start_edge_id = self.get_nearest_edge_id(from_point) if not start_edge_id: raise Exception('Start point is too far from road!') end_edge_id = self.get_nearest_edge_id(to_point) if not end_edge_id: raise Exception('End point is too far from road!') position = 0.5 # TODO: add proportion getter #request pgr_trsp = select(['id2'], from_obj=func.pgr_trsp(self.get_net_query(), start_edge_id, position, end_edge_id, position, False, False)).alias('trsp') try: route = self._session.query(SimpleRoad.id, SimpleRoad.name, SimpleRoad.name_short, SimpleRoad.road_no, SimpleRoad.road_uid, SimpleRoad.the_geom.ST_AsGeoJSON()).select_from(pgr_trsp).join(SimpleRoad, text('trsp.id2') == SimpleRoad.id).all() except InternalError, err: exc_desc = str(err) if 'Path Not Found' in exc_desc: raise Exception('Path Not Found') else: raise return route
def export_to_geojson_file(path_to_file): with open(path_to_file, 'w') as ways_geojson_file: db_session = DBSession() count = db_session.query(SimpleRoad).count() log(INFO, 'Total ways: %s' % count) log(INFO, 'Get data...') all_ways = db_session.query(SimpleRoad, SimpleRoad.the_geom.ST_AsGeoJSON()).all() # limit(500) # test #create json output_content = { 'type': 'FeatureCollection', 'generator': 'rosavto-data', 'copyright': 'The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.', 'timestamp': datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S'), 'features': [] } handled = 0 for way in all_ways: #create feat feature = { 'type': 'Feature', 'id': way[0].id, 'geometry': json.loads(way[1]), 'properties': {} } #set attrs for prop, val in way[0].as_properties().items(): feature['properties'][prop] = val #add id column explicit feature['properties']['id'] = way[0].id #add to collection output_content['features'].append(feature) #log handled += 1 if handled % 1000 == 0: log(INFO, 'Handled: %s' % handled) json.dump(output_content, ways_geojson_file, indent=4)
class Router: def __init__(self): self._session = DBSession() def get_route(self, from_point, to_point, barrier_points=[]): # get edges start_edge_id = self.get_nearest_edge_id(from_point) if not start_edge_id: raise Exception("Start point is too far from road!") end_edge_id = self.get_nearest_edge_id(to_point) if not end_edge_id: raise Exception("End point is too far from road!") # get barriers edges barrier_edge_ids = [] for bar_point in barrier_points: bar_edge_id = self.get_nearest_edge_id(bar_point) barrier_edge_ids.append(bar_edge_id) position = 0.5 # TODO: add proportion getter # request pgr_trsp = select( ["id2"], from_obj=func.pgr_trsp( self.get_net_query(), start_edge_id, position, end_edge_id, position, True, True, self.get_restrict_query(barrier_edge_ids), ), ).alias("trsp") try: route = ( self._session.query(Way.gid, Way.name, Way.osm_id, Way.length, Way.the_geom.ST_AsGeoJSON()) .select_from(pgr_trsp) .join(Way, text("trsp.id2") == Way.gid) .all() ) except InternalError, err: exc_desc = str(err) if "Path Not Found" in exc_desc: raise Exception("Path Not Found") else: raise return route
def get_value(request): session = DBSession() bridges_db = session.query(Bridge, Bridge.geometry.ST_AsGeoJSON()) result = { 'type': 'FeatureCollection', 'features': [] } for bridge_db in bridges_db: feature = { 'id':bridge_db[0].id, "type": "Feature", "geometry": json.loads(bridge_db[1]), 'properties': bridge_db[0].as_properties() } result['features'].append(feature) return result
def get_value(request): session = DBSession() gas_stations_db = session.query(GasStation, GasStation.geometry.ST_AsGeoJSON()) result = { 'type': 'FeatureCollection', 'features': [] } for gas_station_db in gas_stations_db: feature = { 'id': gas_station_db[0].id, "type": "Feature", "geometry": json.loads(gas_station_db[1]), 'properties': gas_station_db[0].as_properties() } result['features'].append(feature) return result