This is an extract of the data from Shadow Fleet section of the Ukrainian Government's War Sanctions website, served up as a Portolan / STAC catalog.
# GUR Shadow Fleet — Visits
The many-to-many link between vessels and ports — one row per recorded port call (~19,700 edges). Each row carries the vessel (IMO, GUR id, name), the port (id, name, country, Russian flag) and the port's point geometry, so it maps directly. Join to **vessels** on `imo` and to **ports** on `port_id`. Also published as PMTiles.
Format: GeoParquet + PMTiles · Rows: 19,678
Data: https://data.source.coop/cholmes/gur-shadow-fleet/visits/visits.parquet
Collection: https://data.source.coop/cholmes/gur-shadow-fleet/visits/collection.json
Browser: https://browser.portolan-sdi.org/#/external/data.source.coop/cholmes/gur-shadow-fleet/visits/collection.json
Tiles: https://data.source.coop/cholmes/gur-shadow-fleet/visits/visits.pmtiles
## Columns
- `imo` (varchar) — IMO vessel identifier number
- `vessel_gur_id` (varchar) — GUR ID of the vessel
- `vessel_name` (varchar) — Name of the vessel
- `port_id` (bigint) — Unique port identifier
- `port_name` (varchar) — Name of the port visited
- `port_country` (varchar) — Country of the port visited
- `is_russian` (boolean) — Whether the port is in Russia
- `lat` (double) — Latitude (WGS84)
- `lng` (double) — Longitude (WGS84)
- `geometry` (geometry) — Point/MultiPoint geometry (WGS84)
## Query (DuckDB)
```sql
INSTALL spatial; LOAD spatial;
-- Every port call by one vessel (by IMO string)
SELECT vessel_name, port_name, port_country, is_russian
FROM read_parquet('https://data.source.coop/cholmes/gur-shadow-fleet/visits/visits.parquet')
WHERE imo = '9261657';
```
Rights: © GUR, War & Sanctions portal — no open license asserted (see ../RIGHTS.md).