Ejemplo n.º 1
0
 def get_val_from_uc_db(query):
     try:
         result = sql.read_frame(query, conn)
         return result.values[0][0]
     except:
         conn=psycopg2.connect(conn_string)
         cur = conn.cursor()
         sim.add_injectable('uc_conn', conn)
         sim.add_injectable('uc_cur', cur)
         result = sql.read_frame(query, conn)
         return result.values[0][0]
Ejemplo n.º 2
0
 def get_val_from_uc_db(query):
     try:
         result = sql.read_frame(query, conn)
         return result.values[0][0]
     except:
         conn = psycopg2.connect(conn_string)
         cur = conn.cursor()
         sim.add_injectable('uc_conn', conn)
         sim.add_injectable('uc_cur', cur)
         result = sql.read_frame(query, conn)
         return result.values[0][0]
Ejemplo n.º 3
0
 def exec_sql_uc(query):
     try:
         cur.execute(query)
         conn.commit()
     except:
         conn=psycopg2.connect(conn_string)
         cur = conn.cursor()
         sim.add_injectable('uc_conn', conn)
         sim.add_injectable('uc_cur', cur)
         cur.execute(query)
         conn.commit()
Ejemplo n.º 4
0
def build_networks(parcels):
    st = pd.HDFStore(os.path.join(misc.data_dir(), "osm_sandag.h5"), "r")
    nodes, edges = st.nodes, st.edges
    net = pdna.Network(nodes["x"], nodes["y"], edges["from"], edges["to"],
                       edges[["weight"]])
    net.precompute(3000)
    sim.add_injectable("net", net)
    
    p = parcels.to_frame(parcels.local_columns)
    p['node_id'] = net.get_node_ids(p['x'], p['y'])
    sim.add_table("parcels", p)
Ejemplo n.º 5
0
def build_networks(parcels):
    st = pd.HDFStore(os.path.join(misc.data_dir(), "osm_sandag.h5"), "r")
    nodes, edges = st.nodes, st.edges
    net = pdna.Network(nodes["x"], nodes["y"], edges["from"], edges["to"],
                       edges[["weight"]])
    net.precompute(3000)
    sim.add_injectable("net", net)

    p = parcels.to_frame(parcels.local_columns)
    p['node_id'] = net.get_node_ids(p['x'], p['y'])
    sim.add_table("parcels", p)
Ejemplo n.º 6
0
 def exec_sql_uc(query):
     try:
         cur.execute(query)
         conn.commit()
     except:
         conn = psycopg2.connect(conn_string)
         cur = conn.cursor()
         sim.add_injectable('uc_conn', conn)
         sim.add_injectable('uc_cur', cur)
         cur.execute(query)
         conn.commit()
Ejemplo n.º 7
0
def change_scenario(scenario):
    assert scenario in sim.get_injectable("scenario_inputs"), \
        "Invalid scenario name"
    print "Changing scenario to '%s'" % scenario
    sim.add_injectable("scenario", scenario)
Ejemplo n.º 8
0
def change_store(store_name):
    sim.add_injectable(
        "store",
        pd.HDFStore(os.path.join(misc.data_dir(), store_name), mode="r"))
Ejemplo n.º 9
0
import urbansim.sim.simulation as sim
import os
import pandas as pd
from urbansim.utils import misc


sim.add_injectable("building_sqft_per_job", {
    -1: 400,
    1: 400,
    2: 400,
    3: 400,
    4: 355,
    5: 1161,
    6: 470,
    7: 661,
    8: 960,
    9: 825,
    10: 445,
    11: 445,
    12: 383,
    13: 383,
    14: 383,
})


