Skip to content

Commit

Permalink
grass.jupyter: Fix InteractiveMap bounding box for saved_region, use_…
Browse files Browse the repository at this point in the history
…region (#2301)

Setting bounding box for use_region=True and saved_region="name" was moved to the RegionManager init to have the region set once the information is available and in all cases. Setting target region was refactored into a separate function.
  • Loading branch information
petrasovaa committed Apr 13, 2022
1 parent 9045c62 commit 863f067
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 29 deletions.
43 changes: 17 additions & 26 deletions python/grass/jupyter/region.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,8 @@
from grass.exceptions import CalledModuleError

from .utils import (
get_location_proj_string,
get_map_name_from_d_command,
get_region,
reproject_region,
set_target_region,
get_rendering_size,
)

Expand All @@ -41,7 +39,17 @@ def __init__(self, use_region, saved_region, src_env, tgt_env):
self._saved_region = saved_region
self._src_env = src_env
self._tgt_env = tgt_env
# [SW, NE]: inverted to easily expand based on data, see _set_bbox
self._bbox = [[90, 180], [-90, -180]]
if self._use_region:
# tgt region already set
self._set_bbox(self._src_env)
if self._saved_region:
self._src_env["GRASS_REGION"] = gs.region_env(
region=self._saved_region, env=self._src_env
)
set_target_region(src_env=self._src_env, tgt_env=self._tgt_env)
self._set_bbox(self._src_env)

@property
def bbox(self):
Expand All @@ -60,34 +68,17 @@ def set_region_from_raster(self, raster):
Also enlarges bounding box based on the raster.
"""
if self._saved_region:
self._src_env["GRASS_REGION"] = gs.region_env(
region=self._saved_region, env=self._src_env
)
elif self._use_region:
# use current
self._set_bbox(self._src_env)
if self._use_region or self._saved_region:
# target region and bbox already set
return
else:
self._src_env["GRASS_REGION"] = gs.region_env(
raster=raster, env=self._src_env
)
region = get_region(env=self._src_env)
from_proj = get_location_proj_string(self._src_env)
to_proj = get_location_proj_string(env=self._tgt_env)
new_region = reproject_region(region, from_proj, to_proj)
gs.run_command(
"g.region",
n=new_region["north"],
s=new_region["south"],
e=new_region["east"],
w=new_region["west"],
env=self._tgt_env,
)
self._src_env["GRASS_REGION"] = gs.region_env(raster=raster, env=self._src_env)
set_target_region(src_env=self._src_env, tgt_env=self._tgt_env)
self._set_bbox(self._src_env)

def set_bbox_vector(self, vector):
"""Enlarge bounding box based on vector"""
if self._saved_region or self._use_region:
return
env = self._src_env.copy()
env["GRASS_REGION"] = gs.region_env(vector=vector, env=env)
self._set_bbox(env)
Expand Down
11 changes: 8 additions & 3 deletions python/grass/jupyter/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,9 +126,15 @@ def setup_location(name, path, epsg, src_env):
# Location and mapset
gs.create_location(path, name, epsg=epsg, overwrite=True)
# Reproject region
set_target_region(src_env, new_env)
return rcfile, new_env


def set_target_region(src_env, tgt_env):
"""Set target region based on source region"""
region = get_region(env=src_env)
from_proj = get_location_proj_string(src_env)
to_proj = get_location_proj_string(env=new_env)
to_proj = get_location_proj_string(env=tgt_env)
new_region = reproject_region(region, from_proj, to_proj)
# Set region to match original region extent
gs.run_command(
Expand All @@ -137,9 +143,8 @@ def setup_location(name, path, epsg, src_env):
s=new_region["south"],
e=new_region["east"],
w=new_region["west"],
env=new_env,
env=tgt_env,
)
return rcfile, new_env


def get_map_name_from_d_command(module, **kwargs):
Expand Down

0 comments on commit 863f067

Please sign in to comment.