Итак, вот мое решение проблемы, хотя я был бы очень признателен, если бы кто-то мог сделать его более симпатичным или более питоническим, или сказать мне, если есть ошибка. Я еще точно не понимаю, что я здесь делаю.
Итак, у меня есть GeoDataFrame
с именем gpd
, в котором есть информация и shapely.Point
с. Функция завершилась так (взято из здесь , с благодарностью):
def radius2(gpd_df, cpt, radius):
sindex = gpd_df.sindex
bbox = (cpt[1].x-radius,
cpt[1].y-radius,
cpt[1].x+radius,
cpt[1].y+radius)
good = []
for n in sindex.intersection(bbox):
dist = cpt[1].distance(gpd_df['geometry'][n])
if dist<radius:
good.append((cpt[0],dist,n))
good.sort()
return good
Теперь я называю это как
results = [radius2(aa, x, 0.01) for x in gt.values]
, что дает мне список списковиз кортежей, которые, в свою очередь, я просто
def functools_reduce_iconcat(a):
return functools.reduce(operator.iconcat, a, [])
red = functools_reduce_iconcat(results)
df = pd.DataFrame(red)
Я знаю, это не красиво, но сейчас это придется делать. Пожалуйста, предоставьте конструктивную критику.