import geopandas as gpd
import lonboard
from lonboard import basemap
from mapclassify import greedy
from matplotlib import colormaps
import numpy as np
= gpd.read_file(
grunnkretser "https://nedlasting.geonorge.no/geonorge/Basisdata/Grunnkretser/GML/Basisdata_34_Innlandet_25833_Grunnkretser_GML.zip",
="Grunnkrets",
layer="pyogrio",
engine=["grunnkretsnummer", "grunnkretsnavn", "kommunenummer"],
columns
)
grunnkretser.head()
= greedy(grunnkretser, strategy="balanced", balance="centroid").map(
color "Set2"].colors.__getitem__
colormaps[
)= (np.stack(color.to_numpy()) * 255).astype(np.uint8)
color
= grunnkretser.to_crs(4326)
grunnkretser_wgs84 = lonboard.PolygonLayer.from_geopandas(
layer
grunnkretser_wgs84,=0.2,
opacity=1,
line_miter_limit= "pixels",
line_width_units =color,
get_fill_color=[255,255,255],
get_line_color=True,
auto_highlight
)
= lonboard.Map(
kart
[layer],=basemap.CartoBasemap.DarkMatterNoLabels,
basemap_style=500,
_height
)
kart
Lonboard1 er et bibliotek for å vise kart i Jupyter notebooks. Lonboard er bygget på Deck.gl, et GPU akselerert, høytytende, kartvisualiseringsbibliotek for store data. Lonboard er bygget med Anywidget.
Hvorfor Lonboard?
Geopandas’ explore
-metode og explore
-funksjonen i ssb-sgis-pakken bruker kartvisningsbiblioteket Folium. Hver gang et kart skal vises med Folium, blir kartdataene konvertert til GeoJSON-formatet, som deretter sendes ukomprimert fra Jupyter-serveren til nettleseren. Dette kan føre til lang overføringstid og potensielt høyt minneforbruk i nettleseren, spesielt når man forsøker å vise store datasett, som landsdekkende grunnkretser, tettsteder eller postnummerområder.
Lonboard
håndterer store datamengder bedre ved å overføre data mellom serveren og nettleseren i Parquet-format i stedet for GeoJSON, som så leses av Deck.gl. Siden Parquet tilfeldigvis er SSBs standard lagringsformat, kan denne overføringen skje med minimal datakonvertering.
Ikke alle i SSB jobber med Pandas, og for disse brukerne kan Lonboard
visualisere tabeller fra DuckDB og PyArrow, i tillegg til Geopandas-tabeller.
Hvor kommer Anywidget inn? Anywidget er et rammeverk for å lage widgets. En widgets lar ta med interaktive komponenter inn i en Jupyter notebook, slik som en datovelger eller en filtrerbar og sorterbar tabell. Litt slik som Dash lar deg gjøre, men rett i Jupyter notebook. Å lage sin egen widget til Juypter er en ganske komplisert afære. Det krever at du pakker både Python kode og Javascript kode. Det krever at du må skrive kode for å støtte alle miljøer som kan kjøre Jupyter notbooks, slik som VScode, Jupyterlab eller Google Colab. Anywidget forenkler prosessen veldig, og sørger for at widget din virker på alle plattformer. Den forenkler kommunikasjonen mellom Python og Javascript siden, så det blir enklere å lage interaktivitet.
Anywidget er nå installert i Jupyter på Dapla Lab, slik at alle kan prøve ut både Lonboard, samt andre pakker som bygger på Anywidget. Et eksempel på en slik annen pakke er Vega-altair
Eksempel med grunnkretser i Innlandet fylke
Under er eksempel på hvordan man visualisere grunnkretsene i Innlandet fylke i en Jupyterlab Notebook på Dapla Lab. Gjør følgende først:
- Start en Jupyter på Dapla Lab.
- Opprett et ssb-project
- Installer nødvendige pakker
poetry add geopandas lonboard numpy mapclassify matplotlib libpysal
- Åpne en ny notebook med kernelen som ble opprettet av ssb-project.
I den nyopprettede notebooken kan deretter hente inn data om grunngretser i Innlandet fylke og visualisere de med Lonboard.