2011-08-24 17 views
6

Problema:Costruire Intersezioni da Google Maps API

Sto cercando di invertire la geocodifica una latitudine/longitudine in un incrocio stradale più vicino utilizzando Google Maps API V3. Inoltre, per ora, questo non deve essere molto accurato, perché sto solo cercando di anonimizzare un indirizzo anziché fornire indicazioni.

Ho visto che i dati di Geocoding Results contengono un Address Component Type di "Intersection", ma questo non sembra affatto coerente nei risultati di ritorno - ed è più spesso che non vuoto.

Ho anche cercato su SO il modo migliore per costruire questo blocco ottenendolo direttamente da Google, e il più vicino che ho visto è: How can I find the nearest intersection via the Google Maps API?, che in realtà non risolve il mio problema. Alla luce di questo, ho trovato la mia soluzione e vorrei alcune opinioni, ottimizzazioni, critiche costruttive o altre opzioni interamente.

mio Tentative Soluzione:

Dopo aver suonato in giro con l'API, ho deciso di dare il seguente algoritmo un colpo (solo per il contesto, questo è scritto in C# all'interno di una console app):

  • Prendo un indirizzo e lo risolvo in lat/long.

  • Ho poi aggiungere o sottrarre una certa quantità di lat o lunghi dal coordinate-- su ordine di un isolato (una distanza che è regolato dato il vostro latitudine) e ottenere indicazioni stradali a piedi tra i punti. Lo faccio per un massimo di quattro direzioni-- quindi la prima modifica sarebbe di mantenere la latitudine la stessa ma sottrarre una longitudine di. Poi la modifica successivo sarebbe quello di mantenere la latitudine e la aggiungere qualche longitudine, ecc

  • Dopo aver ottenuto le direzioni, ho analizzare i risultati e controllare l'inizio e indirizzo finale. Se sono diversi, estraggo i nomi delle strade e li trattano come un "incrocio" (anche se a volte questo è lo risultati in strade parallele - di nuovo solo cercando di ottenere un campo da baseball).

  • Se non trovo due strade diverse, allargo la distanza della destinazione finale e ripeto il processo.

Finora questo funzionando abbastanza bene, ma ovviamente si tratta di un processo costoso, sia in termini di tempo, e nel usando il mio limite di query assegnato. Inoltre, ho verificato i termini di servizio dell'API e, a condizione che includo la dichiarazione di non responsabilità e i risultati su una mappa di Google, ritengo di essere a posto.

Le mie domande per la comunità sono:

  • Come posso migliorare l'efficienza dell'algoritmo? In particolare, nel il numero di volte che io chiamo l'API (il codice di implementazione non è un problema )

  • C'è un altro modo del tutto per farlo utilizzando l'API di Google Maps? Nella domanda SO referred to above, la soluzione consisteva nel loop sui numeri di costruzione. Non sono sicuro di cosa significhi, quindi qualsiasi chiarimento sarebbe fantastico.

  • Come già detto, non credo che questo stia infrangendo i termini del servizio, ma mi sbaglio?

  • Esiste un'altra API basata sul Web che possa soddisfare meglio le mie esigenze? Forse Bing, o qualche altro fornitore?

Grazie mille per qualsiasi aiuto.

UPDATE: ho incontrato il mio limite di query per il giorno, quindi non sarà in grado di testare qualsiasi suggerimento contro Google oggi, ma sono anche ancora aperto ad usare un'API diversa. Grazie.

risposta