Skip to article frontmatterSkip to article content
Sensorjournalistikk

Analyse av historisk skipstrafikk 🚢

Medieklyngen

Som vi sÃ¥ i forrige kapittel, lar Kystverkets NAIS-tjeneste oss gÃ¥ to uker tilbake i tid via sanntidsgrensesnittet. Men ofte har vi behov for Ã¥ se lenger tilbake. Hva gjÞr vi da? Heldigvis har Kystverket lansert HAIS – Historisk AIS – en tjeneste som gjÞr det mulig Ã¥ sÞke etter fartÞybevegelser i norske farvann opptil ett Ã¥r tilbake i tid.

Det finnes ogsÃ¥ kommersielle alternativer, som MarineTraffic, med historiske arkivfunksjoner. Men ettersom vi ofte undersÞker forhold i norske farvann – og disse dataene er gratis – velger vi Ã¥ bruke HAIS i dette kapittelet.

Historisk sÞk¶

HAIS tilbyr flere mÃ¥ter Ã¥ sÞke etter fartÞy pÃ¥ – enten geografisk eller basert pÃ¥ fartÞyinformasjon. FÞr vi starter, mÃ¥ vi ta stilling til:

Figur 1: Kystverket HAIS.

Når disse valgene er gjort, kan vi begynne sÞket.

Skipstype¶

Hvis du kjenner skipstypen du vil filtrere på, men ikke fartÞyets navn, kan du bruke skipstype-feltet. Du kan filtrere på blant annet:

Figur 2: SÞk på skipstype i HAIS.

Skip¶

Hvis du kjenner navnet på fartÞyet, eller har MMSI, IMO eller kallesignal, kan du sÞke direkte. Skriver du inn Richard With, får du opp relevante treff. Du kan filtrere på flere fartÞy samtidig eller laste opp en CSV-liste.

Figur 3: SÞk på skip i HAIS.

Kartutsnitt¶

Du kan avgrense sÞket geografisk ved å tegne et område i kartverktÞyet, eller ved å laste opp en WKT-fil med polygon. Tjenesten tilpasser automatisk området til dekningen som er tilgjengelig.

Figur 4: SÞk på geografisk område.

KjÞring av sÞk¶

NÃ¥r du er fornÞyd med sÞkeparametrene, trykker du Send inn. Systemet validerer sÞket basert pÃ¥ geografisk omrÃ¥de og tidsrom. Hvis du fÃ¥r feilmelding, har du trolig sÞkt for bredt – snevre inn sÞket i tid eller rom.

Godkjente sÞk blir satt i kÞ. Du mottar en e-post når dataene er klare. Tiden det tar, varierer etter sÞkets stÞrrelse og trafikk på systemet.

Analyse av dataene¶

Etter en stund får du e-post med lenker til zip-filer som inneholder Parquet-filer. Pakk dem ut og legg dem i en lett tilgjengelig mappe.

Neste steg er å importere dataene i et verktÞy som DuckDB. Dette minner om arbeidsflyten vi brukte for ADS-B-data, med noen mindre forskjeller i datastruktur og import.

Datastruktur¶

Kystverket benytter spesifikasjonen GeoParquet 1.0.0 til de historiske dataene. Her er Kystverkets egen besrkivelse datastrukturen:

KolonnerMeldingstypeDatatypeBeskrivelse
date_time_utc1,2,3,5,18,24,27DateTimeTidsstempel i UTC
mmsi1,2,3,5,18,27IntegerMaritime Mobile Service Identity-nummer (ID på fartÞyets transponder)
longitude1,2,3,18,27FloatLengdegrad
latitude1,2,3,18,27FloatBreddegrad
status1,2,3,18,27IntegerSkipets navigasjonsstatus (les mer)
course_over_ground1,2,3,18,27FloatFartÞyets kurs over bakken i henhold til kompassnord.
true_heading1,2,3,18,27IntegerDen retningen fartÞyet peker i henhold til kompassnord (0-359 grader)
speed_over_ground1,2,3,18,27FloatFartÞyets fart i knop
rate_of_turn1,2,3,18,27FloatRotasjonsrate
maneuvre1,2,3,18,27IntegerManÞverinformasjon
imo5,24IntegerSkrogets IMO-nummer (satt av International Maritime Organization).
callsign5,24StringRadiokallesignal
ship_name5,24StringSkipets navn
ship_type5,24IntegerSkipstype fra AIS
length5,24FloatLengde på skipet
draught5,24FloatSkipets dypgang
data_sourceGenerert kolonneStringDatakilde (g: bakkestasjon, s: satelitt)
date_utcGenerert kolonneDateDato-kolonne for filtrering på kun dato X
geometryGenerert kolonneStringGeometri-kolonne i WKB-format generert av ST_Point(lon, lat)
hex_14Generert kolonneIntegerH3-id for meldingens posisjon i opplÞsning 14

Her er det mye som minner oss om det vi har sett på tidligere. Vi merker oss felter for data/tid, registreringsnummer (mmsi), posisjon, status, og flere av de aktuelle punktene vi har sett på i tidligere kapitler. Dette er nyttig. Vi ser også at det er en egen kolonne for geometri, og H3-id med opplÞsning 14. Dette er kjent materie for oss nå, og noe vi kan dra nytte av med det samme.

Import av data i DuckDB¶

  1. Åpne Terminal (Mac/Linux) eller PowerShell (Windows), og naviger til mappen der du pakket ut Parquet-filene.

  2. Start DuckDB med fÞlgende kommando:

duckdb geoparquet-hais.db

