Domanda

Un cliente vuole una pagina sul loro sito web dove l'utente può cercare un grossista di loro gamma di prodotti. Quello che vogliono è la possibilità di inserire un codice postale nel Regno Unito e per un elenco dei loro rivenditori a comparire in modo più vicino.

C'è un modo per utilizzare Google Maps per determinare il fornitore più vicino?

Ho un database di PHP MySQL con tutti i fornitori codici di avviamento postale ei dettagli e dovrò il codice postale dell'utente per uso pure.

È stato utile?

Soluzione

Credo che avrete bisogno dei dati Ordnance Survey codepoint per mappare i codici postali a una longitudine e latitudine. Codepoint è disponibile come prodotto commerciale, o c'è anche Codepoint Apri

Una volta che hai la latitudine e longitudine, quindi è possibile utilizzare gli algoritmi standard come Haversine o Vincenty per distanze Calcolare tra i punti

Modifica

Struttura dei file Codepoint Apri file CSV può essere trovato qui . Si noti che posizione si svolge come Northings e Esatings piuttosto che longitudine e latitudine, quindi avrà bisogno di conversione. C'è un certo numero di articoli su questo sul web, per esempio.

http://www.deepbluesky.com/blog/-/converting-os-coodinates-into-longitude-latitude_7/
http://mediakey.dk/~cc/convert-northing-and-easting-utm-to-longitude-and-latitude/

, ma è necessario essere consapevoli che OS Northings / Eastings si basano sul Airy 1830 ellissoide piuttosto che il modello WGS84 utilizzato da Google maps (e la maggior parte dei sistemi GSM). Non riuscendo a far sì che tale differenza si può mettere da parte qualcosa tra 70-120m tra la Cornovaglia e East Anglia.

È possibile trovare anche funzioni PHP di fare questa conversione al mobile tipo di sito (lettura essenziale per tutti gli sviluppatori PHP, lavorando con GeoData. mi consiglia l'aggiunta di una coppia fuori colonne al database rivenditore per la longitudine e latitudine, e un one-off script per aggiornare tutti i dati esistenti che utilizzano il Codepoint dati, quindi modificare le routine di inserimento / aggiornamento per rivenditori di mantenere queste informazioni up-to-date. Utilizzo di PHP, un'altra soluzione per questa conversione è PHPCoord da Jonathan Stott

Per prestazioni più elevate nella query di database, fare una ricerca di lat / long contro una "scatola di delimitazione" prima di calcolare distanze. Ho spiegato come farlo in risposta a un simile interrogazione .

Altri suggerimenti

Credo che avrete bisogno di un po 'di più dati rispetto a quella. Io suggerirei che è necessario memorizzare la latitudine e la longitudine di ogni codice postale del Regno Unito a fianco il codice postale stessa. Credo che questi dati è disponibile presso la Royal Mail per un costo e mi ricordo di aver letto da qualche parte che stava per essere disponibile nel dominio pubblico anche. Avere un utente inserire il proprio codice postale, cercare la loro latitudine e longitudine nel db e quindi utilizzare tale per eseguire un'altra query che calcola il fornitore più vicino a loro, forse entro un certo numero di miglia. Si potrebbe forse creare una procedura di negozi per fare tutto questo sul db. Questo post sembra avere alcuni dettagli su come fare questo.

Se si vuole che sia veloce quindi pre-calcolare le distanze tra codici postali entro un certo raggio di ogni altro - vedi il seguente:

calcolare la distanza tra le zip codici e gli utenti

Questo dovrebbe funzionare bene nel vostro caso a meno che non si pensa che un utente sia disposto a viaggiare più di 100 miglia per l'acquisto di un prodotto ??

Al posto di Google Maps, questo codice postale aperto geocoding API possono essere di utilità per voi. Come altri hanno detto, una volta che hai lat lungo per entrambi i punti è possibile utilizzare algos standard per trovare distanze. Un domanda precedente contiene alcune informazioni su come farlo direttamente in SQL.

Si possono trovare utile questo sito: SQL / CSV CAP Database

Ho usato questa ad occhiata lungo / lat da un "outcode" Cap.

C'è anche uno script php (che non ho provato), che calcola la distanza tra due codici postali.

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