Skip to content

Commit c7b9a0d

Browse files
authored
Merge pull request #1759 from knutfrode/dev
[run-ex] Factoring out method points_within_polygon from seed_within_…
2 parents 35208be + 3c1ff11 commit c7b9a0d

2 files changed

Lines changed: 22 additions & 13 deletions

File tree

opendrift/models/basemodel/__init__.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1459,6 +1459,16 @@ def seed_within_polygon(self, lons, lats, number=None, **kwargs):
14591459
if number is None:
14601460
number = self.get_config('seed:number')
14611461

1462+
lonpoints, latpoints = self.points_within_polygon(lons, lats, number)
1463+
1464+
# Finally seed at calculated positions
1465+
self.seed_elements(lonpoints, latpoints, number=number, **kwargs)
1466+
1467+
@staticmethod
1468+
def points_within_polygon(lons, lats, number):
1469+
"""Return a number of positions (lon, lat) within given polygon.
1470+
1471+
Helper method for seed_within_polygon"""
14621472
lons = np.asarray(lons)
14631473
lats = np.asarray(lats)
14641474
if len(lons) < 3:
@@ -1526,8 +1536,7 @@ def seed_within_polygon(self, lons, lats, number=None, **kwargs):
15261536
else:
15271537
break
15281538

1529-
# Finally seed at calculated positions
1530-
self.seed_elements(lonpoints, latpoints, number=number, **kwargs)
1539+
return lonpoints, latpoints
15311540

15321541
@require_mode(mode=Mode.Ready)
15331542
def seed_from_wkt(self, wkts, time, **kwargs):
@@ -1597,13 +1606,11 @@ def seed_from_geopandas(self,
15971606
for e, (n, polygon) in enumerate(zip(number_per_polygon, g_lonlat.geometry.explode(index_parts=False))):
15981607
logger.info(f'Seeding {n} elements within polygon number {e+1} of area {areas[e]/1e6} km2')
15991608
lons, lats = polygon.exterior.coords.xy
1600-
all_lons = np.append(all_lons, lons)
1601-
all_lats = np.append(all_lats, lats)
1602-
self.seed_within_polygon(lons=all_lons,
1603-
lats=all_lats,
1604-
number=number,
1605-
time=time,
1606-
**kwargs)
1609+
lonpoints, latpoints = self.points_within_polygon(lons, lats, n)
1610+
all_lons = np.append(all_lons, lonpoints)
1611+
all_lats = np.append(all_lats, latpoints)
1612+
1613+
self.seed_elements(lon=all_lons, lat=all_lats, number=number, time=time, **kwargs)
16071614

16081615
@require_mode(mode=Mode.Ready)
16091616
def seed_letters(self, text, lon, lat, time, number, scale=1.2):

tests/models/test_run.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -274,11 +274,13 @@ def test_seed_shapefile(self):
274274
g = g.iloc[[1, 3]] # Selecting layers number 1 and 3
275275
o.seed_from_geopandas(g, number=1000, time=datetime.now())
276276
self.assertEqual(len(o.elements_scheduled), 1000)
277-
o.seed_from_shapefile(tdf +
278-
'shapefile_spawning_areas/Torsk.shp',
279-
number=300, time=datetime.now())
277+
age_seconds = np.arange(0, 300) # Check that vector of seed property is preserved
278+
o.seed_from_shapefile(tdf + 'shapefile_spawning_areas/Torsk.shp',
279+
number=300, time=datetime.now(), age_seconds=age_seconds)
280280
self.assertEqual(len(o.elements_scheduled), 1300)
281-
self.assertAlmostEqual(o.elements_scheduled.lat[-1], 55.04, 2)
281+
self.assertAlmostEqual(o.elements_scheduled.lat[-1], 51.74, 2)
282+
self.assertAlmostEqual(o.elements_scheduled.age_seconds[-1], age_seconds[-1], 2)
283+
self.assertAlmostEqual(o.elements_scheduled.age_seconds[-2], age_seconds[-2], 2)
282284

283285
@unittest.skipIf(has_ogr is False,
284286
'GDAL library needed to read shapefiles')

0 commit comments

Comments
 (0)