Seeding from shapefile

from datetime import datetime
import geopandas as gpd
from opendrift import test_data_folder
from opendrift.models.oceandrift import OceanDrift


o = OceanDrift(loglevel=20)  # Set loglevel to 0 for debug information
13:48:03 INFO    opendrift:569: OpenDriftSimulation initialised (version 1.14.4 / v1.14.4-9-g23fa4d2)

Seed particles within all polygons from shapefile

o.seed_from_shapefile(test_data_folder +
                      'shapefile_spawning_areas/Torsk.shp',
                      number=1000, time=datetime.now())
13:48:03 INFO    opendrift.models.basemodel.environment:203: Adding a global landmask from GSHHG
13:48:07 INFO    opendrift.models.basemodel.environment:227: Fallback values will be used for the following variables which have no readers:
13:48:07 INFO    opendrift.models.basemodel.environment:230:    x_sea_water_velocity: 0.000000
13:48:07 INFO    opendrift.models.basemodel.environment:230:    y_sea_water_velocity: 0.000000
13:48:07 INFO    opendrift.models.basemodel.environment:230:    sea_surface_height: 0.000000
13:48:07 INFO    opendrift.models.basemodel.environment:230:    x_wind: 0.000000
13:48:07 INFO    opendrift.models.basemodel.environment:230:    y_wind: 0.000000
13:48:07 INFO    opendrift.models.basemodel.environment:230:    upward_sea_water_velocity: 0.000000
13:48:07 INFO    opendrift.models.basemodel.environment:230:    ocean_vertical_diffusivity: 0.000000
13:48:07 INFO    opendrift.models.basemodel.environment:230:    sea_surface_wave_significant_height: 0.000000
13:48:07 INFO    opendrift.models.basemodel.environment:230:    sea_surface_wave_stokes_drift_x_velocity: 0.000000
13:48:07 INFO    opendrift.models.basemodel.environment:230:    sea_surface_wave_stokes_drift_y_velocity: 0.000000
13:48:07 INFO    opendrift.models.basemodel.environment:230:    ocean_mixed_layer_thickness: 50.000000
13:48:07 INFO    opendrift.models.basemodel.environment:230:    sea_floor_depth_below_sea_level: 10000.000000
13:48:07 INFO    opendrift:1568: Seeding 1000 elements within 8 polygons
13:48:07 INFO    opendrift:1582: Seeding 88 elements within polygon number 1 of area 16914.15613632447 km2
13:48:07 INFO    opendrift:1582: Seeding 114 elements within polygon number 2 of area 22025.65160766266 km2
13:48:07 INFO    opendrift:1582: Seeding 613 elements within polygon number 3 of area 118549.42877164166 km2
13:48:07 INFO    opendrift:1582: Seeding 18 elements within polygon number 4 of area 3429.860246450984 km2
13:48:07 INFO    opendrift:1582: Seeding 23 elements within polygon number 5 of area 4460.511714037543 km2
13:48:07 INFO    opendrift:1582: Seeding 81 elements within polygon number 6 of area 15582.701473774676 km2
13:48:07 INFO    opendrift:1582: Seeding 24 elements within polygon number 7 of area 4696.037566369465 km2
13:48:07 INFO    opendrift:1582: Seeding 39 elements within polygon number 8 of area 7617.026431077204 km2

Alternative by using GeoPandas and selecting a subset of two polygons

gdf = gpd.read_file(test_data_folder + 'shapefile_spawning_areas/Torsk.shp')
gdf = gdf.iloc[[1, 5]]
o.seed_from_geopandas(gdf, number=2000, time=datetime.now())

o.plot(fast=True)
OpenDrift - OceanDrift 3000 elements seeded at 2025-10-23 13:48 UTC
13:48:08 INFO    opendrift:1568: Seeding 2000 elements within 2 polygons
13:48:08 INFO    opendrift:1582: Seeding 1171 elements within polygon number 1 of area 22025.65160766266 km2
13:48:08 INFO    opendrift:1582: Seeding 829 elements within polygon number 2 of area 15582.701473774676 km2
13:48:08 WARNING opendrift:2453: Plotting fast. This will make your plots less accurate.

(<GeoAxes: title={'center': 'OpenDrift - OceanDrift\n3000 elements seeded at 2025-10-23 13:48 UTC'}>, <Figure size 636.11x1100 with 1 Axes>)

Total running time of the script: (0 minutes 15.563 seconds)

Gallery generated by Sphinx-Gallery