Google Static Maps Problem
hh
hh at hyperhh.de
Fri Jun 30 23:27:47 EDT 2017
Sorry all, I'm used to work in the forums where one can easily edit posts to
remove errors and typos.
So here another correction, a constant (pixelsPerLonRadian) was wrong in the
first two versions above.
My last version, hope it's all correct now:
local MERCATOR_RANGE=256, pixelOrigin, pixelsPerLonDegree, pixelsPerLonRadian
on mouseUp
put (55.9537534, -3.1988236) into centerPoint -- LC Home
put trunc(the thumbpos of sb "zoom") into zom -- zoom
put 600 into wdth -- image width
put 450 into hght -- image height
put getCorners (centerpoint,zom,wdth,hght)
-- result is "SW: 55.780374,-3.610811,NE: 56.126359,-2.786836"
end mouseUp
function getCorners center,zom,mapWidth,mapHeight
put (MERCATOR_RANGE/2, MERCATOR_RANGE/2) into pixelOrigin
put MERCATOR_RANGE/360 into pixelsPerLonDegree
put MERCATOR_RANGE/2/pi into pixelsPerLonRadian
put 2^zom into scle
put fromLatLngToPoint(center) into centerPx
put ( (item 1 of centerPx)-(mapWidth/2)/scle, \
(item 2 of centerPx)+(mapHeight/2)/scle ) into SWPoint
put fromPointToLatLng(SWPoint) into SWLatLon
put ( (item 1 of centerPx)+(mapWidth/2)/scle, \
(item 2 of centerPx)-(mapHeight/2)/scle ) into NEPoint
put fromPointToLatLng(NEPoint) into NELatLon
return ("SW: " & SWLatLon, "NE: "& NELatLon)
end getCorners
function bound val, opt_min, opt_max
if (opt_min is not empty) then put max(val, opt_min) into val
if (opt_max is not empty) then put min(val, opt_max) into val
return val
end bound
function degreesToRadians deg
return deg * pi / 180;
end degreesToRadians
function radiansToDegrees rad
return 180 * rad / pi
end radiansToDegrees
function fromLatLngToPoint latLng, opt_point
put opt_point into point
put pixelOrigin into origin
put (item 1 of origin)+(item 2 of latLng)*pixelsPerLonDegree into item 1 of point
put bound(sin(degreesToRadians(item 1 of latLng)), -0.9999, 0.9999) into siny
put (item 2 of origin)+0.5*ln((1-siny)/(1+siny))*pixelsPerLonRadian into item 2 of point
return point
end fromLatLngToPoint
function fromPointToLatLng point
put pixelOrigin into origin
put (item 1 of point -item 1 of origin)/pixelsPerLonDegree into lng
put (item 2 of origin-item 2 of point)/pixelsPerLonRadian into latRadians
put radiansToDegrees(2*atan(exp(latRadians))-pi/2) into lat
return (lat,lng)
end fromPointToLatLng
// pixelCoordinate = worldCoordinate * 2^zoomLevel
More information about the use-livecode
mailing list