DuckDB starter med et prompt som ser noenlunde slik ut:

DuckDB v1.4.1 (Andium) b390a7c376
Enter ".help" for usage hints.
D

Installer og last inn utvidelser¶

Dersom du ikke allerede har gjort det i tidligere kapitler, installerer du nÞdvendige utvidelser slik:

INSTALL httpfs;
INSTALL spatial;
INSTALL h3 FROM community;

Last dem deretter inn:

LOAD httpfs;
LOAD spatial;
LOAD h3;

Last inn data¶

Siden filene ligger lokalt, bruker vi fÞlgende kommando for å opprette tabellen haisdata:

CREATE TABLE haisdata AS SELECT * FROM '*.parquet';

Dette leser inn alle .parquet-filer i mappen og legger dem i én tabell.

Utforske datasettet¶

Sjekk datastrukturen med:

DESCRIBE haisdata;

Du vil se kolonner for tid, posisjon, kurs, fart, skipstype, navn og andre kjente parametre – inkludert geometri og H3-ID.

┌────────────────────┬───────────────┬─────────┬─────────┬─────────┬─────────┐
│    column_name     │  column_type  │  null   │   key   │ default │  extra  │
│      varchar       │    varchar    │ varchar │ varchar │ varchar │ varchar │
├────────────────────┌───────────────┌─────────┌─────────┌─────────┌──────────
│ date_time_utc      │ TIMESTAMP     │ YES     │         │         │         │
│ mmsi               │ INTEGER       │ YES     │         │         │         │
│ longitude          │ DOUBLE        │ YES     │         │         │         │
│ latitude           │ DOUBLE        │ YES     │         │         │         │
│ status             │ TINYINT       │ YES     │         │         │         │
│ course_over_ground │ DOUBLE        │ YES     │         │         │         │
│ true_heading       │ SMALLINT      │ YES     │         │         │         │
│ speed_over_ground  │ DOUBLE        │ YES     │         │         │         │
│ rate_of_turn       │ SMALLINT      │ YES     │         │         │         │
│ maneuvre           │ SMALLINT      │ YES     │         │         │         │
│ imo                │ INTEGER       │ YES     │         │         │         │
│ callsign           │ VARCHAR       │ YES     │         │         │         │
│ ship_name          │ VARCHAR       │ YES     │         │         │         │
│ ship_type          │ TINYINT       │ YES     │         │         │         │
│ length             │ SMALLINT      │ YES     │         │         │         │
│ draught            │ DECIMAL(10,2) │ YES     │         │         │         │
│ data_source        │ VARCHAR       │ YES     │         │         │         │
│ ais_class          │ VARCHAR       │ YES     │         │         │         │
│ hex_7              │ BIGINT        │ YES     │         │         │         │
│ hex_14             │ BIGINT        │ YES     │         │         │         │
│ geometry           │ BLOB          │ YES     │         │         │         │
├────────────────────┎───────────────┎─────────┎─────────┎─────────┎──────────
│ 21 rows                                                          6 columns │
└────────────────────────────────────────────────────────────────────────────┘

Antall datapunkter¶

Tell antall rader i datasettet:

SELECT count(*) FROM haisdata;
┌──────────────┐
│ count_star() │
│    int64     │
├───────────────
│       236934 │
└──────────────┘

Eksempelrad¶

Se ett datapunkt:

SELECT * FROM haisdata LIMIT 1;
┌─────────────────────┬───────────┬────────────┬──────────┬────────┬────────────────────┬──────────────┬───────────────────┬──────────────┬──────────┬─────────┬──────────┬──────────────────────┬───────────┬────────┬───────────────┬─────────────┬───────────┬────────────────────┬────────────────────┬────────────────────────────────────────────────────────────────┐
│    date_time_utc    │   mmsi    │ longitude  │ latitude │ status │ course_over_ground │ true_heading │ speed_over_ground │ rate_of_turn │ maneuvre │   imo   │ callsign │      ship_name       │ ship_type │ length │    draught    │ data_source │ ais_class │       hex_7        │       hex_14       │                            geometry                            │
│      timestamp      │   int32   │   double   │  double  │  int8  │       double       │    int16     │      double       │    int16     │  int16   │  int32  │ varchar  │       varchar        │   int8    │ int16  │ decimal(10,2) │   varchar   │  varchar  │       int64        │       int64        │                              blob                              │
├─────────────────────┌───────────┌────────────┌──────────┌────────┌────────────────────┌──────────────┌───────────────────┌──────────────┌──────────┌─────────┌──────────┌──────────────────────┌───────────┌────────┌───────────────┌─────────────┌───────────┌────────────────────┌────────────────────┌─────────────────────────────────────────────────────────────────
│ 2025-03-12 19:51:43 │ 257600000 │ 4.02070333 │ 60.85677 │      0 │              182.2 │          178 │              13.3 │           14 │        0 │ 9854478 │ LAGH7    │ SYDSTRAUM            │        80 │    129 │          6.00 │ G           │ A         │ 608156020115505151 │ 639681217504175135 │ \x00\x00\x00\x00\x01@\x10\x153@\xF5\x12\xBC@Nm\xAA\xA3\xAD\x
  │
└─────────────────────┮───────────┮────────────┮──────────┮────────┮────────────────────┮──────────────┮───────────────────┮──────────────┮──────────┮─────────┮──────────┮──────────────────────┮───────────┮────────┮───────────────┮─────────────┮───────────┮────────────────────┮────────────────────┮────────────────────────────────────────────────────────────────┘

Antall og oversikt over fartÞy¶

