Чтобы сделать мою проблему понятной, я сначала строю два простых GeoDataFrames с одним столбцом каждый для точечной геометрии, расширяю первый на столько столбцов, сколько есть во втором, и заполняю его соответствующими значениями второй.
df_1 = pd.DataFrame(
{"geometry":["POINT (4601713.002 3161641.211)",
"POINT (4596192.207 3241423.174)",
"POINT (4572005.011 3257270.689)"]})
df_1['geometry'] = df_1['geometry'].apply(wkt.loads)
gdf_1 = gp.GeoDataFrame(df_1,
geometry="geometry",
crs={'init': 'epsg:' + str(3035)})
df_2 = pd.DataFrame(
{'geometry':["POINT (4627355.438 3211988.792)",
"POINT (4599267.641 3220442.514)",
"POINT (4557279.752 3237223.279)"]})
df_2['geometry'] = df_2['geometry'].apply(wkt.loads)
gdf_2 = gp.GeoDataFrame(df_2,
geometry="geometry",
crs={'init': 'epsg:' + str(3035)})
gdf_2 = gdf_2.assign(Name = lambda x: 'gdf2_' + (gdf_2.index.astype(str)))
gdf_1 = gdf_1.assign(**dict.fromkeys(gdf_2.Name))
# Loop through df_1:
columnsOfInterest = gdf_1.columns[gdf_1.columns.str.startswith("gdf2_")]
for i in columnsOfInterest:
# get the geometry from gdf_1: (works!)
gdf_1[i]= list(gdf_1[columnsOfInterest==i].geometry)*len(gdf_1)
gdf_1
DataFrame_gdf_1
Теперь у меня проблемы с вычислением расстояния. Поскольку в исходных наборах данных у меня много точечных данных, мне нужно решение, которое позволило бы мне рассчитать расстояния за один шаг. До сих пор я пытался провести l oop через новые столбцы df_1, но вычисление расстояния, похоже, не работает на серии. Я получаю AttributeError: «Объект« Series »не имеет атрибута« distance »»).
# Loop through df_1:
columnsOfInterest = gdf_1.columns[gdf_1.columns.str.startswith("gdf2_")]
for i in columnsOfInterest:
# get the geometry from gdf_1: (works!)
gdf_1[i]= list(gdf_1[columnsOfInterest==i].geometry)*len(gdf_1)
# distance calculation: (does not work!)
gdf_1[i]=gdf_1[i].distance(gdf_1.geometry)
gdf_1
Кто-нибудь знает решение проблемы?