Was ist eine universelle Methode zum Speichern einer geografischen Adresse / eines geografischen Standorts in einer Datenbank? [geschlossen]

25

Was ist das richtige Format einer geografischen Adresse / eines geografischen Standorts, das zu jeder Adresse auf der Erde passt? Im Moment habe ich:

  • Land
  • Stadt
  • Straße
  • Nummer
  • Textdaten (der Einfachheit halber)
  • Postleitzahl
  • lat / lng

Aber ich glaube, ich kann es verbessern: Es könnte einen Staat / eine Region eines Landes oder eine ähnliche Region geben. Oder kein Gebiet / Region / Bundesstaat, zum Beispiel in Singapur oder Hongkong.

Möglicherweise gibt es keine Straße, sondern eine Straße oder einen Boulevard oder etwas anderes. Eine Nummer eines Gebäudes könnte zusammengesetzt sein. Es könnte einen Boden geben. Eine Zimmernummer. Etc....

Xwaro
quelle
11
Sie müssen erläutern, für welche Anwendung und von wem diese Adresse bereitgestellt wird. Zum Beispiel gebe ich in den meisten kommerziellen Webshops / Websites keinen "Breiten- / Längengrad" ein, der im Gegenteil für ICBMs (oder GPS) wesentlich ist. In einigen Fällen ist auch die Höhe (sowie Uhrzeit und Datum) wichtig (denken Sie an ein Schiff auf See oder einen Reisenden auf dem Everest). Ich bin mir also nicht sicher, ob es eine universelle Antwort gibt.
Basile Starynkevitch
61
Lesenswert
High Performance Mark
6
@BasileStarynkevitch: Ich denke, es ist nicht so wichtig, "für welche Anwendung", sondern "für welche Anwendungsfälle". Wenn der Anwendungsfall zum Beispiel darin besteht, sicherzustellen, dass weltweite Postdienste Mails zustellen können, kann diese Frage meiner Meinung nach auf vernünftige Weise beantwortet werden. Für diesen Anwendungsfall ist jedoch "lat / lng" nicht erforderlich.
Doc Brown
34
Ich denke, das universelle Format für eine Adresse ist eine einzelne Zeichenfolge.
Erik Eidt
12
Das Problem, das Sie ansprechen, ist so schmerzhaft, dass einige Unternehmen ihre universelle Methode entwickeln, um es anzugehen, zum Beispiel: what3words.com (das heißt, Standortkoordinaten auf drei Wörter abzubilden). Sie behaupten: "Mit what3words hat jetzt jeder und überall eine Adresse."
Roman Susi

Antworten:

51

Google hat eine Bibliothek entwickelt , mit deren Hilfe Postanschriften für jedes Land der Welt validiert werden können. Mit dieser Bibliothek können Sie ein Schema zum Speichern dieser Daten entwerfen.

Suchen Sie zunächst nach den am häufigsten benötigten Feldern in den Adressen Ihres Zielkundenstamms. Wenn Sie weitere Länder mit unterschiedlichen Anforderungen identifizieren, können Sie Ihr Schema weiter anpassen.

mitchdav
quelle
5
+1 für das Studium bestehender Lösungen. Die AddressKlasse aus dem Android SDK könnte ein weiterer guter Startpunkt sein.
Kevin Krumwiede
4
Ein schneller Scan der Google-Bibliothek zeigt, dass sie auf oasis-open.org/committees/ciq/download.shtml
grahamj42
@ grahamj42, lol, diese Seite ist so kaputt.
Nakilon
41

Die universelle Möglichkeit, eine geografische Adresse / einen geografischen Standort in einer Datenbank zu speichern, ist die folgende:

[Address] nvarchar(max) not null