Finn unike fartÞy i datasettet:

SELECT DISTINCT(mmsi), callsign, ship_name FROM haisdata ORDER BY ship_name;
┌───────────┬──────────┬──────────────────────┐
│   mmsi    │ callsign │      ship_name       │
│   int32   │ varchar  │       varchar        │
├───────────┌──────────┌───────────────────────
│ 235076245 │ 2CVX9    │  EDZARD SCHULTE      │
│ 247302900 │ ICPE     │ AIDASOL              │
│ 244120000 │ PCYH     │ ANTEOS               │
│ 244120000 │ P C Y H  │ ANTEOS               │
│ 636020363 │ D5YW3    │ AQUASMERALDA         │
│ 636023947 │ 5LQF3    │ ASPEN                │
│ 246598000 │ PBTQ     │ BEATRIX              │
│ 209356000 │ 5BBK5    │ BORIS DAVYDOV        │
│ 255806224 │ CQAN6    │ BOTHNIA              │
│ 257619000 │ LFGV     │ CAPRICE              │
│ 255805753 │ CQCC     │ CHRISTIAN ESSBERGER  │
│ 215349000 │ 9HA2707  │ CSL TRIMNES          │
│ 311023800 │ C6XW3    │ DEEP ARCTIC          │
│ 310767000 │ ZCEC8    │ DEEPSEA STAVANGER    │
│ 257089140 │ LAIX8    │ EAGLE BLANE          │
│ 538006249 │ V7LA9    │ ECO ROYALTY          │
│ 259665000 │ JWMZ3    │ EDDA FAUNA           │
│ 231700000 │ OZ2077   │ ELDBORG              │
│ 305530000 │ V2ER8    │ FITNES               │
│ 220151000 │ OWQD     │ FRIDA AMALIE         │
│     ·     │    ·     │          ·           │
│     ·     │    ·     │          ·           │
│     ·     │    ·     │          ·           │
│ 257297000 │ LLUO     │ REM STAR             │
│ 310805000 │ ZCEZ8    │ RENAISSANCE          │
│ 311000627 │ C6DB3    │ RUDOLF SAMOYLOVICH   │
│ 231850000 │ OZ2076   │ SAEBORG              │
│ 232419000 │ MZHR7    │ SEVEN NAVICA         │
│ 257286000 │ LDZH     │ SIEM PEARL           │
│ 209190000 │ 5BXG4    │ SIF W                │
│ 253309000 │ LXUB     │ SIMON STEVIN         │
│ 259888000 │ LAHA7    │ STAVFJORD            │
│ 538010467 │ V7A6081  │ STI MYSTERY          │
│ 538006343 │ V7MB8    │ STI SPIGA            │
│ 246695000 │ PCKX     │ STORNES              │
│ 258527000 │ JWRE     │ STRIL MAR            │
│ 257129000 │ LGLA     │ STRIL MERKUR         │
│ 257600000 │ LAGH7    │ SYDSTRAUM            │
│ 241456000 │ SVCL8    │ THOMAS ZAFIRAS       │
│ 258390000 │ LLVY     │ VIKING ENERGY        │
│ 257271000 │ LACZ8    │ VOLANTIS             │
│ 257970000 │ LAUR5    │ XANTHIA              │
│ 311000634 │ C6DC2    │ YAKOV GAKKEL         │
├───────────┎──────────┎───────────────────────
│ 75 rows (40 shown)                3 columns │
└─────────────────────────────────────────────┘

Se hvor mange datapunkter hvert fartÞy har:

SELECT mmsi, callsign, ship_name, COUNT(*) AS count
FROM haisdata
GROUP BY ALL
ORDER BY count DESC;
┌───────────┬──────────┬──────────────────────┬───────┐
│   mmsi    │ callsign │      ship_name       │ count │
│   int32   │ varchar  │       varchar        │ int64 │
├───────────┌──────────┌──────────────────────┌────────
│ 258390000 │ LLVY     │ VIKING ENERGY        │ 24621 │
│ 257129000 │ LGLA     │ STRIL MERKUR         │ 17671 │
│ 257105000 │ LMEL     │ G.O.SARS             │ 16976 │
│ 257271000 │ LACZ8    │ VOLANTIS             │ 16387 │
│ 231700000 │ OZ2077   │ ELDBORG              │ 11514 │
│ 636023947 │ 5LQF3    │ ASPEN                │  9821 │
│ 220151000 │ OWQD     │ FRIDA AMALIE         │  9787 │
│ 538006343 │ V7MB8    │ STI SPIGA            │  7860 │
│ 259014300 │ JXQO     │ REBEKKA L            │  6115 │
│ 258906000 │ LDLA     │ JUANITA              │  5990 │
│ 259665000 │ JWMZ3    │ EDDA FAUNA           │  5765 │
│ 231099000 │ OZ2088   │ HAV NES              │  5487 │
│ 636020363 │ D5YW3    │ AQUASMERALDA         │  5288 │
│ 219597000 │ OZOI     │ L56 ANNA LISE        │  4758 │
│ 257438000 │ LCCC     │ HAVILA HEROY         │  4239 │
│ 257600000 │ LAGH7    │ SYDSTRAUM            │  3430 │
│ 245974000 │ PARE     │ NATO WARSHIP A900    │  3422 │
│ 231850000 │ OZ2076   │ SAEBORG              │  3396 │
│ 258895000 │ LDAD     │ NORTH POMOR          │  3378 │
│ 257089140 │ LAIX8    │ EAGLE BLANE          │  2968 │
│     ·     │   ·      │         ·            │    ·  │
│     ·     │   ·      │         ·            │    ·  │
│     ·     │   ·      │         ·            │    ·  │
│ 310767000 │ ZCEC8    │ DEEPSEA STAVANGER    │   961 │
│ 258277000 │ LAVS7    │ HANNE KNUTSEN        │   934 │
│ 538010467 │ V7A6081  │ STI MYSTERY          │   898 │
│ 230688000 │ OJTF     │ JATULI               │   890 │
│ 258152000 │ LAWE7    │ NORDSTRAUM           │   846 │
│ 255806224 │ CQAN6    │ BOTHNIA              │   768 │
│ 257297000 │ LLUO     │ REM STAR             │   768 │
│ 311023800 │ C6XW3    │ DEEP ARCTIC          │   684 │
│ 538006249 │ V7LA9    │ ECO ROYALTY          │   629 │
│ 248221000 │ 9HA2267  │ KEY SOUTH            │   628 │
│ 266235000 │ SJLF     │ FURE WEST            │   619 │
│ 205771000 │ ONJY     │ JOAN                 │   541 │
│ 310805000 │ ZCEZ8    │ RENAISSANCE          │   428 │
│ 259827000 │ LGPE     │ NORMAND SIGMA        │   407 │
│ 211210150 │ DRAA     │ GERMAN WARSHIP F219  │   166 │
│ 636092960 │ D5XR2    │ GW ELENI             │   162 │
│ 257286000 │ LDZH     │ SIEM PEARL           │    38 │
│ 257619000 │ LFGV     │ CAPRICE              │    36 │
│ 236111791 │ ZDKS2    │ KEY BREEZE           │    13 │
│ 253309000 │ LXUB     │ SIMON STEVIN         │     8 │
├───────────┎──────────┎──────────────────────┎────────
│ 75 rows (40 shown)                        4 columns │
└─────────────────────────────────────────────────────┘

