# Plotting lon/lat point (without manual conversion) on XY map using GeoPandas?

I am data scientist not experienced in GIS and need to do some simple map plotting of the Netherlands. Using Geopandas everything works out nice and dandy for my purposes however I am stuck on 1 aspect:

The map I drew has the following CRS:

map_df__.crs {'init': 'epsg:28992'} (this is what NL looks like to de dutch native) I want to plot a couple of points of which I get the lon/lat coordinates from Google Maps.

Muddling my way to understand projections on the fly I got to this code:

``````map_df.to_crs(epsg=4289).plot(edgecolor='black')
``````

Which gives this map: (Red dot: Amsterdam is an example) To a Dutch person this map looks a bit squashed. I am guessing because because of the projection.

How do I plot a lon/lat point (without manual conversion) on an XY map i.e. how can make the squashed map look like the 'stretched' version?

The suggested espg: map_df.to_crs(epsg=3857).plot(edgecolor='black'), gives: • I am not sure I understand the question, but a popular projection is Web Mercator. Try EPSG:3857 to see if that looks more of what you'd expect. Apr 25, 2019 at 17:42
• Web Mercator is highly distorted as far north as the Netherlands. Apr 25, 2019 at 17:44
• It appears the part you are missing is the need to reproject your decimal degrees point into your preferred coordinate reference for mapping. Yes, a Plate Carrée of geographic 4289 will look squashed, because it's Plate Carrée. In order for your point to align with any other coordsys, it must be projected into that coordsys. Apr 25, 2019 at 19:04
• Please make sure Gerardus Mercator's birthplace is properly projected. Apr 25, 2019 at 19:34
• I would put your point in a geodataframe and use the reprojection support built into GeoPandas Apr 26, 2019 at 13:53

I would put your point in a geodataframe and use the reprojection support built into geopandas.

That looks like this:

``````from matplotlib import pyplot
from shapely.geometry import Point
import geopandas

final_crs = {'init': 'epsg:28992'}
NL = (
.to_crs(final_crs)
)

# note: always give `Point` x and then the y coord
amsterdamish = Point((4.9, 52.4))
gdf_am = geopandas.GeoSeries([amsterdamish], crs={'init': 'epsg:4326'})

fig, ax = pyplot.subplots(figsize=(6.5, 6.5))
NL.plot(ax=ax, facecolor='none', edgecolor='0.35')
gdf_am.to_crs(final_crs).plot(ax=ax)
``````

And I get: NB: my NL dataset is weird, but it came from here: https://www.eea.europa.eu/data-and-maps/data/eea-reference-grids-2/gis-files/netherlands-shapefile

I don't speak pandas, but:

map_df__.crs {'init': 'epsg:28992'}

likely tells it to map a dataframe, using the CRS (coordinate reference system) of a certain number (28992); which I looked up here: https://spatialreference.org/ref/epsg/28992/

Looking at your code, I do not see anything which adds a dot to the map.

EPSG stands for European Petroleum Survey Group. They publish a database of coordinate system information plus some very good related documents on map projections and datums.