Renaming greenspace_balance -> greenspace_balance_percapita.

RE:#1177
This commit is contained in:
James Douglass 2023-02-08 15:42:05 -08:00
parent 518445adfd
commit 097f9a5f4d
3 changed files with 48 additions and 15 deletions

View File

@ -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)

View File

@ -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

View File

@ -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'))