Open NiklasPhabian opened 1 year ago
rings = df.to_crs(5070).exterior
avg_len = []
for geom in rings:
avg_len.append(geom.length/len(geom.xy[0]))
df['avg_len'] = avg_len
def level(length):
if length < 625:
return 14
elif length < 1250:
return 13
elif length < 2500:
return 12
elif length < 5000:
return 11
elif length < 10000:
return 10
elif length < 20000:
return 9
elif length < 40000:
return 8
else:
return 7
df['level'] = df.avg_len.map(level)
def make_sids(row):
ring = row.geometry.exterior
level = row.level
if not ring.is_ccw:
ring = shapely.geometry.LinearRing(ring.coords[::-1])
latlon = ring.coords.xy
lon = latlon[0]
lat = latlon[1]
range_indices = pystare.cover_from_ring(lat, lon, level)
return range_indices
ddf = dask.dataframe.from_pandas(df, npartitions=600)
meta = {'name': 'int64'}
res = ddf.apply(make_sids, meta=meta, axis=1)
sids = res.compute(scheduler='processes', num_workers=60)
sids.name = 'sids'
It may be of interest to set the level for each row of a dataframe individually