Source code for tobler.dasymetric.masked_area_interpolate
from ..area_weighted import _slow_area_interpolate, area_tables_raster
from ..area_weighted.vectorized_raster_interpolation import *
[docs]def masked_area_interpolate(
source_df,
target_df,
raster="nlcd_2011",
codes=None,
force_crs_match=True,
extensive_variables=None,
intensive_variables=None,
allocate_total=True,
tables=None,
):
"""Interpolate data between two polygonal datasets using an auxiliary raster to mask out uninhabited land.
Parameters
----------
source_df : geopandas.GeoDataFrame
source data to be converted to another geometric representation.
target_df : geopandas.GeoDataFrame
target geometries that will form the new representation of the input data
raster : str
path to raster file that contains ancillary data.
alternatively a user can pass `ncld_2001` or `nlcd_2011` to use built-in data from the
National Land Cover Database
codes : list of ints
list of pixel values that should be considered part of the mask (the default is None).
If no codes are passed, this defaults to [21, 22, 23, 24] which are the developed land use
codes from the NLCD data
force_crs_match : bool
whether to force the input and target data to share the same CRS (the default is True).
extensive_variables : list
Columns of the input dataframe containing extensive variables to interpolate
intensive_variables : list
Columns of the input dataframe containing intensive variables to interpolate
allocate_total : bool
whether to allocate the total from the source geometries (the default is True).
tables : tuple of two numpy.array (optional)
As generated from `tobler.area_weighted.area_tables_raster` (the default is None).
Returns
-------
geopandas.GeoDataFrame
GeoDataFrame with geometries matching the target_df and extensive and intensive
variables as the columns
"""
if not codes:
codes = [21, 22, 23, 24]
if not raster:
raster = 'nlcd_2011'
if not tables:
tables = area_tables_raster(
source_df,
target_df.copy(),
raster_path=raster,
codes=codes,
force_crs_match=force_crs_match,
)
# In area_interpolate, the resulting variable has same length as target_df
interpolation = _slow_area_interpolate(
source_df,
target_df.copy(),
extensive_variables=extensive_variables,
intensive_variables=intensive_variables,
allocate_total=allocate_total,
tables=tables,
)
return interpolation