Eksport av et enkelt fartÞy¶

La oss se på Juanita (MMSI: 258906000). Vi lager en GeoJSON-fil med hele sporloggen:

COPY (
    SELECT mmsi, ship_name, ST_MakeLine(ARRAY_AGG(ST_POINT(longitude, latitude) ORDER BY date_time_utc)) AS geom
    FROM haisdata
    WHERE mmsi = '258906000'
    GROUP BY mmsi, ship_name
  ) TO 'juanita.geojson' WITH (FORMAT gdal, DRIVER 'GeoJSON');

Åpne filen i GeoJSON.io for å se skipets rute visualisert på kart.

Figur 5: Juanitas sporlogg visualisert på et kart.

SÞk i geografisk område¶

HAIS stÞtter H3-rammeverket, slik vi kjenner det fra tidligere kapitler. Det betyr at vi enkelt kan sÞke etter trafikk i en gitt H3-celle. Merk at H3-ID-ene i HAIS lagres som tallverdier, så vi må konvertere dem til heksadesimal.

  1. Finn Þnsket H3-celle ved hjelp av et verktÞy som H3 Viewer.

  2. Bruk for eksempel 8409851ffffffff med opplÞsning 4.

  3. KjÞr denne spÞrringen i DuckDB:

SELECT *
FROM haisdata
WHERE h3_cell_to_parent(to_hex(hex_14), 4) = '8409851ffffffff';

Du vil da få opp alle datapunkter som befinner seg innenfor den gitte H3-cellen:

┌─────────────────────┬───────────┬────────────┬─────────────┬────────┬────────────────────┬──────────────┬───────────────────┬──────────────┬──────────┬─────────┬──────────┬──────────────────────┬───────────┬────────┬───────────────┬─────────────┬───────────┬────────────────────┬────────────────────┬─────────────────────────────────────────────────────────────┐
│    date_time_utc    │   mmsi    │ longitude  │  latitude   │ status │ course_over_ground │ true_heading │ speed_over_ground │ rate_of_turn │ maneuvre │   imo   │ callsign │      ship_name       │ ship_type │ length │    draught    │ data_source │ ais_class │       hex_7        │       hex_14       │                          geometry                           │
│      timestamp      │   int32   │   double   │   double    │  int8  │       double       │    int16     │      double       │    int16     │  int16   │  int32  │ varchar  │       varchar        │   int8    │ int16  │ decimal(10,2) │   varchar   │  varchar  │       int64        │       int64        │                            blob                             │
├─────────────────────┌───────────┌────────────┌─────────────┌────────┌────────────────────┌──────────────┌───────────────────┌──────────────┌──────────┌─────────┌──────────┌──────────────────────┌───────────┌────────┌───────────────┌─────────────┌───────────┌────────────────────┌────────────────────┌──────────────────────────────────────────────────────────────
│ 2025-03-12 23:59:57 │ 636020363 │ 3.99394833 │   60.451285 │      0 │              193.8 │          266 │               2.1 │            0 │        0 │ 9884801 │ D5YW3    │ AQUASMERALDA         │        80 │    182 │          8.40 │ G           │ A         │ 608153422381711359 │ 639678619758256391 │ \x00\x00\x00\x00\x01@\x0F\xF3\x9B.\x9A\x1CK@N9\xC3\xB4\xF
  │
│ 2025-03-12 23:59:47 │ 636020363 │ 3.99399666 │ 60.45135666 │      0 │              195.8 │          266 │               2.0 │            0 │        0 │ 9884801 │ D5YW3    │ AQUASMERALDA         │        80 │    182 │          8.40 │ G           │ A         │ 608153422381711359 │ 639678619758258871 │ \x00\x00\x00\x00\x01@\x0F\xF3\xB4\x85XD\x0F@N9\xC6\x0E\x1
  │
