Note
Go to the end to download the full example code.
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
11:31:29 INFO opendrift:507: OpenDriftSimulation initialised (version 1.14.2 / v1.14.2-23-g09d0c2d)
Seed particles within all polygons from shapefile
o.seed_from_shapefile(test_data_folder +
'shapefile_spawning_areas/Torsk.shp',
number=1000, time=datetime.utcnow())
/root/project/examples/example_seed_from_shapefile.py:19: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
number=1000, time=datetime.utcnow())
11:31:29 INFO opendrift.models.basemodel.environment:206: Adding a global landmask from GSHHG
11:31:34 INFO opendrift.models.basemodel.environment:229: Fallback values will be used for the following variables which have no readers:
11:31:34 INFO opendrift.models.basemodel.environment:232: x_sea_water_velocity: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: y_sea_water_velocity: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: sea_surface_height: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: x_wind: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: y_wind: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: upward_sea_water_velocity: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: ocean_vertical_diffusivity: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: sea_surface_wave_significant_height: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: sea_surface_wave_stokes_drift_x_velocity: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: sea_surface_wave_stokes_drift_y_velocity: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: sea_surface_wave_period_at_variance_spectral_density_maximum: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: sea_surface_wave_mean_period_from_variance_spectral_density_second_frequency_moment: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: sea_surface_swell_wave_to_direction: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: sea_surface_swell_wave_peak_period_from_variance_spectral_density: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: sea_surface_swell_wave_significant_height: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: sea_surface_wind_wave_to_direction: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: sea_surface_wind_wave_mean_period: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: sea_surface_wind_wave_significant_height: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: surface_downward_x_stress: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: surface_downward_y_stress: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: turbulent_kinetic_energy: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: turbulent_generic_length_scale: 0.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: ocean_mixed_layer_thickness: 50.000000
11:31:34 INFO opendrift.models.basemodel.environment:232: sea_floor_depth_below_sea_level: 10000.000000
11:31:34 INFO opendrift:1523: Seeding 1000 elements within 8 polygons
11:31:34 INFO opendrift:1535: Seeding 88 elements within polygon number 1 of area 16914.1561363245 km2
11:31:34 INFO opendrift:1535: Seeding 114 elements within polygon number 2 of area 22025.651607662567 km2
11:31:34 INFO opendrift:1535: Seeding 613 elements within polygon number 3 of area 118549.4287716422 km2
11:31:34 INFO opendrift:1535: Seeding 18 elements within polygon number 4 of area 3429.86024645089 km2
11:31:34 INFO opendrift:1535: Seeding 23 elements within polygon number 5 of area 4460.511714037541 km2
11:31:34 INFO opendrift:1535: Seeding 81 elements within polygon number 6 of area 15582.701473774634 km2
11:31:34 INFO opendrift:1535: Seeding 24 elements within polygon number 7 of area 4696.037566369465 km2
11:31:34 INFO opendrift:1535: Seeding 39 elements within polygon number 8 of area 7617.026431077248 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.utcnow())
o.plot(fast=True)

/root/project/examples/example_seed_from_shapefile.py:26: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
o.seed_from_geopandas(gdf, number=2000, time=datetime.utcnow())
11:31:34 INFO opendrift:1523: Seeding 2000 elements within 2 polygons
11:31:34 INFO opendrift:1535: Seeding 1171 elements within polygon number 1 of area 22025.651607662567 km2
11:31:34 INFO opendrift:1535: Seeding 829 elements within polygon number 2 of area 15582.701473774634 km2
11:31:34 WARNING opendrift:2459: Plotting fast. This will make your plots less accurate.
(<GeoAxes: title={'center': 'OpenDrift - OceanDrift\n3000 elements seeded at 2025-05-28 11:31 UTC'}>, <Figure size 719.781x1100 with 1 Axes>)
Total running time of the script: (0 minutes 12.220 seconds)