50

template:mapxy

Converts lat and lon to xy values from top-left corner of a mapframe in which latbase and lonbase are the centre of the map, returning the bare value of x or y as pixel coordinates.

Takes 8 essential parameters: un-named x or y, plus 7 named ones: lat, lon, latbase, lonbase, width, height, zoom

width and height are the size, in pixels, of the map, which will be centerd around lonbase,latbase

converts lon and lon-base to meter-offsets from coord(0,0), subtracts lonbase from lon, uses zoom and latbase to scale the resulting meter-offset to pixels, and adds it to width. and converts lat and lat-base to meter-offsets from coord(0,0), subtracts lat from latbase, scales the resulting meter-offset to pixels, adds it to height.

I have no idea why it needs the correction factor at higher latitudes. It only really affects marks near the outsides of the frame.

generates the "x": and "y" parameters for CSS values.

Original Python code for xy with 0,0 as the centre of the map print('"x"=',width+(((math.radians(lon1) * 6378137)-

     (math.radians(lonbase) * 6378137))/
     (156543.03*math.cos(latbase/180)/(2**zoom))),' y=',height+((
     (math.log(math.tan(math.pi / 4 + math.radians(latbase) / 2)) * 6378137)-
     (math.log(math.tan(math.pi / 4 + math.radians(lat1) / 2)) * 6378137))/
     (156543.03*math.cos(latbase/180)/(2**zoom)))
    ) 

sources: https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames and https://wiki.openstreetmap.org/wiki/Mercator