│ 2025-03-12 23:59:38 │ 636020363 │   3.994055 │ 60.45143333 │      0 │              194.9 │          267 │               1.9 │            0 │        0 │ 9884801 │ D5YW3    │ AQUASMERALDA         │        80 │    182 │          8.40 │ G           │ A         │ 608153422381711359 │ 639678619758258927 │ \x00\x00\x00\x00\x01@\x0F\xF3\xD3\x1B\x9Bf\xF9@N9\xC8\x91
  │
│ 2025-03-12 23:59:27 │ 636020363 │     3.9941 │ 60.45150833 │      0 │              195.1 │          267 │               2.1 │            0 │        0 │ 9884801 │ D5YW3    │ AQUASMERALDA         │        80 │    182 │          8.40 │ G           │ A         │ 608153422381711359 │ 639678619758234911 │ \x00\x00\x00\x00\x01@\x0F\xF3\xEA\xB3g\xA0\xF9@N9\xCB\x06
  │
│ 2025-03-12 23:59:25 │ 636020363 │ 3.99410333 │ 60.45151666 │      0 │              195.9 │          267 │               2.0 │            0 │        0 │ 9884801 │ D5YW3    │ AQUASMERALDA         │        80 │    182 │          8.40 │ G           │ A         │ 608153422381711359 │ 639678619758234663 │ \x00\x00\x00\x00\x01@\x0F\xF3\xECrY\x8E\xBD@N9\xCBLD&K      │
│ 2025-03-12 23:59:23 │ 636020363 │ 3.99412333 │   60.451565 │      0 │              201.1 │          268 │               1.3 │         -127 │        0 │ 9884801 │ D5YW3    │ AQUASMERALDA         │        80 │    182 │          8.40 │ G           │ A         │ 608153422381711359 │ 639678619758234975 │ \x00\x00\x00\x00\x01@\x0F\xF3\xF6\xEE\xB4S.@N9\xCC\xE1\xC
  │
│ 2025-03-12 23:59:18 │ 636020363 │ 3.99415166 │ 60.45158166 │      0 │              200.1 │          269 │               1.9 │            0 │        0 │ 9884801 │ D5YW3    │ AQUASMERALDA         │        80 │    182 │          8.40 │ G           │ A         │ 608153422381711359 │ 639678619758233751 │ \x00\x00\x00\x00\x01@\x0F\xF4\x05\xC9\x17\xB6\x80@N9\xCDm
  │
│ 2025-03-12 23:59:14 │ 636020363 │    3.99418 │ 60.45161666 │      0 │              194.0 │          269 │               1.9 │         -127 │        0 │ 9884801 │ D5YW3    │ AQUASMERALDA         │        80 │    182 │          8.40 │ G           │ A         │ 608153422381711359 │ 639678619758233743 │ \x00\x00\x00\x00\x01@\x0F\xF4\x14\xA4\xD2\xB2\xC0@N9\xCE\
  │
│ 2025-03-12 23:59:13 │ 636020363 │   3.994185 │ 60.45163166 │      0 │              196.2 │          269 │               1.6 │         -127 │        0 │ 9884801 │ D5YW3    │ AQUASMERALDA         │        80 │    182 │          8.40 │ G           │ A         │ 608153422381711359 │ 639678619758233815 │ \x00\x00\x00\x00\x01@\x0F\xF4\x17C\xE9c\xDC@N9\xCF\x10\xF
  │
│ 2025-03-12 23:59:08 │ 636020363 │ 3.99420833 │ 60.45165666 │      0 │              200.5 │          270 │               1.8 │            0 │        0 │ 9884801 │ D5YW3    │ AQUASMERALDA         │        80 │    182 │          8.40 │ G           │ A         │ 608153422381711359 │ 639678619758233823 │ \x00\x00\x00\x00\x01@\x0F\xF4#\x7F6\x16\x12@N9\xCF\xE2\xA
  │
│ 2025-03-12 23:59:05 │ 636020363 │ 3.99423166 │ 60.45167166 │      0 │              194.7 │          270 │               2.0 │         -127 │        0 │ 9884801 │ D5YW3    │ AQUASMERALDA         │        80 │    182 │          8.40 │ G           │ A         │ 608153422381711359 │ 639678619758231911 │ \x00\x00\x00\x00\x01@\x0F\xF4/\xBA\x82\xC8G@N9\xD0`\x80\x
  │
│ 2025-03-12 23:59:04 │ 636020363 │   3.994235 │   60.451685 │      0 │              194.7 │          271 │               2.0 │         -127 │        0 │ 9884801 │ D5YW3    │ AQUASMERALDA         │        80 │    182 │          8.40 │ G           │ A         │ 608153422381711359 │ 639678619758234519 │ \x00\x00\x00\x00\x01@\x0F\xF41z\xCCN\xF9@N9\xD0\xD0g\x8C\
  │
│ 2025-03-12 23:58:58 │ 636020363 │   3.994265 │ 60.45174333 │      0 │              195.9 │          271 │               1.9 │         -127 │        0 │ 9884801 │ D5YW3    │ AQUASMERALDA         │        80 │    182 │          8.40 │ G           │ A         │ 608153422381711359 │ 639678619758234119 │ \x00\x00\x00\x00\x01@\x0F\xF4A5Tu\xA3@N9\xD2\xB9\xB6D\xA0   │
│ 2025-03-12 23:58:56 │ 636020363 │ 3.99427833 │ 60.45174333 │      0 │              193.8 │          271 │               2.1 │         -127 │        0 │ 9884801 │ D5YW3    │ AQUASMERALDA         │        80 │    182 │          8.40 │ G           │ A         │ 608153422381711359 │ 639678619758234119 │ \x00\x00\x00\x00\x01@\x0F\xF4H2s\xC5\xA0@N9\xD2\xB9\xB6D\
  │
│ 2025-03-12 23:58:47 │ 636020363 │   3.994325 │    60.45182 │      0 │              196.8 │          272 │               2.0 │            0 │        0 │ 9884801 │ D5YW3    │ AQUASMERALDA         │        80 │    182 │          8.40 │ G           │ A         │ 608153422381711359 │ 639678619758234191 │ \x00\x00\x00\x00\x01@\x0F\xF4`\xAAd\xC2\xF8@N9\xD5<\xDD\x
  │
