Per cominciare, penso che tu abbia il tuo latitude e longitude invertiti. Misure di longitudine X e misure di latitudine Y.
La latitudine è facile da trasformare in una distanza nord-sud. Sappiamo che 360 gradi è un cerchio completo intorno alla terra attraverso i poli e that distance is 40008000 meters. Finché non è necessario tenere conto degli errori dovuti al fatto che la terra non è perfettamente sferica, la formula è deltaLatitude * 40008000/360
.
La parte difficile è convertire la longitudine in X, come sospettavate. Dal momento che dipende dalla latitudine, devi decidere quale latitudine utilizzerai: potresti scegliere la latitudine della tua origine, la latitudine della tua destinazione o qualche punto arbitrario nel mezzo. La circonferenza all'equatore (latitudine 0) è 40075160 metri. La circonferenza di un cerchio a una data latitudine sarà proporzionale al coseno, quindi la formula sarà deltaLongitude * 40075160 * cos(latitude)/360
.
Modifica: Il commento indica che si sono verificati problemi con la formula di longitudine; potresti aver usato gradi invece di radianti nella chiamata a cos
, questo è un errore comune da principiante. Per assicurarsi che non ci siano ambiguità, ecco il codice funzionante in Python.
def asRadians(degrees):
return degrees * pi/180
def getXYpos(relativeNullPoint, p):
""" Calculates X and Y distances in meters.
"""
deltaLatitude = p.latitude - relativeNullPoint.latitude
deltaLongitude = p.longitude - relativeNullPoint.longitude
latitudeCircumference = 40075160 * cos(asRadians(relativeNullPoint.latitude))
resultX = deltaLongitude * latitudeCircumference/360
resultY = deltaLatitude * 40008000/360
return resultX, resultY
Ho scelto di utilizzare la latitudine relativa NullPoint per il calcolo X. Questo ha il vantaggio che se si convertono più punti con la stessa longitudine, avranno la stessa X; le linee nord-sud saranno verticali.
Modifica di nuovo: Avrei dovuto sottolineare che questa è una formula molto semplice e dovresti conoscere i suoi limiti. Ovviamente la terra non è piatta, quindi qualsiasi tentativo di mapparlo alle coordinate XY comporterà dei compromessi. La formula che ho descritto sopra funziona meglio quando l'area che stai convertendo è abbastanza piccola da considerarla piatta, e dove la leggera curvatura e il non parallelismo delle linee nord-sud possono essere ignorati. C'è un'intera scienza per mappare le proiezioni; se vuoi vedere alcune possibilità, un buon punto di partenza sarebbe Wikipedia. Questa proiezione specifica è nota come the Equirectangular projection, con alcuni ridimensionamenti aggiunti.
fonte
2010-06-11 17:05:45
ok ho provato questo, e il calcolo della latitudine è molto preciso :) ma i valori di longitudine-metro sono sempre il fattore 1.3 a grande per il test di latitudine im. Penso che non sia una buona idea dividere semplicemente per questo fattore perché probabilmente differirà per le diverse latitudini, forse la circonferenza terrestre deve essere calcolata rispetto alla latitudine corrente? –
@Sponge, controllare l'aggiornamento. –
grazie mille! funziona benissimo :) –