|
6 | 6 |
|
7 | 7 | import json |
8 | 8 | from textwrap import dedent |
9 | | -from typing import TYPE_CHECKING, Any, Protocol, TypeAlias, cast |
| 9 | +from typing import TYPE_CHECKING, Any, Literal, Protocol, TypeAlias, cast |
10 | 10 |
|
11 | 11 | import numpy as np |
12 | 12 | from arro3.core import Array, ChunkedArray, Schema, Table, struct_field |
|
26 | 26 | ) |
27 | 27 | from lonboard.basemap import CartoStyle, MaplibreBasemap |
28 | 28 | from lonboard.layer import PathLayer, PolygonLayer, ScatterplotLayer |
| 29 | +from lonboard.view import BaseView, GlobeView |
29 | 30 |
|
30 | 31 | if TYPE_CHECKING: |
31 | 32 | import duckdb |
@@ -81,13 +82,14 @@ def __geo_interface__(self) -> dict: ... |
81 | 82 | DEFAULT_POLYGON_LINE_COLOR = [0, 0, 0, 200] |
82 | 83 |
|
83 | 84 |
|
84 | | -def viz( |
| 85 | +def viz( # noqa: PLR0913 |
85 | 86 | data: VizDataInput | list[VizDataInput] | tuple[VizDataInput, ...], |
86 | 87 | *, |
87 | 88 | scatterplot_kwargs: ScatterplotLayerKwargs | None = None, |
88 | 89 | path_kwargs: PathLayerKwargs | None = None, |
89 | 90 | polygon_kwargs: PolygonLayerKwargs | None = None, |
90 | 91 | map_kwargs: MapKwargs | None = None, |
| 92 | + view: BaseView | Literal["globe"] | None = None, |
91 | 93 | ) -> Map: |
92 | 94 | """Plot your data easily. |
93 | 95 |
|
@@ -165,6 +167,7 @@ def viz( |
165 | 167 | [`PolygonLayer`][lonboard.PolygonLayer]s. |
166 | 168 | map_kwargs: a `dict` of parameters to pass down to the generated |
167 | 169 | [`Map`][lonboard.Map]. |
| 170 | + view: a [view instance][lonboard.view.BaseView] to use for the map view, or the string "globe". |
168 | 171 |
|
169 | 172 | For more control over rendering, construct [`Map`][lonboard.Map] and `Layer` objects |
170 | 173 | directly. |
@@ -200,8 +203,26 @@ def viz( |
200 | 203 |
|
201 | 204 | map_kwargs = map_kwargs if map_kwargs else {} |
202 | 205 |
|
| 206 | + if "view" not in map_kwargs and view is not None: |
| 207 | + if view == "globe": |
| 208 | + map_kwargs["view"] = GlobeView() |
| 209 | + else: |
| 210 | + map_kwargs["view"] = view |
| 211 | + |
203 | 212 | if "basemap_style" not in map_kwargs and "basemap" not in map_kwargs: |
204 | | - map_kwargs["basemap"] = MaplibreBasemap(style=CartoStyle.DarkMatter) |
| 213 | + map_kwargs["basemap"] = MaplibreBasemap( |
| 214 | + mode="interleaved", |
| 215 | + style=CartoStyle.DarkMatter, |
| 216 | + ) |
| 217 | + |
| 218 | + # If we're using a known style that has labels, set layers to be below labels |
| 219 | + if map_kwargs["basemap"].style in [ |
| 220 | + CartoStyle.DarkMatter, |
| 221 | + CartoStyle.Positron, |
| 222 | + CartoStyle.Voyager, |
| 223 | + ]: |
| 224 | + for layer in layers: |
| 225 | + layer.before_id = "watername_ocean" |
205 | 226 |
|
206 | 227 | return Map(layers=layers, **map_kwargs) |
207 | 228 |
|
|
0 commit comments