Best practice per la geolocalizzazione

3

Stiamo scrivendo un motore di ricerca di voli. Vogliamo precompilare l'aeroporto di partenza per gli utenti mobili con quello più vicino alla loro posizione. Per fare ciò, il nostro piano è

  1. Trova un elenco di aeroporti con la loro latitudine / longitudine.
  2. Trova la geolocalizzazione dell'utente utilizzando qualcosa come Geolocalizzazione HTML5 (che chiede l'autorizzazione all'utente).
  3. Calcola la distanza tra la posizione dell'utente e ogni aeroporto per trovare quello più vicino.
  4. Compila il modulo di partenza.

È un modo standard di procedere? Sono un programmatore junior e non sono abituato a questo tipo di problema. C'è qualche ostacolo che dovrei tenere a mente mentre sviluppo la mia soluzione? Ho la sensazione che l'algoritmo per calcolare la distanza tra un punto e 300 posizioni potrebbe essere un po 'pesante.

    
posta Deinonychus 08.08.2014 - 21:34
fonte

3 risposte

3

We are writing a flight search engine.

Utilizza un motore di ricerca!

Puoi usare Apache Solr per esempio, e il tuo passaggio # 3 è fatto. Non è necessario conoscere i dettagli del calcolo. I passaggi di base necessari sono quelli di archiviare i geocod in cui effettuare la ricerca (gli aeroporti), quindi eseguire una ricerca utilizzando il codice geografico dell'utente, ad esempio una distanza massima per i risultati da includere.

Non preoccuparti di essere un junior, questo è il modo in cui i senior lo fanno, cioè cerca le soluzioni esistenti in modo che non debbano risolverlo autonomamente. Potrebbe volerci del tempo per configurarlo, ma il risultato finale è la qualità della produzione.

    
risposta data 10.08.2014 - 00:29
fonte
0

Suppongo che "più vicino" significhi che presenterai un elenco di aeroporti vicini e consentirai all'utente di sceglierne uno. Potresti avere bisogno di (diciamo) 10 aeroporti nell'elenco.

No, il calcolo non è terribilmente complicato. Implica un po 'di matematica a percorso fluttuante, ma non così dovrebbe causare un grande stress. È possibile ridurre molto facilmente il numero di calcoli effettivi preordinando l'elenco e / o filtrando su lat / lon raw.

Un grado di latitudine è ovviamente intorno ai 111 km. [Perché? Perché lo standard originale per il metro era 10 milioni di metri = 90 gradi di latitudine, attraverso Parigi.] Un grado di longitudine è ovunque da 0 a circa lo stesso. [Perché? Ovviamente zero ai poli.]

Quindi un primo passaggio per calcolare i valori per le posizioni più / meno 10 gradi potrebbe essere un'euristica utile per migliorare le prestazioni e trovare qualsiasi cosa entro 1000 km o giù di lì. [In Australia, questo non riempirebbe la tua lista di 10.]

La distanza del grande cerchio può essere trovata qui: link , ma sono sicuro che lo sapevi.

    
risposta data 09.08.2014 - 06:24
fonte
0

Questa sorta di query spaziale viene gestita di routine da database abilitati allo spazio come mysql, postgres, oracle e sql server. Sono sicuro che ce ne sono altri che sto tralasciando.

La ricerca diventa quindi una query sql utilizzando qualsiasi tipo di geometria definito per il database. Il particolare argomento che ti interessa è chiamato una query adiacente più vicina.

Guarda questo link per maggiori dettagli su come scrivere una query come quella per sql server: link . Grazie alla standardizzazione OGC, troverai opzioni molto simili su molti database e librerie geospaziali.

L'idea alla base di questo scenario è creare una tabella che trattiene le posizioni di tutti gli aeroporti a cui sei interessato come tipi di geometria del punto. Quindi si definisce un indice spaziale su quella colonna che suddivide lo spazio. Questo indice spaziale è in realtà una struttura ad albero speciale (come un quadrifoglio link o link ) che può consentire l'esclusione di grandi quantità di dati dalla ricerca manuale a distanza.

Ciò ti consente anche di fare facilmente alcune query più interessanti, ad esempio mostrami tutti gli aeroporti entro 5 miglia.

    
risposta data 08.12.2014 - 05:58
fonte

Leggi altre domande sui tag