Dies erfordert die geringste Menge an Programmcode (und reduziert so die Wartungskosten) und ist mit jeder Adresse voll kompatibel. Es hat jedoch drei große Probleme:

  • Das Fehlen einer Datenvalidierung bedeutet, dass das Feld für andere Zwecke als zum Speichern der Adresse verwendet werden kann. Einer der Zwecke ist ein DOS-Angriff, der den Speicherplatz Ihrer Datenbank ausfüllt, indem 2 GB Daten in das Adressfeld eingegeben werden.

  • Die auf diese Weise gespeicherten Daten können nicht für Business Intelligence- und Data Mining-Zwecke verarbeitet werden. Wie viele Benutzer kommen beispielsweise aus Indien? Es ist nicht einfach zu sagen, da diese Adressen nicht normalisiert werden.

  • Die Benutzer können versehentlich eine unvollständige oder eindeutig falsche Adresse eingeben.

Begrenzen Sie das Feld auf ein Ihrer Meinung nach angemessenes Limit, um das erste Problem zu beheben. Persönlich würde ich mit 1000 Zeichen beginnen und es dann basierend auf der Länge der Adressen reduzieren, die von den ersten Benutzern eingegeben wurden, sobald Sie einen Datensatz erhalten, der groß genug ist.

Um die beiden anderen Probleme zu beheben, können Sie eine Drittanbieter-API verwenden, die Adressen analysiert und Ihnen die Daten anzeigt, die Land, Stadt, Postleitzahl usw. enthalten. Wenn möglich, sollte die API in der Lage sein, die Adresse anzuzeigen Eine Karte an den Benutzer zurück, um das Risiko zu verringern, dass der Benutzer eine unvollständige oder falsche Adresse eingibt: Die meisten Benutzer wissen, wo sie leben, und wenn sie eine andere Position auf einer Karte sehen, erhalten sie sofort einen Hinweis, dass sie ihre Eingaben überprüfen sollten.

Beachten Sie, dass die von Ihnen verwendete API nicht perfekt ist. Es werden die meisten Adressen gefunden, aber nicht alle. Dies bedeutet , dass , wenn die API sagt , dass die Adresse nicht existiert, aber der Benutzer besteht darauf , dass dies der Fall, sollten Sie von vornherein das Vertrauen der Benutzer, selbst wenn er könnte falsch sein.

Dies bedeutet auch, dass Sie die Eingaben des ursprünglichen Benutzers neben dem Ergebnis der API speichern sollten. Dies bedeutet, dass das Schema wie folgt lautet:

[RawAddress] nvarchar(max) not null
[ParsedAddress] xml null
Arseni Mourzenko
quelle
Hinweis: Sie können das Land zumindest separat speichern, falls dies erforderlich ist. Beispielsweise könnte es automatisch aus dem Adressfeld abgeleitet werden, wobei der Benutzer die Möglichkeit hat, es zu ändern.
Matthieu M.
'Use a API' bedeutet nur, dass jemand anderes alle offiziellen Formate des Landes hat. Es gibt keinen Grund, warum Sie es nicht selbst tun können
Ewan
@Ewan Keine Gründe außer Zeit, Geld, Sprache und anderen Hindernissen.
Andrew sagt Reinstate Monica
Sicher, aber geben wir Antworten darauf, wie man Sachen macht oder wie man die Preise anderer Leute vergleicht, die Sachen für Sie machen?
Ewan
@Ewan: Die Frage betrifft das Speicherformat von Adressen. Die API schreibt dieses Format nicht vor: Ziel meiner Antwort ist es, zu zeigen, dass Sie eine Adresse von überall aus sowohl speichern als auch statistisch verarbeiten können, sobald Sie über ein Nur-Text-Feld und ein XML / JSON / Was auch immer-Feld für analysierte Daten verfügen in der Welt.
Arseni Mourzenko
37

Es gibt keinen.

Jedes Land hat unterschiedliche Adressformate. Wenn Sie Glück haben, und sie haben überhaupt ein Format!

Offensichtlich geben Ihnen Breiten- und Längengrade einen Punkt auf dem Globus, aber es ist nicht wirklich nützlich, um einzelne Häuser zu identifizieren. Betrachten Sie zum Beispiel einen Hochhaus.

Am besten überprüfen Sie die Post in jedem Land auf ein offizielles Format. Dies kann sehr hilfreich für Ihre Backend-Datenbank sein. Sie müssen es jedoch wahrscheinlich für Endbenutzer vereinfachen, da es viel mehr Felder enthält, als die meisten Benutzer gewohnt sind.