│ 2025-03-12 23:58:38 │ 636020363 │ 3.99437666 │   60.451905 │      0 │              200.8 │          273 │               1.7 │            0 │        0 │ 9884801 │ D5YW3    │ AQUASMERALDA         │        80 │    182 │          8.40 │ G           │ A         │ 608153422381711359 │ 639678619758239087 │ \x00\x00\x00\x00\x01@\x0F\xF4{\xC0\x14\xD8\x7F@N9\xD8\x05
  │
│ 2025-03-12 23:58:27 │ 636020363 │ 3.99444166 │ 60.45198666 │      0 │              204.8 │          273 │               2.0 │            0 │        0 │ 9884801 │ D5YW3    │ AQUASMERALDA         │        80 │    182 │          8.40 │ G           │ A         │ 608153422381711359 │ 639678619758237927 │ \x00\x00\x00\x00\x01@\x0F\xF4\x9D\xD4;\xD6\xF1@N9\xDA\xB2
  │
│ 2025-03-12 23:58:18 │ 636020363 │   3.994515 │ 60.45207333 │      0 │              207.1 │          273 │               1.7 │            0 │        0 │ 9884801 │ D5YW3    │ AQUASMERALDA         │        80 │    182 │          8.40 │ G           │ A         │ 608153422381711359 │ 639678619758238495 │ \x00\x00\x00\x00\x01@\x0F\xF4\xC4G\xC3\x0D0@N9\xDD\x89\xF
  │
│ 2025-03-12 23:58:08 │ 636020363 │    3.99458 │ 60.45214833 │      0 │              207.2 │          273 │               1.7 │            0 │        0 │ 9884801 │ D5YW3    │ AQUASMERALDA         │        80 │    182 │          8.40 │ G           │ A         │ 608153422381711359 │ 639678619757651607 │ \x00\x00\x00\x00\x01@\x0F\xF4\xE6[\xEA\x0B\xA2@N9\xDF\xFF
  │
│ 2025-03-12 23:57:58 │ 636020363 │ 3.99466166 │   60.452235 │      0 │              205.4 │          273 │               1.8 │            0 │        0 │ 9884801 │ D5YW3    │ AQUASMERALDA         │        80 │    182 │          8.40 │ G           │ A         │ 608153422381711359 │ 639678619758284135 │ \x00\x00\x00\x00\x01@\x0F\xF5\x11,\x22G\xD3@N9\xE2\xD6#\x
  │
│          ·          │     ·     │       ·    │       ·     │      · │                 ·  │           ·  │                ·  │            · │        · │    ·    │  ·       │      ·               │         · │      · │            ·  │ ·           │ ·         │          ·         │          ·         │                              ·                              │
│          ·          │     ·     │       ·    │       ·     │      · │                 ·  │           ·  │                ·  │            · │        · │    ·    │  ·       │      ·               │         · │      · │            ·  │ ·           │ ·         │          ·         │          ·         │                              ·                              │
│          ·          │     ·     │       ·    │       ·     │      · │                 ·  │           ·  │                ·  │            · │        · │    ·    │  ·       │      ·               │         · │      · │            ·  │ ·           │ ·         │          ·         │          ·         │                              ·                              │
│ 2025-03-13 19:16:16 │ 219023236 │   3.751666 │   60.536666 │      7 │               97.0 │              │               2.0 │              │          │ 9807786 │ OXAB     │ MYGGENES             │        30 │     33 │          0.00 │ S           │ LRIT      │ 608153424898293759 │ 639678622280122647 │ \x00\x00\x00\x00\x01@\x0E\x03iv\xBC\x1F\x00@ND\xB1x\xB3p\
  │
│ 2025-03-13 19:16:14 │ 219023236 │   3.751666 │   60.536666 │      7 │               97.0 │              │               2.0 │              │          │ 9807786 │ OXAB     │ MYGGENES             │        30 │     33 │          0.00 │ S           │ LRIT      │ 608153424898293759 │ 639678622280122647 │ \x00\x00\x00\x00\x01@\x0E\x03iv\xBC\x1F\x00@ND\xB1x\xB3p\
  │
│ 2025-03-13 00:08:05 │ 209356000 │   3.958333 │   60.433333 │      0 │              174.0 │              │              13.0 │              │          │ 9768394 │ 5BBK5    │ BORIS DAVYDOV        │        84 │    299 │         12.10 │ S           │ LRIT      │ 608153422868250623 │ 639678620250946615 │ \x00\x00\x00\x00\x01@\x0F\xAA\xAA}\xEDk\xA9@N7wt\xAB\xA3\
  │
│ 2025-03-13 00:05:06 │ 209356000 │   3.956666 │      60.445 │      0 │              173.0 │              │              13.0 │              │          │ 9768394 │ 5BBK5    │ BORIS DAVYDOV        │        84 │    299 │         12.10 │ S           │ LRIT      │ 608153422868250623 │ 639678620245629839 │ \x00\x00\x00\x00\x01@\x0F\xA7@\x80\xF9\x8F\xA3@N8\xF5\xC2
  │
│ 2025-03-13 00:05:06 │ 209356000 │   3.956666 │      60.445 │      0 │              173.0 │              │              13.0 │              │          │ 9768394 │ 5BBK5    │ BORIS DAVYDOV        │        84 │    299 │         12.10 │ S           │ LRIT      │ 608153422868250623 │ 639678620245629839 │ \x00\x00\x00\x00\x01@\x0F\xA7@\x80\xF9\x8F\xA3@N8\xF5\xC2
  │
│ 2025-03-13 23:59:20 │ 219022165 │ 3.81623666 │ 60.42955666 │      7 │              212.6 │          326 │               0.2 │         -127 │        0 │       0 │ OWBS     │ HM228 PONDUS         │        30 │     28 │          5.00 │ S           │ A         │ 608153419546361855 │ 639678616932387447 │ \x00\x00\x00\x00\x01@\x0E\x87\xA7\x16\x03\xF8]@N6\xFB\xB6
  │
