Source code for revrt.routing.cli.build_costs
"""reVRt build costs CLI command"""
import logging
from pathlib import Path
from gaps.cli import CLICommandFromFunction
from gaps.config import load_config
from revrt.routing.cli.base import update_multipliers
from revrt.routing.base import RoutingScenario, RoutingLayerManager
logger = logging.getLogger(__name__)
[docs]
def build_routing_layer(lcp_config_fp, out_dir, polarity=None, voltage=None):
"""Build out the routing layers used by reVRt
Parameters
----------
lcp_config_fp : path-like
Path to LCP config file for which the routing layer should be
created.
out_dir : path-like
Path to directory where to store the outputs.
polarity : str, optional
Polarity to use when building the routing layer. This input is
required if any cost or friction layers that have
`apply_polarity_mult` set to `True` - they will have the
appropriate multiplier applied based on this polarity.
By default, ``None``.
voltage : str, optional
Voltage to use when building the routing layer. This input is
required if any cost or friction layers that have
`apply_row_mult` or `apply_polarity_mult` set to `True` - they
will have the appropriate multiplier applied based on this
voltage. By default, ``None``.
Returns
-------
list
List of paths to the GeoTIFF files that were created.
"""
# TODO: Add dask client here??
out_dir = Path(out_dir)
out_dir.mkdir(parents=True, exist_ok=True)
config = load_config(lcp_config_fp)
route_cl = update_multipliers(
config["cost_layers"],
polarity,
voltage,
config.get("transmission_config"),
)
route_fl = update_multipliers(
config.get("friction_layers") or [],
polarity,
voltage,
config.get("transmission_config"),
)
routing_scenario = RoutingScenario(
cost_fpath=config["cost_fpath"],
cost_layers=route_cl,
friction_layers=route_fl,
cost_multiplier_layer=config.get("cost_multiplier_layer"),
cost_multiplier_scalar=config.get("cost_multiplier_scalar", 1),
ignore_invalid_costs=config.get("ignore_invalid_costs", False),
)
rl = RoutingLayerManager(routing_scenario)
rl.build()
cost_out_fp = out_dir / "agg_costs.tif"
logger.debug("Writing costs to %s", cost_out_fp)
rl.cost.rio.to_raster(cost_out_fp, driver="GTiff", nodata=-1)
frl_out_fp = out_dir / "final_routing_layer.tif"
logger.debug("Writing final routing layer to %s", frl_out_fp)
rl.final_routing_layer.rio.to_raster(frl_out_fp, driver="GTiff", nodata=-1)
return [str(cost_out_fp), str(frl_out_fp)]
build_route_costs_command = CLICommandFromFunction(
build_routing_layer, name="build-route-costs", add_collect=False
)