Domanda

Come si fa a calcolare la distanza tra le 2 città?

È stato utile?

Soluzione

Se avete bisogno di prendere la curvatura della terra, la Grande-Cerchio di distanza è quello che stai cercando. L'articolo di Wikipedia probabilmente fa un lavoro migliore di spiegare come la formula funziona di me, e c'è anche questo aviazione formulario pagina che copre che va più nel dettaglio.

Le formule sono solo la prima parte del puzzle, però, se avete bisogno di fare questo lavoro per arbitrario città, avrete bisogno di un database di posizione per ottenere le coordinate lat/long da.Per fortuna si possono ottenere gratuitamente dalla Geonames.org, anche se in commercio ci sono db disponibili (chiedere a google).Così, in generale, cercare le due città che si desidera, ottenere le coordinate lat/long co-orinates e collegare la formula in Wikipedia Lavorato Esempio.

Altri suggerimenti:

  • Per una completa soluzione commerciale, c'è PC Miler che viene utilizzato da molte aziende di autotrasporti a calcolare le tariffe di spedizione.
  • Effettuare chiamate a Google Maps (o altri) api.Se avete bisogno di fare molte richieste al giorno, prendere in considerazione la memorizzazione nella cache i risultati sul server.
  • Anche molto importante è quello di considerare la costruzione di un'equivalenza di database per la città, quartieri, città, etc.se pensate che avrete bisogno di mai per raggruppare i dati.Questo diventa veramente complicato, però, e si può trovare un one-size-fits-all soluzione per il vostro problema.

Ultimo ma non meno importante, Joel ha scritto un articolo su questo problema un po ' indietro, quindi qui si va: Nuova Funzionalità:Ricerca Di Lavoro

Altri suggerimenti

Si utilizza il Haversine formula.

Questo è molto facile da fare con la geografia tipo in SQL Server 2008.

SELECT geography::Point(lat1, lon1, 4326).STDistance(geography::Point(lat2, lon2, 4326))
-- computes distance in meters using eliptical model, accurate to the mm

4326 è SRID per WGS84 elipsoidal Terra modello

Si ca utilizzare il A* algoritmo per trovare il percorso più breve tra le due città e, in questo modo avrete la distanza.

Se si sta parlando è la distanza più breve tra due vere e proprie città in un vero e proprio sferica del pianeta, come la Terra, si desidera che il distanza ortodromica.

Se si lavora in piano e si desidera che il Distanza euclidea "as the crow flies":

// Cities are points x0,y0 and x1,y1 in kilometers or miles or Smoots[1]
dx = x1 - x0;
dy = y1 - y0;
dist = sqrt(dx*dx + dy*y);

Non trigonometria necessario!Solo il Teorema di pitagora e il fatto che le piazze sono sempre positivo, quindi non avete bisogno del dx = abs(x1 - x0), etc.per ottenere un numero positivo di passare a sqrt().

Nota che probabilmente si potrebbe fare questo in una riga e di un compilatore avrebbe probabilmente ridurre l'equivalente di sopra di codice:

dist = sqrt((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0));

[1] http://en.wikipedia.org/wiki/Smoot

È possibile ottenere la distanza tra le due città da google map api.Qui è un'implementazione in Python

#!/usr/bin/python
import requests
from sys import argv 
def get_distance(origin,destination):
    gmap='http://maps.googleapis.com/maps/api/distancematrix/json'
    payload={"origins":origin,"destinations":destination,"sensor":'false' }
    try:
        a=requests.get(gmap,params=payload)
        data = a.json()
        origin = str(data['origin_addresses'][0])
        destination= str(data['destination_addresses'][0])
        distance = data['rows'][0]['elements'][0]['distance']['text']
        return distance,origin,destination
    except Exception,e:
        print "The %s or %destination does not exists :(" %(origin,destination)
        exit()

if __name__=="__main__":
    if len(argv)<3:
        print "sorry Check the format"
    else:
        origin=argv[1]
        destination=argv[2]
        distance,origin,destination=get_distance(origin,destination)
        print "%s ---> %s    :   %s" %(origin,destination,distance)

Esempio di collegamento: https://gist.github.com/sarathsp06/cf063e47bcc515b51c84

Trovate le coordinate Lat/Lon della città, quindi utilizzare una distanza algoritmo di stima per coordinate Lat/Lon.

se avete bisogno di un esempio di codice credo di avere quello che ho potuto scavare a casa, ma come molte delle precedenti risposte, avete bisogno di un long / lat db per fare il calcolo

È meglio utilizzare una tabella per ottenere la distanza tra le due città.

Questo ha senso perché * La Formula per calcolare la distanza ais abbastanza intensivo..* La distanza tra la città è improbabile che il cambiamento.

Quindi a meno che non hai esigenze molto particolari (come terreno di mapping da un satellite o di alcuni o di topografia algoritmo o qualcos'altro), si dovrebbe davvero solo salvare l'elenco delle città e le distanze tra di loro, in un tavolo e cercare come necessario.

Ho fatto un sacco di lavoro con questo di recente.Mi sto trovando SQL2008 nuove funzionalità davvero facile.Riesco a trovare tutti i punti che sono entro Xkm di un 100k record della tabella in frazioni di secondo...non è troppo malandato.

Il grande cerchio (sferica assunzione) metodo nel mio test era di circa 2,5 miglia al largo rispetto alla vincenty formula (elipsoidal presupposto, che è quello che la terra).

Il vero trucco è sempre la lat e long..per che sto usando Google.

@Jared - una correzione minore per il tuo esempio di codice.L'ultima riga del primo esempio di codice dovrebbe essere:

dist = sqrt(dx*dx + dy*dy);

Sono d'accordo che una volta che si hanno le informazioni, se non andando a modificare, memorizzare in qualche modo.@Marko Tinto Grazie per la T-SQL campione.Per coloro che non hanno accesso a SQL Server o preferite un altro metodo:Se avete bisogno di alta precisione, check-out Voce di Wikipedia sul Vincenty algoritmo per ulteriori info.Credo che ci sia un js attuazione, che potrebbe (se non lo è già) essere facilmente portato in altre lingue.Inoltre, in fondo alla pagina un link per geographicLib, che pretende di essere di 1000 tempo più accurata rispetto alla Vincenty algoritmo (se si dispone di dati che buono, può importa).

Perché si usa qualcosa come il Vincenty metodo?Perché la terra non è una sfera perfetta e metodi che permettono l'inserimento di una più accurata assi maggiore e minore per la modellazione di terra.

io uso distancy in modo semplice e pulito

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top