Example #1
0
def test_proportion_overlap(loader):
    # Calculate proportion of each parcel overlapped by water.
    parcels = loader.tables.sample.heather_farms
    water = loader.tables.sample.hf_water
    assert not hasattr(parcels, 'proportion_water')
    spatialtoolz.proportion_overlap(parcels, water, 'proportion_water')
    assert hasattr(parcels, 'proportion_water')

    # Build DataFrame from columns of parcels table.
    columns = [parcels.parcel_id, parcels.geom.ST_Area(),
               parcels.proportion_water]
    parcels_df = db_to_df(columns, index_col='parcel_id')

    # Assert that proportion overlap values are between 0 and 1.
    assert parcels_df.proportion_water.dtype == float
    assert not (parcels_df.proportion_water < 0).any()
    assert not (parcels_df.proportion_water > 1).any()

    # Assert that sum of overlapped parcel area is <= total water area.
    with loader.database.session() as sess:
        overlapped_area = sess.query(
            func.sum(parcels.proportion_water * parcels.geom.ST_Area())
        ).scalar()
        water_area = sess.query(func.sum(water.geom.ST_Area())).scalar()
    assert overlapped_area <= water_area
Example #2
0
def test_proportion_overlap(loader):
    # Calculate proportion of each parcel overlapped by water.
    parcels = loader.tables.sample.heather_farms
    water = loader.tables.sample.hf_water
    assert not hasattr(parcels, 'proportion_water')
    spatialtoolz.proportion_overlap(parcels, water, 'proportion_water')
    assert hasattr(parcels, 'proportion_water')

    # Build DataFrame from columns of parcels table.
    columns = [
        parcels.parcel_id,
        parcels.geom.ST_Area(), parcels.proportion_water
    ]
    parcels_df = db_to_df(columns, index_col='parcel_id')

    # Assert that proportion overlap values are between 0 and 1.
    assert parcels_df.proportion_water.dtype == float
    assert not (parcels_df.proportion_water < 0).any()
    assert not (parcels_df.proportion_water > 1).any()

    # Assert that sum of overlapped parcel area is <= total water area.
    with loader.database.session() as sess:
        overlapped_area = sess.query(
            func.sum(parcels.proportion_water *
                     parcels.geom.ST_Area())).scalar()
        water_area = sess.query(func.sum(water.geom.ST_Area())).scalar()
    assert overlapped_area <= water_area
Example #3
0
def test_tag(loader):
    # Tag parcels with block group ID.
    parcels = loader.tables.sample.heather_farms
    bg = loader.tables.sample.hf_bg
    assert not hasattr(parcels, 'bg_id')
    spatialtoolz.tag(parcels, 'bg_id', bg, 'objectid')
    assert hasattr(parcels, 'bg_id')

    # Build DataFrame from parcels and block groups tables.
    parcels_df = db_to_df(parcels, index_col='parcel_id')
    bg_df = db_to_df(bg, index_col='objectid')

    # Assert that all parcels have integer block groups.
    assert not parcels_df.bg_id.isnull().any()
    assert np.issubdtype(parcels_df.bg_id.dtype, int)

    # Assert that there are at least 10 unique parcel block groups.
    parcels_bg_ids = parcels_df.bg_id.unique()
    assert len(parcels_bg_ids) >= 10

    # Assert that parcel block groups are a subset of all block groups.
    assert np.all([bg_id in bg_df.index for bg_id in parcels_bg_ids])
Example #4
0
def test_tag(loader):
    # Tag parcels with block group ID.
    parcels = loader.tables.sample.heather_farms
    bg = loader.tables.sample.hf_bg
    assert not hasattr(parcels, 'bg_id')
    spatialtoolz.tag(parcels, 'bg_id', bg, 'objectid')
    assert hasattr(parcels, 'bg_id')

    # Build DataFrame from parcels and block groups tables.
    parcels_df = db_to_df(parcels, index_col='parcel_id')
    bg_df = db_to_df(bg, index_col='objectid')

    # Assert that all parcels have integer block groups.
    assert not parcels_df.bg_id.isnull().any()
    assert np.issubdtype(parcels_df.bg_id.dtype, int)

    # Assert that there are at least 10 unique parcel block groups.
    parcels_bg_ids = parcels_df.bg_id.unique()
    assert len(parcels_bg_ids) >= 10

    # Assert that parcel block groups are a subset of all block groups.
    assert np.all([bg_id in bg_df.index for bg_id in parcels_bg_ids])
Example #5
0
def test_sim_export(loader):
    # Try importing the UrbanSim simulation framework, otherwise skip test.
    sim = pytest.importorskip('urbansim.sim.simulation')

    # Register input parcels table.
    parcels = loader.tables.sample.heather_farms
    parcels_in = TableFrame(parcels, index_col='gid')
    sim.add_table('parcels_in', parcels_in, copy_col=False)

    # Register output parcels table.
    @sim.table()
    def parcels_out(parcels_in):
        return pd.DataFrame(index=parcels_in.parcel_id)

    # Specify default table for output columns as decorator.
    out = sim.column('parcels_out')

    # Specify some output columns.
    @out
    def apn(apn='parcels_in.puid'):
        return apn.groupby(parcels_in.parcel_id).first().astype(str)

    @out
    def county_id():
        return 13

    @out
    def area(acr='parcels_in.parcel_acr'):
        return 4047. * acr.groupby(parcels_in.parcel_id).median()

    # Register model to export output table to database.
    @sim.model()
    def export(parcels_out):
        schema = loader.tables.sample
        df_to_db(parcels_out.to_frame(), 'parcels_out', schema=schema)

    # Inspect output table.
    column_names = ['apn', 'county_id', 'area']
    parcels_out_df1 = sim.get_table('parcels_out').to_frame()
    assert set(parcels_out_df1.columns) == set(column_names)
    assert parcels_out_df1.county_id.unique() == [13]

    # Export table to database and import back to compare.
    sim.run(['export'])
    parcels_out_table = loader.tables.sample.parcels_out
    parcels_out_df2 = db_to_df(parcels_out_table, index_col='parcel_id')
    pdt.assert_frame_equal(parcels_out_df1[column_names],
                           parcels_out_df2[column_names])