forked from vv01f/ccc-map
42 lines
1.0 KiB
Python
42 lines
1.0 KiB
Python
#!/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) )
|