GeoPandas distance calculations are non-intuitive: they only work if you convert your data to the right CRS.
Calculating distance over short distances has been explained here:
import geopandas as gpd
from shapely.geometry import Point
geom=[Point(xy) for xy in zip([117.454361,117.459880],[38.8459879,38.846255])]
gdf=gpd.GeoDataFrame(geometry=geom,crs={'init':'epsg:4326'})
gdf.to_crs(epsg=3310,inplace=True)
gdf.distance(gdf.shift())
The result is 479.450134meters.
However, calculating distance over different continents is not so easy. The available UTM systems are invariably local. Consider the following example calculating the difference between a point in Japan and a point in Russia:
geom=[Point(xy) for xy in zip([137.72000, 36.240000],[53.05199, 63.349449])]
gdf=gpd.GeoDataFrame(geometry=geom,crs={'init':'epsg:4326'})
gdf.to_crs(epsg=3310,inplace=True)
gdf.distance(gdf.shift())
This gives a distance of 1.202962e+07 meters, which is a bit far.
This user suggested using EPSG 32663. Unfortunately it doesn't help:
geom=[Point(xy) for xy in zip([137.72000, 36.240000],[53.05199, 63.349449])]
gdf=gpd.GeoDataFrame(geometry=geom,crs={'init':'epsg:4326'})
gdf.to_crs(epsg=32663,inplace=True)
gdf.distance(gdf.shift())
The result is 1.135471e+07 meters, still almost twice as far as the correct distance of about 6200km.
What is the correct way to do this calculation?