Using PyProj/Programming to Convert Lat/Lon to X,Y on a Gnomonic Projection

As a preface, I'm pretty new to the world of GIS. I'm working on a personal project to create interactive event timelines over custom maps. Being I'd like to be able to intake a an event location (in Latitude/Longitude values) and place it at the correct point on a map, I'd need to be sure I knew how to convert those Lat/Lon values to the appropriate cartesian coordinates over map image I'm using.

Right now, I'm working with a Gnomonic projection of Europe centered on 51N, 15E, with a edge angle of 15 degrees (admittedly not sure what edge angle means, precisely).

I was originally using the formula laid out here (http://mathworld.wolfram.com/GnomonicProjection.html) to try and convert between lat,lon and x,y - but I'm realizing I have no idea how to take the output X,Y value and transform it into something I can use for this specific map (being it doesn't take into account the center being on Europe, or particular "zoom")

So, to get to the point - do you have any suggestions for programs/libraries I can use to do this conversion for a subset of a map projection? Right now I'm pretty lost as to what steps I'd need to take to get form point A to B - so even an outline of how you might approach the problem would be super enlightening.

Conversion to Gnomonic (or any other) projection can be achieved using the `pyproj.Proj` class, which implements functionality similar to the Proj `proj(1)` command-line tool: https://pyproj4.github.io/pyproj/stable/api/proj.html

You can set the central longitude and latitude easily, but I don't think there's a way to set the edge angle. However you can set the ellipsoid used for the projection, and I think that should allow you to adjust the edge angle indirectly. However I don't know how to compute the needed ellipsoid from a desired edge angle. Hopefully someone who is more of an expert (I am a newbie myself) can come along to explain this part in more detail!

``````from pyproj import Proj

center_lon = 15.0
center_lat = 51.0
proj = Proj(proj="gnom", lon_0=center_lon, lat_0=center_lat)
``````

You can then use the `Proj.transform` method to transform your data as needed: https://pyproj4.github.io/pyproj/stable/api/proj.html#pyproj.Proj.transform

If you are working with Shapely geometry objects, you can use `shapely.ops.transform` to transform the entire shape at once.