Если посмотреть на __init__
метод GeoDataFrame в https://github.com/geopandas/geopandas/blob/master/geopandas/geodataframe.py,, похоже, что GDF может иметь только один столбец за раз. Другие созданные вами столбцы должны по-прежнему содержать геометрические объекты.
Поскольку у вас все еще есть геометрические объекты в каждом столбце, вы можете написать метод, использующий метод Shapely distance
, например:
import pandas as pd
import geopandas
from shapely.geometry import Point
import matplotlib.pyplot as plt
lats = [-34.58, -15.78, -33.45, 4.60, 10.48]
lons = [-58.66, -47.91, -70.66, -74.08, -66.86]
df = pd.DataFrame(
{'City': ['Buenos Aires', 'Brasilia', 'Santiago', 'Bogota', 'Caracas'],
'Country': ['Argentina', 'Brazil', 'Chile', 'Colombia', 'Venezuela'],
'Latitude': lats,
'Longitude': lons})
df['Coordinates'] = list(zip(df.Longitude, df.Latitude))
df['Coordinates'] = df['Coordinates'].apply(Point)
df['Coordinates_2'] = list(zip(lons[::-1], lats[::-1]))
df['Coordinates_2'] = df['Coordinates_2'].apply(Point)
gdf = geopandas.GeoDataFrame(df, geometry='Coordinates')
def get_distance(row):
distance = row.Coordinates.distance(row.Coordinates_2)
print(distance)
return distance
gdf['distance'] = gdf.apply(lambda row: get_distance(row), axis=1)
Что касается AttributeError: 'MultiPolygon' object has no attribute 'encode'
. MultiPolygon
- класс геометрии Shapely. encode
обычно является методом для строковых объектов, поэтому вы, вероятно, можете удалить вызов wkt.loads
.