how map 2d grid points (x,y) onto sphere as 3d points (x,y,z)

21,856

Solution 1

Paraphrased from the wikipedia article on Mercator projection:

Given a "mapping sphere" of radius R,
the Mercator projection (x,y) of a given latitude and longitude is:
   x = R * longitude
   y = R * log( tan( (latitude + pi/2)/2 ) )

and the inverse mapping of a given map location (x,y) is:
  longitude = x / R
  latitude = 2 * atan(exp(y/R)) - pi/2

To get the 3D coordinates from the result of the inverse mapping:

Given longitude and latitude on a sphere of radius S,
the 3D coordinates P = (P.x, P.y, P.z) are:
  P.x = S * cos(latitude) * cos(longitude)
  P.y = S * cos(latitude) * sin(longitude)
  P.z = S * sin(latitude)

(Note that the "map radius" and the "3D radius" will almost certainly have different values, so I have used different variable names.)

Solution 2

I suppose that your (x,y) on the sphere are latitude, longitude.

If so, see http://tutorial.math.lamar.edu/Classes/CalcII/SphericalCoords.aspx.

enter image description here

There:

phi = 90 degree - latitude

theta = longitude

rho = radius of your sphere.

Solution 3

I would expect that you could use the inverse of any of a number of globe projections.

Mercator is pretty good around the equator compared to other projections.

Formulas are on the wiki page.
http://en.wikipedia.org/wiki/Mercator_projection

Share:
21,856
milkplus
Author by

milkplus

Updated on July 09, 2022

Comments

  • milkplus
    milkplus almost 2 years

    I have a set of 2d grid points (x,y) that I want to map/project onto a sphere as 3d points (x,y,z).

    I realize there will be some warping towards the poles as abs(y) increases but my grid patch will only cover a portion of the sphere near the equator so severe warping will be avoided.

    I'm having trouble finding the right equations for that.

  • milkplus
    milkplus over 11 years
    thanks. i realize that is what i want but i'm having trouble deriving the equations for taking 2d points (x,y) to 3d points (x,y,z) on the sphere.
  • kreativitea
    kreativitea over 11 years
    Ah, the actual formulae. This is a non-trivial mathematical operation, and you might have better luck on math.stackexchange.com. Once you get the formula, you can come back here for help programming it. Also, wiki.openstreetmap.org/wiki/Mercator
  • Pikamander2
    Pikamander2 over 8 years
    My latitude is 29.65163. When I try to calculate the y value, I'm getting an error (in Python) because tan((latitude + pi/2)/2) is -0.0970531183, and performing log on that value throws a "math domain error" since the value is negative. What am I doing wrong?
  • comingstorm
    comingstorm over 8 years
    You need to convert your latitude from degrees to radians, before adding pi/2. This will convert the range +/- 90 degrees to a range of +/- pi/2 radians, which will not overflow the function range unless you are at the poles (in which case the Mercator projection is singular anyway...)
  • PyRulez
    PyRulez almost 6 years
    Do you know how to get the latitude and longitude from x, y, and z?
  • comingstorm
    comingstorm almost 6 years
    Latitude is atan2(z, sqrt(x*x+y*y)), and longitude is atan2(y,x). Both of these yield radians, which can be used directly in the inverse mapping, but which must be converted to degrees if that's what you want instead.