Domanda

Il mio piccolo sito dovrebbe essere pooling elenco di elementi di una tabella utilizzando active posizione dell'utente, come un filtro.Pensare Craigslist, dove si ricerca per "dvd", ma i risultati non sono da tutti i DB sono filtrati dall'posizione selezionata.La mia domanda è su 2 livelli:

  1. devo andare a-la-craigslist, e chiedere agli utenti di utilizzare una posizione a livello di città?Il mio problema con questo è che è necessario per generare quello che mi sembra un hard coded, fatto a mano, elenco di luoghi.
  2. devo andare a-la-cap.L'idea di chiedere all'utente di digitare il suo codice postale, e quindi aperto a tutti gli elementi che si trovano nella stessa o in una certa distanza dal suo codice di avviamento postale.

Mi sembra preferire il codice di avviamento postale modo sembra che la soluzione più elegante, ma come sulla terra si va sulla creazione di un DB di tutti i codici di avviamento postale e di implementare la funzione che dato zip codice 12345, ottiene tutti zipcodes a 1 km di distanza?

questo dovrebbe essere abbastanza comune "compito", come molti siti hanno un bisogno simile alla mia, quindi spero di non re-inventare la ruota.

È stato utile?

Soluzione

Ottenere un Codice di avviamento postale database è nessun problema.Si può provare gratuitamente uno:http://zips.sourceforge.net/

Anche se non so come si è, o è possibile utilizzare uno dei molti fornitori.Abbiamo un abbonamento annuale a ZipCodeDownload.com, e forse per $100 otteniamo aggiornamenti mensili con le ultime c.a.p. dati completi di coordinate Lat/Long del baricentro, il codice di avviamento postale.

Come per l'esecuzione di query per tutte le cerniere all'interno di un certo raggio, si sta andando a bisogno di una libreria spaziale di qualche tipo.Se vi è solo una tabella di cerniere con lat/long, avrete bisogno di un database-oriented meccanismo.SQL Server 2008 ha la capacità built-in, e ci sono librerie open source e librerie commerciali che si andranno ad aggiungere tale funzionalità di SQL Server 2005.Il database open source PostgreSQL è un progetto, PostGIS che aggiunge questa funzionalità per il database.È qui: http://postgis.refractions.net/

Altre piattaforme di database, probabilmente, hanno progetti simili, ma questi sono quelli che io sappia.Con uno di questi DB in base librerie si dovrebbe essere in grado di eseguire una query direttamente per qualsiasi codici di avviamento postale (o le righe di ogni tipo che hanno lat/long colonne) all'interno di un determinato raggio.

Se si vuole fare un percorso diverso, è possibile utilizzare spaziali strumenti con una libreria di mapping.Ci sono open source, anche qui, come SharpMap e molti altri (Google può aiutare) che possono utilizzare la connessione Tigre mappe per gli stati uniti come origine dati.Tuttavia, questo percorso è un po ' più complicato e forse meno performante, se tutto ciò che serve è un raggio di ricerca.

Infine, si potrebbe desiderare di guardare in un servizio web.Questo, come dici tu, è una necessità comune, e immagino che ci sono un certo numero di ob di servizi web che è possibile sottoscrivere in grado di fornire tutti i codici postali in un raggio dato da un codice postale.Una rapida ricerca su Google alzato questo:http://www.zip-codes.com/free-zip-code-tools.asp#radius Ma ci sono MOLTE risorse per la ricerca su questo argomento.

Altri suggerimenti

come sulla terra un [...] implementare la funzione che dato zip codice 12345, ottiene tutti zipcodes a 1 km di distanza?

Ecco un esempio su come fare:

http://www.codeproject.com/KB/cs/zipcodeutil.aspx

Basta essere tecnici...PostGIS non è un progetto di Postgres comunità...si tratta di un autonomo progetto che è costruito sulla cima di Postgres.Se avete bisogno di aiuto o di supporto con PostGIS, ti consigliamo di andare alla comunità invece di Postgres.

È possibile utilizzare PostGIS.Inoltre, ho usato deCarta mappe librerie.Hanno tecnologia che permette di geokey qualunque tipo di dati.Quindi è possibile eseguire una query questi spazialmente.

disclaimer:Io lavoro per deCarta

Non sarebbe più efficiente basta capire che le città sono nel raggio di 1 miglio e memorizzare le informazioni in una tabella?Quindi non devi fare calcoli nel database in qualsiasi momento.

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