In Großbritannien gibt es zum Beispiel Dinge wie "doppelt abhängiger Ort", aber niemand würde wissen, was das bedeutet, wenn Sie ihn fragen.

Ewan
quelle
3
Was ist ein universeller Weg ...........
Xwaro
40
@ Xwaro Sie haben gerade gesagt, es gibt keine.
Zymus
6
Ich denke Xwaro bedeutet, dass ich Adressen auf der Erde annehme.
Ewan
3
Dies ist die offizielle Quelle für gedruckte Adressformate: Universal Postal Union
grahamj42
3
interessant. Ich denke, dies ist die relevante Seite: upu.int/en/activities/addressing/s42-standard/… Sie können sehen, wie A: es sind nur einige Länder, und B: die Zuordnung von s42 zu dem Länderadressformat ist nicht 1 zu 1
Ewan
21

Das einzige universelle Format ist ein einzelnes Textfeld, das mehrere Textzeilen enthalten kann. Dies ermöglicht jede mögliche Adresse auf der Erde.

JacquesB
quelle
2
Großartig, jetzt kann jeder dieselbe Adresse auf eine andere, nicht kompatible Weise beschreiben. Ich nehme an, dass die Frage nicht nach Standards gestellt wurde, daher ist dies eine technisch korrekte Antwort.
Michael
@Michael: Adressen sind weltweit unterschiedlich und inkompatibel. Es gibt keine Standardvorlage. Mit einem mehrzeiligen Feld kann der Benutzer die richtige Adresse eingeben.
JacquesB
@Michael Getrennte Felder zwingen mich oft, das eine oder andere Feld abzuschneiden / abzukürzen, was ebenfalls zu inkonsistenten Darstellungen führt. (Funktioniert immer noch in der Regel, Postdienste sind hier ziemlich erfahren).
Hulk
Nur ein interessanter Leckerbissen, das ist technisch nicht wahr. In einigen Ländern werden Teile von Adressen als Bilder gezeichnet.
KayakinKoder
9

Ich habe Softwarelösungen entwickelt, die in vielen Ländern eingesetzt werden. Wir gehen dieses Problem an, indem wir zuerst mit der größeren Entität beginnen, dh, das Land verfügt dann über Felder, die am wenigsten verbreitet oder am kleinsten sind. Es funktioniert gut für alle Länder, mit denen wir bisher experimentiert haben. Wir haben auch ein intelligentes System zur Verhinderung von Duplikaten und eine Fusion für diejenigen, die irgendwie in das System eingedrungen sind, da die Benutzer sehr "kreativ" sind. Im Admin-Bereich haben wir eine Adressfeldreihenfolge pro Ländereinstellung. Das heißt, Japan hat zuerst die Postleitzahl, wohin als letztes Großbritannien / USA.

Im Allgemeinen verwenden wir:

  • Land
  • Postleitzahl
  • Bundesstaat / Provinz / Präfektur / Landkreis
  • Großstadt Stadt Dorf
  • Straße / Straße / Block
  • Name / Nummer des Gebäudes
  • Spezifische / benutzerdefinierte Informationen

Einmal eingegeben und gespeichert, kann eine konjugierte Version angezeigt werden, ohne dass Felder erforderlich sind.

Wie gesagt, dies funktioniert in allen Ländern, in denen wir Software haben, und ist das Ergebnis der Entwicklung seit 1989.

Hoffe das hilft irgendwie oder liefert zumindest einen anderen Einblick.

