2011-12-21 19 views
9

Nel mio progetto devo trovare [coordinate di latitudine, longitudine] da un punto in una distanza di 500 metri (questa potrebbe essere qualsiasi coordinata casuale o una serie di coordinate attorno al mio punto). Come posso fare questo?convertire i metri in latitudine da qualsiasi punto

Nota: ho bisogno di questo per trovare più percorsi tra i punti diversi da quello più breve che ci viene restituito tramite Google Maps Indicazioni Api ... Quindi utilizzando il mio metodo definirò il centro della strada da A a B e quindi trovare alcune coordinate sotto e sopra quella posizione centrale e usarlo come un altro waypoint per andare da A a B - Immagino che questo possa aiutarmi a trovare più percorsi ...

Qualche suggerimento da parte dei professionisti GIS?

EDIT: la conversione UTM è il più preferibile per questi calcoli, e ho creato classe UTM Java se qualcuno ha bisogno ..

risposta

5

Se ho capito la tua domanda destra si dispone di un punto noto in Lat/Long e è necessario calcolare il Lat/Long di un altro punto o punti a 500 metri dal punto di partenza.

Se questo è ciò che si sta facendo, si hanno diverse opzioni che coinvolgono principalmente API GIS specializzate. Tuttavia, suppongo che tu sia un programmatore/matematico piuttosto che un geografo, quindi potresti preferire optare per l'uso della formula di Haversine. È possibile trovare una discussione su questo argomento here più la formula.

Un avvertimento è che il distamce con cui si sta lavorando (500m è piuttosto piccolo) e la Terra è lontana dall'essere una sfera perfetta o anche uno sferoide leggermente appiattito. È localmente "grumoso" e questo può esporre i tuoi calcoli. Se hai bisogno di maggiore accuratezza dovrai tener conto di queste imperfezioni usando un Datum locale appropriato (modello della Terra - ci sono molti eg vedi EPSG list) e per farlo probabilmente dovrai iniziare a usare le librerie GIS mentre la matematica diventa diversamente dettagliato.

+0

Sembra un buon metodo .. Per sapere sto provando la stessa cosa usando il metodo di calcolo UTM a [lat, long] e viceversa per trovare coordinate appropriate e lat, long durante i calcoli. Penso che questo metodo sia lo stesso con il tuo, ma solo le formule sono diverse, ma ho letto che le formule UTM possono convertire le posizioni esattamente in centimetri ... Grazie mille per la tua risposta! –

+2

L'UTM giustifica già la deformazione locale della superficie terrestre dividendo la Terra in un numero elevato di zone, ognuna con un proprio dato. Questo è il motivo per cui è molto più accurato di, diciamo, WGS che usa una singola proiezione per l'intera Terra. Se hai bisogno di strumenti per convertire in coordinate cartesiane - calcola i tuoi punti e riconvertiti in Lat/Long senza preoccuparti della matematica, controlla GDAL/OGR (e in particolare OSR - che è l'API di riferimento spaziale) – MappaGnosis

0

Questo è il codice usato da Google Map (SphericalUtil.java)

// from SphericalUtil.java 
    // compile 'com.google.maps.android:android-maps-utils:0.4.4' 
    public static LatLng computeOffset(LatLng from, double distance, double heading) { 
    distance /= 6371009.0D; //earth_radius = 6371009 # in meters 
    heading = Math.toRadians(heading); 
    double fromLat = Math.toRadians(from.latitude); 
    double fromLng = Math.toRadians(from.longitude); 
    double cosDistance = Math.cos(distance); 
    double sinDistance = Math.sin(distance); 
    double sinFromLat = Math.sin(fromLat); 
    double cosFromLat = Math.cos(fromLat); 
    double sinLat = cosDistance * sinFromLat + sinDistance * cosFromLat * Math.cos(heading); 
    double dLng = Math.atan2(sinDistance * cosFromLat * Math.sin(heading), cosDistance - sinFromLat * sinLat); 
    return new LatLng(Math.toDegrees(Math.asin(sinLat)), Math.toDegrees(fromLng + dLng)); 
} 

ad usarlo, è sufficiente inserire la centerLatLng, la distanza in metri, e la rotta in gradi da centerLatLng.

è possibile modificare la formula nella lingua preferita.

Problemi correlati