│ 2025-03-13 22:25:48 │ 219022165 │ 3.83790833 │ 60.37293666 │      7 │              356.9 │          354 │               2.6 │            0 │        0 │       0 │ OWBS     │ HM228 PONDUS         │        30 │     28 │          5.00 │ S           │ A         │ 608153421962280959 │ 639678619351091791 │ \x00\x00\x00\x00\x01@\x0E\xB4\x09HS*\xF5@N/\xBCcs\x16\xF9   │
│ 2025-03-13 22:25:48 │ 219022165 │ 3.83790833 │ 60.37293666 │      7 │              356.9 │          354 │               2.6 │            0 │        0 │       0 │ OWBS     │ HM228 PONDUS         │        30 │     28 │          5.00 │ S           │ A         │ 608153421962280959 │ 639678619351091791 │ \x00\x00\x00\x00\x01@\x0E\xB4\x09HS*\xF5@N/\xBCcs\x16\xF9   │
│ 2025-03-13 23:57:29 │ 219022165 │      3.815 │   60.428333 │      7 │              330.0 │              │               0.0 │              │          │       0 │ OWBS     │ HM228 PONDUS         │        30 │     28 │          5.00 │ S           │ LRIT      │ 608153419546361855 │ 639678616922679031 │ \x00\x00\x00\x00\x01@\x0E\x85\x1E\xB8Q\xEB\x85@N6\xD3\x9D
  │
│ 2025-03-13 23:57:28 │ 219022165 │      3.815 │   60.428333 │      7 │              330.0 │              │               0.0 │              │          │       0 │ OWBS     │ HM228 PONDUS         │        30 │     28 │          5.00 │ S           │ LRIT      │ 608153419546361855 │ 639678616922679031 │ \x00\x00\x00\x00\x01@\x0E\x85\x1E\xB8Q\xEB\x85@N6\xD3\x9D
  │
│ 2025-03-13 23:54:29 │ 219022165 │   3.816666 │   60.428333 │      7 │              318.0 │              │               0.0 │              │          │       0 │ OWBS     │ HM228 PONDUS         │        30 │     28 │          5.00 │ S           │ LRIT      │ 608153419546361855 │ 639678616922525039 │ \x00\x00\x00\x00\x01@\x0E\x88\x88/\x0E\x0A\x85@N6\xD3\x9D
  │
