# Shapely flips lat/long coordinate

I have a pandas dataframe containing a Shapely geometry object. The shapely object (circle) was computed from the following SO https://stackoverflow.com/questions/27431528/find-the-intersection-between-two-geographical-data-points, where I have lat, long, and radius as input.

``````import pandas as pd
from shapely.geometry import Point
from shapely.ops import transform
import pyproj
from functools import partial

WGS84 = pyproj.Proj('epsg:4326')

proj4str = '+proj=aeqd +lat_0=%s +lon_0=%s +x_0=0 +y_0=0' % (lat, lon)
AEQD = pyproj.Proj(proj4str) # azimuthal equidistant
project = partial(pyproj.transform, AEQD, WGS84)
``````

For example, using the above function, I created a table like below, with an additional centroid column

``````geometry, centroid
POLYGON((26.48306 50.09625, 26.47916 50.09604, ..)), ((26.48307336330026, 50.052005610561245))
``````

But when I convert this table to geopandas and plot it on mplleaflet

``````import geopandas as gpd
import mplleaflet
import matplotlib.pyplot as plt

df_gpd = gpd.GeoDataFrame(df)
ax = df_gpd.plot(figsize=(20,20), color='r')

mplleaflet.display(fig=ax.figure)
``````

it displays the polygon in a different location than expected.

Below is what's plotted

And this is the location of the expected circle centroid

I figured out that even though the Polygon shows the coordinates in (lat, long) format, when mplleaflet is plotting, it swaps the coordinates to (long, lat).

Is Polygon object holding the coordinates in (long, lat) format, and mplleaflet is flipping the coordinates to properly plot it on the map?

The result I'm expecting is a circle centered around the centroid (26.48307336330026, 50.052005610561245) which is in (lat, long) format.

tldr: I would like to know if mplleaflet flips the coordinates to (long, lat) when plotting Polygon object in Geopandas, or the Polygon object using the function `latlonbuffer()` results in (long, lat) format.

Update:

The problem was with pyproj flipping the coordinates while transforming. We can keep the Polygon object to the GIS standard (long, lat) by adding always_xy=True in the transform parameter.

``````import pandas as pd
from shapely.geometry import Point
from shapely.ops import transform
import pyproj
from functools import partial

WGS84 = pyproj.Proj('epsg:4326')

proj4str = '+proj=aeqd +lat_0=%s +lon_0=%s +x_0=0 +y_0=0' % (lat, lon)
AEQD = pyproj.Proj(proj4str) # azimuthal equidistant
project = partial(pyproj.transform, AEQD, WGS84, always_xy=True)
``````

Using this yields

``````POLYGON((50.09625 26.48306, 50.09604 26.47916, ..))
``````

which can be directly plotted using mplleaflet without flipping the coordinates.

• There is a GDAL ticket github.com/OSGeo/gdal/issues/2979 with discussion about axis order in WKT. I would suggest to build your polygon WKT in traditional GIS style (long-lat or easting-northing). It may not be correct, but it is the more interoperable alternative. Oct 16, 2020 at 6:29