Filtern Sie nach Postleitzahl oder anderen standortbasierten Datenabrufstrategien

StackOverflow https://stackoverflow.com/questions/12823

  •  08-06-2019
  •  | 
  •  

Frage

Meine kleine Website sollte eine Liste von Elementen aus einer Tabelle zusammenfassen und dabei den Standort des aktiven Benutzers als Filter verwenden.Denken Craigslist, wo Sie nach „dvd“ suchen, die Ergebnisse jedoch nicht aus der gesamten Datenbank stammen, sondern nach einem von Ihnen ausgewählten Speicherort gefiltert werden.Meine Frage hat 2 Ebenen:

  1. Soll ich à la Craigslist gehen und Benutzer bitten, einen Standort auf Stadtebene anzugeben?Mein Problem dabei ist, dass Sie eine meiner Meinung nach fest codierte, handgemachte Liste von Standorten erstellen müssen.
  2. soll ich a-la-zipCode gehen.Die Idee, den Benutzer einfach aufzufordern, seine Postleitzahl einzugeben, und dann alle Artikel zusammenzufassen, die sich in derselben oder in einer bestimmten Entfernung von seiner Postleitzahl befinden.

Ich scheine die Postleitzahlenmethode zu bevorzugen, da sie eine elegantere Lösung zu sein scheint, aber wie um alles in der Welt erstellt man eine Datenbank aller Postleitzahlen und implementiert die Funktion, die bei gegebener Postleitzahl 12345 alle Postleitzahlen in einer Entfernung von 1 Meile abruft?

Dies sollte eine ziemlich häufige „Aufgabe“ sein, da viele Websites einen ähnlichen Bedarf haben wie ich, daher hoffe ich, das Rad hier nicht neu zu erfinden.

War es hilfreich?

Lösung

Es ist kein Problem, eine Postleitzahlendatenbank zu erhalten.Sie können dies kostenlos ausprobieren:http://zips.sourceforge.net/

Allerdings weiß ich nicht, wie aktuell es ist, oder man kann einen von vielen Anbietern nutzen.Wir haben ein Jahresabonnement für ZipCodeDownload.com, und für vielleicht 100 US-Dollar erhalten wir monatliche Updates mit den neuesten Postleitzahlendaten, einschließlich Breiten- und Längengraden des Schwerpunkts der Postleitzahl.

Für die Abfrage aller Postleitzahlen in einem bestimmten Umkreis benötigen Sie eine Art räumliche Bibliothek.Wenn Sie nur eine Tabelle mit Postleitzahlen und Breiten-/Längengraden haben, benötigen Sie einen datenbankorientierten Mechanismus.SQL Server 2008 verfügt über diese integrierte Funktion, und das gibt es auch Open-Source-Bibliotheken Und kommerzielle Bibliotheken Dadurch werden solche Funktionen zu SQL Server 2005 hinzugefügt.Die Open-Source-Datenbank PostgreSQL verfügt über ein Projekt, PostGIS, das dieser Datenbank diese Funktion hinzufügt.Es ist hier: http://postgis.refractions.net/

Andere Datenbankplattformen haben wahrscheinlich ähnliche Projekte, aber diese sind mir bekannt.Mit einer dieser DB-basierten Bibliotheken sollten Sie in der Lage sein, innerhalb eines bestimmten Radius direkt nach Postleitzahlen (oder Zeilen jeglicher Art mit Breiten-/Längenspalten) abzufragen.

Wenn Sie einen anderen Weg gehen möchten, können Sie räumliche Tools mit einer Kartenbibliothek verwenden.Auch hier gibt es Open-Source-Optionen, wie z SharpMap Und viele andere (Google kann helfen), das die kostenlosen Tiger-Karten für die Vereinigten Staaten als Datenquelle nutzen kann.Allerdings ist diese Route etwas komplizierter und möglicherweise weniger performant, wenn Sie lediglich eine Umkreissuche benötigen.

Schließlich möchten Sie vielleicht einen Webdienst in Betracht ziehen.Dies ist, wie Sie sagen, ein allgemeiner Bedarf, und ich kann mir vorstellen, dass es eine beliebige Anzahl von Webdiensten gibt, die Sie abonnieren können und die alle Postleitzahlen in einem bestimmten Umkreis von einer angegebenen Postleitzahl aus bereitstellen können.Eine schnelle Google-Suche ergab Folgendes:http://www.zip-codes.com/free-zip-code-tools.asp#radiusAber da sind Für die Suche stehen VIELE Ressourcen zur Verfügung zu diesem Thema.

Andere Tipps

Wie um alles in der Welt implementiert man die Funktion, die bei gegebener Postleitzahl 12345 alle Postleitzahlen in einer Entfernung von 1 Meile erhält?

Hier ist ein Beispiel, wie das geht:

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

Nur um technisch zu sein...PostGIS ist kein Projekt der Postgres-Community ...Es handelt sich um ein eigenständiges Projekt, das auf Postgres aufbaut.Wenn Sie Hilfe oder Unterstützung bei PostGIS benötigen, sollten Sie sich an die Community statt an Postgres wenden.

Sie können PostGIS verwenden.Darüber hinaus habe ich die Mapping-Bibliotheken von deCarta verwendet.Sie verfügen über eine Technologie, die es Ihnen ermöglicht, jeden beliebigen Datentyp mit einem Geokey zu versehen.Anschließend können Sie diese räumlich abfragen.

Haftungsausschluss:Ich arbeite für deCarta

Wäre es nicht effizienter, einfach herauszufinden, welche Städte in einem Umkreis von 1 Meile liegen, und diese Informationen in einer Tabelle zu speichern?Dann müssen Sie nicht ständig Berechnungen in der Datenbank durchführen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top