2012-10-04 12 views
7

Ho un set di punti griglia 2d (x, y) che voglio mappare/proiettare su una sfera come 3d punti (x, y, z).come punti della griglia 2d della mappa (x, y) sulla sfera come punti 3d (x, y, z)

Mi rendo conto che ci sarà qualche distorsione verso i poli con l'aumentare di abs (y), ma la mia griglia coprirà solo una parte della sfera vicino all'equatore, quindi si eviterà una deformazione grave.

Ho problemi a trovare le giuste equazioni per quello.

+0

Non sono sicuro di cosa stai chiedendo qui ... Cosa rappresentano il 2D 'x' e' y'? Sono latitudine/longitudine, o coordinate su qualche proiezione rettangolare piatta della sfera? Nell'ultimo caso, quale proiezione stai usando? –

risposta

16

Parafrasato alle voci di Wikipedia sulla proiezione di Mercatore:

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 

Per ottenere le coordinate 3D dal risultato della mappatura inversa:

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) 

(Si noti che la "mappa del raggio "e il" raggio 3D "avrà quasi sicuramente valori diversi, quindi ho usato nomi di variabili diversi.)

+0

La mia latitudine è 29.65163. Quando provo a calcolare il valore y, sto ricevendo un errore (in Python) perché 'tan ((latitudine + pi/2)/2)' è -0.0970531183, e l'esecuzione del log su quel valore genera un "errore del dominio matematico" "poiché il valore è negativo. Che cosa sto facendo di sbagliato? – Pikamander2

+0

È necessario convertire la latitudine dai gradi ai radianti, prima di aggiungere 'pi/2'. Questo convertirà l'intervallo '+/- 90 gradi' in un intervallo di' +/- pi/2 radianti', che non eccederà l'intervallo di funzioni a meno che non ci si trovi ai poli (nel qual caso la proiezione di Mercator è comunque singolare. ..) – comingstorm

1

Mi aspetto che sia possibile utilizzare l'inverso di una qualsiasi delle numerose proiezioni del globo.

Mercatore è piuttosto buono intorno all'equatore rispetto ad altre proiezioni.

Le formule sono sulla pagina wiki.
http://en.wikipedia.org/wiki/Mercator_projection

+0

grazie. mi rendo conto che è quello che voglio, ma ho difficoltà a derivare le equazioni per prendere 2d punti (x, y) in punti 3d (x, y, z) sulla sfera. – milkplus

+0

Ah, le formule attuali. Questa è un'operazione matematica non banale e potresti avere una migliore fortuna su http://math.stackexchange.com/. Una volta ottenuta la formula, puoi tornare qui per aiutarti a programmarla. Inoltre, http://wiki.openstreetmap.org/wiki/Mercator – kreativitea