You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
vebit-map/projection.py

41 lines
1.0 KiB

#!/usr/bin/env python3
import math
# https://tools.ietf.org/html/rfc7946#page-12
# ~ latitude = 41.145556; // (φ)
# ~ longitude = -73.995; // (λ)
# Berlin 13.38,52.52 =>
lon = 13.38
lat = 52.52
# ~ mapWidth = 200;
# ~ mapHeight = 100;
w = 1000
h = 1000
def getMecatorPicCoords( lon, lat, w=1000, h=1000 ):
"""
transform coordinates in a mercator projection
for a picture with given size
"""
# get x value
# ~ x = (longitude+180)*(mapWidth/360)
x = (lon+180)*(w/360)
# convert from degrees to radians
# ~ latRad = latitude*PI/180;
# latRad = lat*math.pi/180 # used only once, so not stored in a variable
# get y value
# def ln(x): return math.log(x) # with single argument
# mercN = math.log(tan((math.pi/4)+(latRad/2))); # latRad integrated
# mercN = math.log(math.tan((math.pi/4)+(lat*math.pi/90))) # integrated as used once only
y = (h/2)-(w*math.log(math.tan((math.pi/4)+(lat*math.pi/90)))/(2*PI)) # mercN integrated
return (x,y)
# call the function
print( getMecatorPicCoords(x,y) )