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:
Tidsperiode (fraâtil)
TidsopplÞsning (full opplÞsning, hvert femte minutt, hver time)
Dataformat (CSV eller (Geo)Parquet â velg (Geo)Parquet)
E-postadresse for mottak av data
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:
Dykking
Fiskebåter
Forurensningsbekjempelse
Fritidsbåt
Havnebåt
HÞyhastighetsfartÞy
Lasteskip
Losbåt
Medisinsk transport
MilitÊr
Mudring/undervannsoperasjoner
Passasjerskip
Politi/lovhåndhevelse
SÞk og redning (SAR)
Slepebåt
Taubåt
Tankskip
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:
| Kolonner | Meldingstype | Datatype | Beskrivelse |
|---|---|---|---|
| date_time_utc | 1,2,3,5,18,24,27 | DateTime | Tidsstempel i UTC |
| mmsi | 1,2,3,5,18,27 | Integer | Maritime Mobile Service Identity-nummer (ID på fartÞyets transponder) |
| longitude | 1,2,3,18,27 | Float | Lengdegrad |
| latitude | 1,2,3,18,27 | Float | Breddegrad |
| status | 1,2,3,18,27 | Integer | Skipets navigasjonsstatus (les mer) |
| course_over_ground | 1,2,3,18,27 | Float | FartÞyets kurs over bakken i henhold til kompassnord. |
| true_heading | 1,2,3,18,27 | Integer | Den retningen fartÞyet peker i henhold til kompassnord (0-359 grader) |
| speed_over_ground | 1,2,3,18,27 | Float | FartÞyets fart i knop |
| rate_of_turn | 1,2,3,18,27 | Float | Rotasjonsrate |
| maneuvre | 1,2,3,18,27 | Integer | ManÞverinformasjon |
| imo | 5,24 | Integer | Skrogets IMO-nummer (satt av International Maritime Organization). |
| callsign | 5,24 | String | Radiokallesignal |
| ship_name | 5,24 | String | Skipets navn |
| ship_type | 5,24 | Integer | Skipstype fra AIS |
| length | 5,24 | Float | Lengde på skipet |
| draught | 5,24 | Float | Skipets dypgang |
| data_source | Generert kolonne | String | Datakilde (g: bakkestasjon, s: satelitt) |
| date_utc | Generert kolonne | Date | Dato-kolonne for filtrering på kun dato X |
| geometry | Generert kolonne | String | Geometri-kolonne i WKB-format generert av ST_Point(lon, lat) |
| hex_14 | Generert kolonne | Integer | H3-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¶
à pne Terminal (Mac/Linux) eller PowerShell (Windows), og naviger til mappen der du pakket ut Parquet-filene.
Start DuckDB med fÞlgende kommando:
duckdb geoparquet-hais.dbDuckDB starter med et prompt som ser noenlunde slik ut:
DuckDB v1.4.1 (Andium) b390a7c376
Enter ".help" for usage hints.
DInstaller 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.
Finn Þnsket H3-celle ved hjelp av et verktÞy som H3 Viewer.
Bruk for eksempel
8409851ffffffffmed opplÞsning4.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¶
GÃ¥ til Google Colab.
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¶
Klikk på mappeikonet i venstremenyen.
Trykk på opplastingsikonet (pil opp) og velg Parquet-filene fra datamaskinen din.
Figur 7: Last opp filer fra maskinen din.
Opprett en ny celle og les inn dataene:
con.sql('CREATE TABLE haisdata AS SELECT * FROM "*.parquet";')Test at alt fungerer:
con.sql('DESCRIBE haisdata;').pl()| column_name | column_type | null | key | default | extra |
|---|---|---|---|---|---|
| date_time_utc | TIMESTAMP | YES | null | null | null |
| mmsi | INTEGER | YES | null | null | null |
| longitude | DOUBLE | YES | null | null | null |
| latitude | DOUBLE | YES | null | null | null |
| status | TINYINT | YES | null | null | null |
| ... | ... | ... | ... | ... | ... |
| data_source | VARCHAR | YES | null | null | null |
| ais_class | VARCHAR | YES | null | null | null |
| hex_7 | BIGINT | YES | null | null | null |
| hex_14 | BIGINT | YES | null | null | null |
| geometry | GEOMETRY | YES | null | null | null |
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:
Gir tilgang til historiske AIS-data opptil ett år tilbake
StÞtter sÞk på skipstype, enkeltfartÞy eller geografisk område
Leverer data i GeoParquet-format med H3-indeksering
Krever valg av tidsperiode, opplÞsning og dataformat
SÞkemetoder:
Skipstype: Filtrer på kategorier som passasjerskip, tankskip, fiskebåter
EnkeltfartÞy: SÞk på navn, MMSI, IMO eller kallesignal
Geografisk: Definer område med kartverktÞy eller WKT-fil
Begrensninger: Ikke kombiner skipstype og enkeltfartÞy i samme sÞk
Analyse i DuckDB:
Import av Parquet-filer direkte fra lokal disk
Utforskning av datastruktur med DESCRIBE
Telling og filtrering av fartÞy og datapunkter
Eksport av ruter som GeoJSON for visualisering
H3-integrering:
HAIS inkluderer H3-ID i opplÞsning 14
SÞk etter trafikk i spesifikke H3-celler
Konvertering mellom tallverdier og heksadesimale ID-er
Google Colab-integrasjon:
Opprett notebook og installer DuckDB med utvidelser
Last opp Parquet-filer via grensesnittet
KjÞr samme analyser som i terminal-basert DuckDB
Fleksibilitet for iterativ utforskning og visualisering
Praktiske anvendelser:
Kartlegge skipsbevegelser over tid
Analysere trafikkmÞnstre i spesifikke områder
Identifisere mÞnstre for enkeltfartÞy
Kombinere med andre datakilder for dypere innsikt
Med disse verktÞyene og teknikkene kan du nå utfÞre grundige analyser av historisk skipstrafikk!