Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 74 additions & 32 deletions src/polartoolkit/maps.py
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,7 @@ def add_coast(
pen: str | None = None,
version: str | None = None,
label: str | None = None,
epsg: str | None = None,
) -> None:
"""
add coastline and or groundingline to figure.
Expand All @@ -300,38 +301,62 @@ def add_coast(
elif self.hemisphere == "south":
version = "measures-v2"

if version == "depoorter-2013":
if no_coast is False:
data = fetch.groundingline(version=version)
elif no_coast is True:
gdf = gpd.read_file(
fetch.groundingline(version=version), engine="pyogrio"
)
data = gdf[gdf.Id_text == "Grounded ice or land"]
elif version == "measures-v2":
if no_coast is False:
gl = gpd.read_file(
fetch.groundingline(version=version), engine="pyogrio"
)
coast = gpd.read_file(
fetch.antarctic_boundaries(version="Coastline"), engine="pyogrio"
)
data = pd.concat([gl, coast])
elif no_coast is True:
data = fetch.groundingline(version=version)
elif version in ("BAS", "measures-greenland"):
data = fetch.groundingline(version=version)
if version == "gmt":
if epsg is None:
msg = "EPSG code must be provided when coast version is 'gmt'"
raise ValueError(msg)

pen = f"1/{pen}"

proj_latlon = f"{epsg}/{self.proj[1:]}"
reg_latlon = utils.reproject(
utils.region_to_df(self.reg).drop(index=[1, 2]), # type: ignore[union-attr]
epsg,
"epsg:4326",
reg=True,
)
reg_ll_bbox = utils.region_to_bounding_box(reg_latlon) # type: ignore[arg-type]
reg_ll_bbox = utils.gmt_str_to_list(reg_ll_bbox) + "+r" # type: ignore[assignment]

self.coast(
region=reg_ll_bbox,
projection=proj_latlon,
shorelines=pen,
)
else:
msg = "invalid version string"
raise ValueError(msg)
if version == "depoorter-2013":
if no_coast is False:
data = fetch.groundingline(version=version)
elif no_coast is True:
gdf = gpd.read_file(
fetch.groundingline(version=version), engine="pyogrio"
)
data = gdf[gdf.Id_text == "Grounded ice or land"]
elif version == "measures-v2":
if no_coast is False:
gl = gpd.read_file(
fetch.groundingline(version=version), engine="pyogrio"
)
coast = gpd.read_file(
fetch.antarctic_boundaries(version="Coastline"),
engine="pyogrio",
)
data = pd.concat([gl, coast])
elif no_coast is True:
data = fetch.groundingline(version=version)
elif version in ("BAS", "measures-greenland"):
data = fetch.groundingline(version=version)
else:
msg = "invalid version string"
raise ValueError(msg)

self.plot(
data, # pylint: disable=used-before-assignment
projection=self.proj,
region=self.reg,
pen=pen,
label=label,
)
self.plot(
data, # pylint: disable=used-before-assignment
projection=self.proj,
region=self.reg,
pen=pen,
label=label,
)

def add_gridlines(
self,
Expand Down Expand Up @@ -988,6 +1013,21 @@ def add_scalebar(
length = kwargs.get("length")
length_perc = kwargs.get("length_perc", 0.25)
position = kwargs.get("position", "n.5/.05")
epsg = kwargs.get("epsg")

if epsg is not None:
projection = f"{epsg}/{self.proj[1:]}"
reg_latlon = utils.reproject(
utils.region_to_df(self.reg).drop(index=[1, 2]), # type: ignore[union-attr]
epsg,
"epsg:4326",
reg=True,
)
reg_ll_bbox = utils.region_to_bounding_box(reg_latlon) # type: ignore[arg-type]
region = utils.gmt_str_to_list(reg_ll_bbox) + "+r"
else:
region = self.reg_latlon
projection = self.proj_latlon # type: ignore[assignment]

def round_to_1(x: float) -> float:
return round(x, -floor(log10(abs(x))))
Expand All @@ -1006,8 +1046,8 @@ def round_to_1(x: float) -> float:
MAP_TICK_PEN_PRIMARY=f"0.5p,{font_color}",
):
self.basemap(
region=self.reg_latlon,
projection=self.proj_latlon,
region=region,
projection=projection,
map_scale=f"{position}+w{length}k+f+lkm+ar",
box=kwargs.get("scalebar_box", "+gwhite"),
)
Expand Down Expand Up @@ -2171,6 +2211,7 @@ def basemap(
no_coast=kwargs.get("no_coast", False),
version=kwargs.get("coast_version"),
label=kwargs.get("coast_label", None),
epsg=kwargs.get("epsg", None),
)

# plot faults
Expand Down Expand Up @@ -3020,6 +3061,7 @@ def plot_grd(
no_coast=kwargs.get("no_coast", False),
version=kwargs.get("coast_version"),
label=kwargs.get("coast_label", None),
epsg=kwargs.get("epsg", None),
)

# plot faults
Expand Down
Loading