│ 2025-03-13 22:27:28 │ 219022165 │   3.836666 │   60.373333 │      7 │              359.0 │              │               2.0 │              │          │       0 │ OWBS     │ HM228 PONDUS         │        30 │     28 │          5.00 │ S           │ LRIT      │ 608153421962280959 │ 639678619351051575 │ \x00\x00\x00\x00\x01@\x0E\xB1}\xF1\x9Df\xAE@N/\xC9`0\xC2@   │
│ 2025-03-13 22:24:27 │ 219022165 │   3.836666 │   60.371666 │      7 │              355.0 │              │               2.0 │              │          │       0 │ OWBS     │ HM228 PONDUS         │        30 │     28 │          5.00 │ S           │ LRIT      │ 608153421962280959 │ 639678619351067943 │ \x00\x00\x00\x00\x01@\x0E\xB1}\xF1\x9Df\xAE@N/\x92\xC0a\x
  │
│ 2025-03-13 21:06:28 │ 219022165 │   3.851666 │      60.315 │      7 │              340.0 │              │               2.0 │              │          │       0 │ OWBS     │ HM228 PONDUS         │        30 │     28 │          5.00 │ S           │ LRIT      │ 608153422046167039 │ 639678619429798647 │ \x00\x00\x00\x00\x01@\x0E\xD06C\x88\xEB\xCC@N(Q\xEB\x85\x
  │
│ 2025-03-13 21:03:27 │ 219022165 │   3.853333 │   60.311666 │      7 │              339.0 │              │               2.0 │              │          │       0 │ OWBS     │ HM228 PONDUS         │        30 │     28 │          5.00 │ S           │ LRIT      │ 608153422046167039 │ 639678619430290455 │ \x00\x00\x00\x00\x01@\x0E\xD3\xA0@|\xC7\xD2@N\x27\xE4\xAB
  │
│ 2025-03-13 21:03:27 │ 219022165 │   3.853333 │   60.311666 │      7 │              339.0 │              │               2.0 │              │          │       0 │ OWBS     │ HM228 PONDUS         │        30 │     28 │          5.00 │ S           │ LRIT      │ 608153422046167039 │ 639678619430290455 │ \x00\x00\x00\x00\x01@\x0E\xD3\xA0@|\xC7\xD2@N\x27\xE4\xAB
  │
│ 2025-03-13 20:54:27 │ 219022165 │   3.856666 │   60.306666 │      7 │              345.0 │              │               2.0 │              │          │       0 │ OWBS     │ HM228 PONDUS         │        30 │     28 │          5.00 │ S           │ LRIT      │ 608153422046167039 │ 639678619433830087 │ \x00\x00\x00\x00\x01@\x0E\xDAs\xB4,\xC2\xD7@N\x27@\xD4\xD
  │
│ 2025-03-13 20:54:27 │ 219022165 │   3.856666 │   60.306666 │      7 │              345.0 │              │               2.0 │              │          │       0 │ OWBS     │ HM228 PONDUS         │        30 │     28 │          5.00 │ S           │ LRIT      │ 608153422046167039 │ 639678619433830087 │ \x00\x00\x00\x00\x01@\x0E\xDAs\xB4,\xC2\xD7@N\x27@\xD4\xD
  │
│ 2025-03-13 20:54:27 │ 219022165 │   3.856666 │   60.306666 │      7 │              345.0 │              │               2.0 │              │          │       0 │ OWBS     │ HM228 PONDUS         │        30 │     28 │          5.00 │ S           │ LRIT      │ 608153422046167039 │ 639678619433830087 │ \x00\x00\x00\x00\x01@\x0E\xDAs\xB4,\xC2\xD7@N\x27@\xD4\xD
  │
│ 2025-03-13 20:51:28 │ 219022165 │   3.858333 │   60.303333 │      7 │              345.0 │              │               2.0 │              │          │       0 │ OWBS     │ HM228 PONDUS         │        30 │     28 │          5.00 │ S           │ LRIT      │ 608153422046167039 │ 639678619434559663 │ \x00\x00\x00\x00\x01@\x0E\xDD\xDD\xB1 \x9E\xDC@N&\xD3\x9D
  │
├─────────────────────┎───────────┎────────────┎─────────────┎────────┎────────────────────┎──────────────┎───────────────────┎──────────────┎──────────┎─────────┎──────────┎──────────────────────┎───────────┎────────┎───────────────┎─────────────┎───────────┎────────────────────┎────────────────────┎──────────────────────────────────────────────────────────────
│ 28451 rows (40 shown)                                                                                                                                                                                                                                                                                                                                         21 columns │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
D SELECT * FROM haisdata WHERE h3_cell_to_parent(to_hex(hex_14), 4) LIKE '8409851ffffffff';

Bruk av Google Colab-notebooks¶

For mange vil det vÊre mer fleksibelt å jobbe med dataene i en notebook, spesielt når vi nå er blitt vant til det. La oss se hvordan vi kan ta med oss det vi har lÊrt inn i Google Colab.

Opprett en ny notebook¶

  1. GÃ¥ til Google Colab.

  2. Velg Fil → Ny notatbok. Du får opp en tom notatbok som ser slik ut:

Figur 6: Tom notebook.

Installer og last inn DuckDB¶

Start med å installere nÞdvendige pakker og laste inn utvidelsene:

# Last inn DuckDB og nÞdvendige tilleggsmoduler
!pip install lonboard==v0.13.0 duckdb==v1.4.2 plotly.express
import duckdb
con = duckdb.connect()
con.sql('INSTALL spatial;')
con.sql('INSTALL httpfs;')
con.sql('INSTALL h3 FROM community;')
con.sql('LOAD spatial;')
con.sql('LOAD httpfs;')
con.sql('LOAD h3;')

Last opp og importer data¶

  1. Klikk på mappeikonet i venstremenyen.

  2. Trykk på opplastingsikonet (pil opp) og velg Parquet-filene fra datamaskinen din.

Figur 7: Last opp filer fra maskinen din.

  1. Opprett en ny celle og les inn dataene:

con.sql('CREATE TABLE haisdata AS SELECT * FROM "*.parquet";')
  1. Test at alt fungerer:

con.sql('DESCRIBE haisdata;').pl()
column_namecolumn_typenullkeydefaultextra
date_time_utcTIMESTAMPYESnullnullnull
mmsiINTEGERYESnullnullnull
longitudeDOUBLEYESnullnullnull
latitudeDOUBLEYESnullnullnull
statusTINYINTYESnullnullnull
..................
data_sourceVARCHARYESnullnullnull
ais_classVARCHARYESnullnullnull
hex_7BIGINTYESnullnullnull
hex_14BIGINTYESnullnullnull
geometryGEOMETRYYESnullnullnull

Dataene er nå klare til analyse, visualisering og videre utforskning – over samme lest som vi har sett på i tidligere kapitler.

Oppsummering¶

I dette kapittelet har vi utforsket hvordan du kan arbeide med historiske AIS-data fra Kystverkets HAIS-tjeneste. La oss oppsummere de viktigste punktene:

HAIS-tjenesten:

SÞkemetoder:

Analyse i DuckDB:

H3-integrering:

Google Colab-integrasjon:

Praktiske anvendelser:

Med disse verktÞyene og teknikkene kan du nå utfÞre grundige analyser av historisk skipstrafikk!

Oppgaver¶