# this maps building type ids to general building types
# basically just reduces dimensionality
sim.add_injectable("building_type_map", {
    1: "Residential",
    2: "Residential",
    3: "Residential",
Ejemplo n.º 10
0
def buildings_to_uc(buildings):
    year = get_year()
    
    # Export newly predicted buildings (from proforma or Sitespec) to Urban Canvas
    b = buildings.to_frame(buildings.local_columns)
    new_buildings =  b[(b.note=='simulated') | (b.note.str.startswith('Sitespec'))]
    new_buildings = new_buildings[new_buildings.year_built == year]
    new_buildings = new_buildings.reset_index()
    new_buildings = new_buildings.rename(columns = {'development_type_id':'building_type_id'})
    new_buildings['building_sqft'] = new_buildings.residential_sqft + new_buildings.non_residential_sqft
    new_buildings['sqft_per_unit'] =  new_buildings.residential_sqft/new_buildings.residential_units
    del new_buildings['res_price_per_sqft']
    del new_buildings['nonres_rent_per_sqft']
    new_buildings.parcel_id = new_buildings.parcel_id.astype('int32')
    new_buildings.residential_units = new_buildings.residential_units.astype('int32')
    new_buildings.non_residential_sqft = new_buildings.non_residential_sqft.astype('int32')
    new_buildings.stories = new_buildings.stories.astype('int32')
    new_buildings.residential_sqft = new_buildings.residential_sqft.astype('int32')
    new_buildings.building_sqft = new_buildings.building_sqft.fillna(0).astype('int32')
    new_buildings.sqft_per_unit = new_buildings.sqft_per_unit.fillna(0).astype('int32')
    
    # Urban Canvas database connection
    conn_string = "host='urbancanvas.cp2xwchuariu.us-west-2.rds.amazonaws.com' dbname='sandag_testing' user='******' password='******' port=5432"
    
    if 'uc_conn' not in sim._INJECTABLES.keys():
        conn=psycopg2.connect(conn_string)
        cur = conn.cursor()
        
        sim.add_injectable('uc_conn', conn)
        sim.add_injectable('uc_cur', cur)
        
    else:
        conn = sim.get_injectable('uc_conn')
        cur = sim.get_injectable('uc_cur')
        
    def exec_sql_uc(query):
        try:
            cur.execute(query)
            conn.commit()
        except:
            conn=psycopg2.connect(conn_string)
            cur = conn.cursor()
            sim.add_injectable('uc_conn', conn)
            sim.add_injectable('uc_cur', cur)
            cur.execute(query)
            conn.commit()
            
    def get_val_from_uc_db(query):
        try:
            result = sql.read_frame(query, conn)
            return result.values[0][0]
        except:
            conn=psycopg2.connect(conn_string)
            cur = conn.cursor()
            sim.add_injectable('uc_conn', conn)
            sim.add_injectable('uc_cur', cur)
            result = sql.read_frame(query, conn)
            return result.values[0][0]
        
    max_bid = get_val_from_uc_db("select max(building_id) FROM building where building_id<100000000;")
    new_buildings.building_id = np.arange(max_bid+1, max_bid+1+len(new_buildings))

    if 'projects_num' not in sim._INJECTABLES.keys(): 
        exec_sql_uc("INSERT INTO scenario(id, name, type) select nextval('scenario_id_seq'), 'Run #' || cast(currval('scenario_id_seq') as character varying), 1;")
        nextval = get_val_from_uc_db("SELECT MAX(ID) FROM SCENARIO WHERE ID < 100000;")
        sim.add_injectable('projects_num', nextval)
        
        exec_sql_uc("INSERT INTO scenario_project(scenario, project) VALUES(%s, 1);" % nextval)
        exec_sql_uc("INSERT INTO scenario_project(scenario, project) VALUES(%s, %s);" % (nextval,nextval))
        
    else:
        nextval = sim.get_injectable('projects_num')

    nextval = '{' + str(nextval) + '}'
    new_buildings['projects'] = nextval

    valid_from = '{' + str(year) + '-1-1}'
    new_buildings['valid_from'] = valid_from
    print 'Exporting %s buildings to Urbancanvas database for project %s and year %s.' % (len(new_buildings),nextval,year)
    output = cStringIO.StringIO()
    new_buildings.to_csv(output, sep='\t', header=False, index=False)
    output.seek(0)
    cur.copy_from(output, 'building', columns =tuple(new_buildings.columns.values.tolist()))
    conn.commit()
    
Ejemplo n.º 11
0
def buildings_to_uc(buildings):
    year = get_year()

    # Export newly predicted buildings (from proforma or Sitespec) to Urban Canvas
    b = buildings.to_frame(buildings.local_columns)
    new_buildings = b[(b.note == 'simulated') |
                      (b.note.str.startswith('Sitespec'))]
    new_buildings = new_buildings[new_buildings.year_built == year]
    new_buildings = new_buildings.reset_index()
    new_buildings = new_buildings.rename(
        columns={'development_type_id': 'building_type_id'})
    new_buildings[
        'building_sqft'] = new_buildings.residential_sqft + new_buildings.non_residential_sqft
    new_buildings[
        'sqft_per_unit'] = new_buildings.residential_sqft / new_buildings.residential_units
    del new_buildings['res_price_per_sqft']
    del new_buildings['nonres_rent_per_sqft']
    new_buildings.parcel_id = new_buildings.parcel_id.astype('int32')
    new_buildings.residential_units = new_buildings.residential_units.astype(
        'int32')
    new_buildings.non_residential_sqft = new_buildings.non_residential_sqft.astype(
        'int32')
    new_buildings.stories = new_buildings.stories.astype('int32')
    new_buildings.residential_sqft = new_buildings.residential_sqft.astype(
        'int32')
    new_buildings.building_sqft = new_buildings.building_sqft.fillna(0).astype(
        'int32')
    new_buildings.sqft_per_unit = new_buildings.sqft_per_unit.fillna(0).astype(
        'int32')

    # Urban Canvas database connection
    conn_string = "host='urbancanvas.cp2xwchuariu.us-west-2.rds.amazonaws.com' dbname='sandag_testing' user='******' password='******' port=5432"

    if 'uc_conn' not in sim._INJECTABLES.keys():
        conn = psycopg2.connect(conn_string)
        cur = conn.cursor()

        sim.add_injectable('uc_conn', conn)
        sim.add_injectable('uc_cur', cur)

    else:
        conn = sim.get_injectable('uc_conn')
        cur = sim.get_injectable('uc_cur')

    def exec_sql_uc(query):
        try:
            cur.execute(query)
            conn.commit()
        except:
            conn = psycopg2.connect(conn_string)
            cur = conn.cursor()
            sim.add_injectable('uc_conn', conn)
            sim.add_injectable('uc_cur', cur)
            cur.execute(query)
            conn.commit()

    def get_val_from_uc_db(query):
        try:
            result = sql.read_frame(query, conn)
            return result.values[0][0]
        except:
            conn = psycopg2.connect(conn_string)
            cur = conn.cursor()
            sim.add_injectable('uc_conn', conn)
            sim.add_injectable('uc_cur', cur)
            result = sql.read_frame(query, conn)
            return result.values[0][0]

    max_bid = get_val_from_uc_db(
        "select max(building_id) FROM building where building_id<100000000;")
    new_buildings.building_id = np.arange(max_bid + 1,
                                          max_bid + 1 + len(new_buildings))

    if 'projects_num' not in sim._INJECTABLES.keys():
        exec_sql_uc(
            "INSERT INTO scenario(id, name, type) select nextval('scenario_id_seq'), 'Run #' || cast(currval('scenario_id_seq') as character varying), 1;"
        )
        nextval = get_val_from_uc_db(
            "SELECT MAX(ID) FROM SCENARIO WHERE ID < 100000;")
        sim.add_injectable('projects_num', nextval)

        exec_sql_uc(
            "INSERT INTO scenario_project(scenario, project) VALUES(%s, 1);" %
            nextval)
        exec_sql_uc(
            "INSERT INTO scenario_project(scenario, project) VALUES(%s, %s);" %
            (nextval, nextval))

    else:
        nextval = sim.get_injectable('projects_num')

    nextval = '{' + str(nextval) + '}'
    new_buildings['projects'] = nextval

    valid_from = '{' + str(year) + '-1-1}'
    new_buildings['valid_from'] = valid_from
    print 'Exporting %s buildings to Urbancanvas database for project %s and year %s.' % (
        len(new_buildings), nextval, year)
    output = cStringIO.StringIO()
    new_buildings.to_csv(output, sep='\t', header=False, index=False)
    output.seek(0)
    cur.copy_from(output,
                  'building',
                  columns=tuple(new_buildings.columns.values.tolist()))
    conn.commit()
Ejemplo n.º 12
0
def get_run_no():
    if 'run_no' not in sim.list_injectables():
        sim.add_injectable("run_no", misc.get_run_number())
    return sim.get_injectable("run_no")
Ejemplo n.º 13
0
def change_scenario(scenario):
    assert scenario in sim.get_injectable("scenario_inputs"), \
        "Invalid scenario name"
    print "Changing scenario to '%s'" % scenario
    sim.add_injectable("scenario", scenario)
Ejemplo n.º 14
0
def change_store(store_name):
    sim.add_injectable("store",
                       pd.HDFStore(os.path.join(misc.data_dir(),
                                                store_name), mode="r"))
Ejemplo n.º 15
0
import urbansim.sim.simulation as sim
import os
import pandas as pd
from urbansim.utils import misc

sim.add_injectable(
    "building_sqft_per_job", {
        -1: 400,
        1: 400,
        2: 400,
        3: 400,
        4: 355,
        5: 1161,
        6: 470,
        7: 661,
        8: 960,
        9: 825,
        10: 445,
        11: 445,
        12: 383,
        13: 383,
        14: 383,
    })

# this maps building type ids to general building types
# basically just reduces dimensionality
sim.add_injectable(
    "building_type_map", {
        1: "Residential",
        2: "Residential",
        3: "Residential",