Billsensei
quelle
Wie benennen Sie eine Spalte in Ihrer Datenbank für "Bundesstaat / Provinz / Präfektur / Landkreis"?
Xwaro
6
@Xwaro Es spielt keine Rolle, wie auch immer Sie sagen, Ihre Entwickler werden am wenigsten verwirrt sein. Dies liegt daran, dass der Name in Ihrer Software intern ist und von Benutzern niemals gesehen wird. Adressen werden niemals mit dem Namen des Feldes angezeigt. Das heißt, Sie sehen nie No 10 Street Downing Street, City Westminster, State London, Country UK. Stattdessen sehen Sie10 Downing Street, Westminster, London, UK
Slebetman
@slebetman Die Frage war: Wie benennen Sie eine Spalte in Ihrer Datenbank für "Bundesstaat / Provinz / Präfektur / Landkreis"? Nicht "Wie empfehlen Sie mir, eine Spalte in meiner Datenbank für" Bundesstaat / Provinz / Präfektur / Landkreis "zu benennen?
Dari
@Dari Egal, ich bezeichne es mit jedem Wort, von dem ich glaube, dass es meine Entwickler am wenigsten verwirrt. Dies liegt daran, dass der Name in meiner Software intern ist und von Benutzern niemals gesehen wird. Es kommt also darauf an, woran mein Team gewöhnt ist.
Slebetman
@slebetman - wie nennt man das?
Dari
0

Wie bereits erwähnt, ist das universellste (aber unpraktisch zu validierende und vielleicht am wenigsten nützliche) Feld ein einziges großes Unicode-Feld.

Sie können das Land von der restlichen Adresse trennen und als ISO-Ländercode speichern. Dies würde das Land normalisieren und eine nützliche Funktion bei der Validierung des Restes der Adresse bieten.

Sie können auch die Postleitzahl (PLZ) von der übrigen Adresse trennen. Dies hätte auch eine gewisse Nützlichkeit bei der Validierung des Restes der Adresse und könnte hilfreich (wenn auch ungenau) bei der Geolokalisierung sein. Zum Beispiel: In Kanada können Sie jede Adresse eindeutig identifizieren, indem Sie nur Postleitzahl und Hausnummer angeben. Dies ist möglicherweise nicht in allen Ländern der Fall.

Die Zuordnung von Feldern zu Bundesstaaten / Provinzen oder Städten wird aufgrund der unterschiedlichen Formulierungen der Adressen in den einzelnen Ländern zunehmend problematischer. Ich habe Adresstabellen mit solchen Feldern eingerichtet, weil das anfängliche Publikum sich auf Nordamerika konzentriert und weiß, dass ein internationales Publikum ein Problem darstellen würde umständliche und möglicherweise fehleranfällige Kompromisse - definitiv nicht universell.

Zenilogix
quelle
0

Entgegen der Antwort von Mitchdav würde ich davon abraten, die Bibliothek von Google zu verwenden. Ich suchte im Repository nach verschiedenen internationalen Orten mit unorthodoxen Adressierungsschemata in der Hoffnung, Komponententestdaten zu finden, aber besorgniserregend fand ich im gesamten Repository keine Treffer.

Ich denke, Ihre beste Wahl ist es, eine Adresse als mehrzeiligen Freitext zu behandeln. Es ist schade, dass Sie möglicherweise nicht alle Adressen validieren können, aber einige Adressierungsformate sind wirklich seltsam und möglicherweise unerwartet, und letztendlich liegt die Verantwortung für das Ausfüllen der richtigen Adresse beim Benutzer und in den meisten Anwendungen trägt der Benutzer die negativen Folgen des Ausfüllens einer ungültige Adresse.

Vielleicht können Sie einen Validator verwenden, um eine Warnung zu übermitteln , aber mehr nicht. Aber lehnen Sie nicht Adressen ab, die nicht gültig sind, da Sie sonst einige Kunden verlieren könnten. Was zu der Frage führt, wie die Warnung an den Benutzer so kommuniziert werden soll, dass, wenn der Benutzer in einem Gebiet mit einem seltsamen Adressformat lebt, es sicher ist, die Warnung zu ignorieren ...

Anonym
quelle
-1

Wie Sie sagen, jede Adresse auf der Erde gibt es nur lat lang oder ...

https://what3words.com

Welche 3 Wörter, ist ein Algorithmus (also keine Datenbank, die in irgendetwas eingebettet werden kann), der ein 3x3 Meter großes Feld von irgendwo auf der Erde definieren kann.

Tonga und einige andere Staaten haben es als ihr Postleitzahlensystem übernommen, während es es als Overlay nicht ersetzen wird. Es ist ziemlich cool und sehr gut gebaut und durchdacht.

RemarkLima
quelle