2010-02-15 9 views
7

Ho un database contenente gli ordini e ogni ordine ha una posizione associata. Currentl, quando un utente ha effettuato l'accesso, sto utilizzando l'API di Bing Maps per geocodificare ogni posizione dell'ordine e calcolare la distanza di guida dell'utente connesso. Sulla base di queste distanze, l'utente tramite un dropdownbox può quindi specificare le distanze massime con i risultati visualizzati in una griglia. Tuttavia, con oltre 100 ordini il processo diventa dolorosamente lento. Gradirei alcuni suggerimenti su come ottimizzare le query bing, possibilmente memorizzando nella cache i risultati (in modo che possano essere riutilizzati senza riappropriarsi delle api di bing maps) o utilizzando Ajax per elaborare in qualche modo gli ordini in background. Grazie.Ottimizzazione delle richieste Geocode e RouteMapping di Bing Maps

risposta

1

Sto pianificando di fare qualcosa di simile nel prossimo futuro, quindi ho alcuni suggerimenti, ma nessun codice effettivo da condividere ancora. Spero sia utile

Mi aspetto di memorizzare lat/lon per ogni elemento nel mio db (quindi viene geocodificato solo una volta). Per selezionare elementi entro una certa distanza da un punto, calcolerò i numeri lat/lon che sono "x" miglia a nord/sud/est/ovest del mio punto centrale. Quindi la selezione diventa una semplice questione di scegliere i record in cui i valori lat/lon rientrano tra i valori del mio quadrato.

E sì, so che tecnicamente dovrei usare un cerchio per controllare con precisione la distanza, ma questo è molto più facile e veloce. Se hai davvero bisogno di usare un cerchio per un limite più preciso, usa prima questo metodo, poi usa calcoli più complessi per estirpare gli oggetti al di fuori del cerchio negli angoli.

Non ho familiarità con le licenze di Bing, ma se ricordo correttamente su google, è necessario disporre di una licenza (commerciale) a pagamento per archiviare i risultati della geocodifica. E non è economico. In modo che possa annullare qualsiasi valore il mio suggerimento potrebbe avere :(

Modifica, ho appena letto la domanda un po 'più attentamente, e vedo che si tratta di guidare miglia, non miglia lineari.Quindi, la mia risposta isn' È davvero applicabile, a meno che non si desideri utilizzarlo come metodo per limitare il numero di calcoli da percorrere.

Inoltre, in materia di geocodifica e licenze, è possibile vedere geocoder.us che è piuttosto economico

0

Quello che probabilmente si vuole fare è creare un albero di spanning minimo assumendo che si abbia la stessa destinazione per l'utente.Il MST è ancora O (V^2), ma si sta effettivamente memorizzando nella cache molti dei percorsi più brevi poiché molti di loro riutilizzeranno le stesse strade.

Un'altra opzione è quella di stimare utilizzando le distanze lineari prima come sostituto delle miglia stradali, ma tutto dipende da ciò che si sta inviando all'utente.

Buona fortuna!

+0

In che modo un MST può essere d'aiuto per i percorsi più brevi? Come decidere se è possibile seguire l'MST e utilizzare la 'cache' o no? – Karussell