Renaming greenspace_balance -> greenspace_balance_percapita.
RE:#1177
This commit is contained in:
parent
518445adfd
commit
097f9a5f4d
2
Makefile
2
Makefile
|
@ -10,7 +10,7 @@ GIT_TEST_DATA_REPO_REV := f5e651c9ba0a012dc033b9c1d12d51e42f6f87b0
|
|||
|
||||
GIT_UG_REPO := https://github.com/natcap/invest.users-guide
|
||||
GIT_UG_REPO_PATH := doc/users-guide
|
||||
GIT_UG_REPO_REV := 3945cfb44b272358b45acd3a1f625f45bc609d64
|
||||
GIT_UG_REPO_REV := 401ac875bb6be1ab2f9be2a828f45947948a843f
|
||||
|
||||
ENV = "./env"
|
||||
ifeq ($(OS),Windows_NT)
|
||||
|
|
|
@ -294,7 +294,7 @@ ARGS_SPEC = {
|
|||
_OUTPUT_BASE_FILES = {
|
||||
'greenspace_supply': 'greenspace_supply.tif',
|
||||
'admin_boundaries': 'admin_boundaries.gpkg',
|
||||
'greenspace_balance': 'greenspace_balance.tif',
|
||||
'greenspace_balance_percapita': 'greenspace_balance_percapita.tif',
|
||||
}
|
||||
|
||||
_INTERMEDIATE_BASE_FILES = {
|
||||
|
@ -916,7 +916,7 @@ def execute(args):
|
|||
# Calculate SUP_DEMi_cap for each population group.
|
||||
per_cap_greenspace_balance_pop_group_path = os.path.join(
|
||||
output_dir,
|
||||
f'greenspace_balance_{pop_group}{suffix}.tif')
|
||||
f'greenspace_balance_percapita_{pop_group}{suffix}.tif')
|
||||
per_cap_greenspace_balance_pop_group_task = graph.add_task(
|
||||
pygeoprocessing.raster_calculator,
|
||||
kwargs={
|
||||
|
@ -924,7 +924,7 @@ def execute(args):
|
|||
(greenspace_supply_to_group_path, 1),
|
||||
(float(args['greenspace_demand']), 'raw')
|
||||
],
|
||||
'local_op': _greenspace_balance_op,
|
||||
'local_op': _greenspace_balance_percapita_op,
|
||||
'target_raster_path':
|
||||
per_cap_greenspace_balance_pop_group_path,
|
||||
'datatype_target': gdal.GDT_Float32,
|
||||
|
@ -1012,6 +1012,25 @@ def execute(args):
|
|||
*pop_group_proportion_tasks.values(),
|
||||
])
|
||||
|
||||
per_capita_greenspace_balance_task = graph.add_task(
|
||||
pygeoprocessing.raster_calculator,
|
||||
kwargs={
|
||||
'base_raster_path_band_const_list': [
|
||||
(file_registry['greenspace_supply'], 1),
|
||||
(float(args['greenspace_demand']), 'raw')
|
||||
],
|
||||
'local_op': _greenspace_balance_percapita_op,
|
||||
'target_raster_path':
|
||||
file_registry['greenspace_balance_percapita'],
|
||||
'datatype_target': gdal.GDT_Float32,
|
||||
'nodata_target': FLOAT32_NODATA
|
||||
},
|
||||
task_name='Calculate per-capita greenspace balance',
|
||||
target_path_list=[file_registry['greenspace_balance_percapita']],
|
||||
dependent_task_list=[
|
||||
greenspace_supply_task,
|
||||
])
|
||||
|
||||
greenspace_supply_demand_budget_task = graph.add_task(
|
||||
ndr._sum_rasters,
|
||||
kwargs={
|
||||
|
@ -1063,13 +1082,14 @@ def execute(args):
|
|||
(file_registry['greenspace_supply'], 1),
|
||||
(float(args['greenspace_demand']), 'raw')
|
||||
],
|
||||
'local_op': _greenspace_balance_op,
|
||||
'target_raster_path': file_registry['greenspace_balance'],
|
||||
'local_op': _greenspace_balance_percapita_op,
|
||||
'target_raster_path':
|
||||
file_registry['greenspace_balance_percapita'],
|
||||
'datatype_target': gdal.GDT_Float32,
|
||||
'nodata_target': FLOAT32_NODATA
|
||||
},
|
||||
task_name='Calculate per-capita greenspace balance',
|
||||
target_path_list=[file_registry['greenspace_balance']],
|
||||
target_path_list=[file_registry['greenspace_balance_percapita']],
|
||||
dependent_task_list=[
|
||||
greenspace_supply_task,
|
||||
])
|
||||
|
@ -1079,7 +1099,7 @@ def execute(args):
|
|||
pygeoprocessing.raster_calculator,
|
||||
kwargs={
|
||||
'base_raster_path_band_const_list': [
|
||||
(file_registry['greenspace_balance'], 1),
|
||||
(file_registry['greenspace_balance_percapita'], 1),
|
||||
(file_registry['masked_population'], 1)
|
||||
],
|
||||
'local_op': _greenspace_supply_demand_op,
|
||||
|
@ -1120,7 +1140,7 @@ def execute(args):
|
|||
kwargs={
|
||||
'base_raster_path_band_const_list': [
|
||||
(proportional_pop_path, 1),
|
||||
(file_registry['greenspace_balance'], 1),
|
||||
(file_registry['greenspace_balance_percapita'], 1),
|
||||
(op, 'raw'), # numpy element-wise comparator
|
||||
],
|
||||
'local_op': _filter_population,
|
||||
|
@ -1687,7 +1707,7 @@ def _write_supply_demand_vector(source_aoi_vector_path, feature_attrs,
|
|||
target_vector = None
|
||||
|
||||
|
||||
def _greenspace_balance_op(greenspace_supply, greenspace_demand):
|
||||
def _greenspace_balance_percapita_op(greenspace_supply, greenspace_demand):
|
||||
"""Calculate the per-capita greenspace balance.
|
||||
|
||||
This is the amount of greenspace that each pixel has above (positive
|
||||
|
|
|
@ -337,7 +337,7 @@ class UNATests(unittest.TestCase):
|
|||
numpy.testing.assert_allclose(
|
||||
expected_array, kernel)
|
||||
|
||||
def test_greenspace_balance(self):
|
||||
def test_greenspace_balance_percapita(self):
|
||||
"""UNA: Test the per-capita greenspace balance functions."""
|
||||
from natcap.invest import urban_nature_access
|
||||
|
||||
|
@ -351,8 +351,9 @@ class UNATests(unittest.TestCase):
|
|||
[50, 100],
|
||||
[40.75, nodata]], dtype=numpy.float32)
|
||||
|
||||
greenspace_budget = urban_nature_access._greenspace_balance_op(
|
||||
greenspace_supply, greenspace_demand)
|
||||
greenspace_budget = (
|
||||
urban_nature_access._greenspace_balance_percapita_op(
|
||||
greenspace_supply, greenspace_demand))
|
||||
expected_greenspace_budget = numpy.array([
|
||||
[nodata, 50.5],
|
||||
[25, 50]], dtype=numpy.float32)
|
||||
|
@ -565,7 +566,8 @@ class UNATests(unittest.TestCase):
|
|||
urban_nature_access.execute(args)
|
||||
|
||||
summary_vector = gdal.OpenEx(
|
||||
os.path.join(args['workspace_dir'], 'output', 'admin_boundaries.gpkg'))
|
||||
os.path.join(args['workspace_dir'], 'output',
|
||||
'admin_boundaries.gpkg'))
|
||||
summary_layer = summary_vector.GetLayer()
|
||||
self.assertEqual(summary_layer.GetFeatureCount(), 1)
|
||||
summary_feature = summary_layer.GetFeature(1)
|
||||
|
@ -637,7 +639,8 @@ class UNATests(unittest.TestCase):
|
|||
urban_nature_access.execute(args)
|
||||
|
||||
summary_vector = gdal.OpenEx(
|
||||
os.path.join(args['workspace_dir'], 'output', 'admin_boundaries.gpkg'))
|
||||
os.path.join(args['workspace_dir'], 'output',
|
||||
'admin_boundaries.gpkg'))
|
||||
summary_layer = summary_vector.GetLayer()
|
||||
self.assertEqual(summary_layer.GetFeatureCount(), 1)
|
||||
summary_feature = summary_layer.GetFeature(1)
|
||||
|
@ -731,6 +734,16 @@ class UNATests(unittest.TestCase):
|
|||
for args in (uniform_args, split_greenspace_args, pop_group_args):
|
||||
urban_nature_access.execute(args)
|
||||
|
||||
# make sure the output dir contains the correct files.
|
||||
for output_filename in (
|
||||
urban_nature_access._OUTPUT_BASE_FILES.values()):
|
||||
basename, ext = os.path.splitext(
|
||||
os.path.basename(output_filename))
|
||||
suffix = args['results_suffix']
|
||||
filepath = os.path.join(args['workspace_dir'], 'output',
|
||||
f'{basename}_{suffix}{ext}')
|
||||
self.assertTrue(os.path.exists(filepath))
|
||||
|
||||
uniform_radius_supply = pygeoprocessing.raster_to_numpy_array(
|
||||
os.path.join(uniform_args['workspace_dir'], 'output',
|
||||
'greenspace_supply_uniform.tif'))
|
||||
|
|
Loading…
Reference in New Issue