Qual è un modo universale per memorizzare un indirizzo / posizione geografica in un database? [chiuso]


25

Qual è il formato corretto di un indirizzo / luogo geografico adatto a qualsiasi indirizzo sulla Terra? Al momento ho:

  • nazione
  • città
  • strada
  • numero
  • dati di testo (per semplicità)
  • cerniera lampo
  • lat / lng

Ma credo di poterlo migliorare: potrebbe esserci uno stato / una regione di un paese o qualcosa del genere. O nessuna area / regione / stato, diciamo, a Singapore o Hong Kong.

Potrebbe non esserci strada, ma strada o viale o qualcos'altro. Un certo numero di un edificio potrebbe essere composto. Potrebbe esserci un piano. Un numero di stanza Eccetera....


11
Devi spiegare per quale applicazione e chi fornisce quell'indirizzo. Ad esempio sulla maggior parte dei negozi / siti Web commerciali Web, non scrivo alcuna "latitudine / longitudine" che al contrario è essenziale per gli ICBM (o GPS). Inoltre, l'altitudine (e l'ora e la data) è importante in alcuni casi (si pensi ad alcune navi in ​​mare o ad alcuni viaggiatori sull'Everest). Quindi non sono sicuro che ci sia una risposta universale.
Basile Starynkevitch,


6
@BasileStarynkevitch: Penso che non sia molto importante "per quale applicazione", ma "per quale caso d'uso". Se, ad esempio, il caso d'uso è assicurarsi che i servizi postali in tutto il mondo siano in grado di consegnare la posta, credo che a questa domanda possa essere data una risposta ragionevole. Tuttavia, per questo caso d'uso non sarà richiesto "lat / lng".
Doc Brown,

34
Penso che il formato universale per un indirizzo sia una singola stringa.
Erik Eidt,

12
Il problema che sollevi è così doloroso, che alcune aziende là fuori sviluppano il loro modo universale di risolverlo, ad esempio what whatwords.s . Sostengono che "Con what3words, ora tutti e ovunque hanno un indirizzo".
Roman Susi,

Risposte:


51

Google ha sviluppato una libreria che consente di convalidare gli indirizzi postali per ogni paese del mondo, che è possibile utilizzare per progettare uno schema per archiviare questi dati.

Per iniziare, cerca i campi obbligatori più comuni tra gli indirizzi della tua base di clienti di destinazione e mentre identifichi altri paesi con requisiti diversi, puoi continuare a modificare il tuo schema.


5
+1 per lo studio di soluzioni esistenti. La Addresslezione da Android SDK potrebbe essere un altro buon punto di partenza.
Kevin Krumwiede,

4
Una rapida scansione della biblioteca di Google mostra che si basa su oasis-open.org/committees/ciq/download.shtml
grahamj42

@ grahamj42, lol, quella pagina è così rotta.
Nakilon,

41

Il modo universale per memorizzare un indirizzo / posizione geografica in un database è questo:

[Address] nvarchar(max) not null

Ciò richiede la minima quantità di codice di programmazione (e quindi riduce i costi di manutenzione) ed è pienamente compatibile con qualsiasi indirizzo. Ha, tuttavia, tre grandi problemi:

  • La mancanza di convalida dei dati significa che il campo può essere utilizzato per scopi diversi dalla memorizzazione dell'indirizzo. Uno degli scopi è un attacco DOS destinato a riempire lo spazio del database immettendo 2 GB di dati nel campo dell'indirizzo.

  • I dati memorizzati in questo modo rendono impossibile elaborarli per scopi di business intelligence e data mining. Ad esempio, quanti utenti provengono dall'India? Non esiste un modo semplice per dirlo, dal momento che tali indirizzi non saranno normalizzati.

  • Gli utenti possono inserire erroneamente un indirizzo incompleto o chiaramente sbagliato.

Per mitigare il primo problema, limita il campo a quello che ritieni sia un limite ragionevole. Personalmente, inizierei con 1000 caratteri, per poi ridurlo in base alla lunghezza degli indirizzi inseriti dai primi utenti una volta ottenuto un set di dati abbastanza grande.

Per mitigare gli altri due problemi, puoi utilizzare un'API di terze parti che analizza gli indirizzi e ti presenta i dati contenenti il ​​paese, la città, il codice postale, ecc. Se possibile, l'API dovrebbe essere in grado di visualizzare l'indirizzo su una mappa di ritorno all'utente per ridurre il rischio per l'utente di inserire un indirizzo incompleto o errato: la maggior parte degli utenti sa dove vivono e vedere una posizione diversa su una mappa darebbe loro immediatamente un indizio che dovrebbero controllare il loro input.

Nota che qualunque API tu usi, non sarà perfetta. Troverà la maggior parte degli indirizzi, ma non tutti. Ciò significa che se l'API dice che l'indirizzo non esiste, ma l'utente insiste che sia così, dovresti fidarti a priori dell'utente, anche se potrebbe sbagliarsi.

Ciò significa anche che è comunque necessario memorizzare l'input dell'utente originale, fianco a fianco con il risultato dell'API. Ciò significa che lo schema diventa:

[RawAddress] nvarchar(max) not null
[ParsedAddress] xml null

Nota: almeno, è possibile memorizzare il paese separatamente, se necessario. Ad esempio, potrebbe essere automaticamente dedotto dal campo dell'indirizzo, con l'opzione per l'utente di cambiarlo.
Matthieu M.,

'usa un'API' significa solo che qualcun altro ha tutti i formati ufficiali del paese. Non c'è motivo per cui non puoi farlo da solo
Ewan,

@Ewan Nessun motivo tranne che per il tempo, i soldi, la lingua e altre barriere.
Andrew dice Reinstate Monica il

certo, ma stiamo fornendo risposte su come fare cose o confrontando i prezzi di altre persone che fanno cose per te?
Ewan,

@Ewan: la domanda riguarda il formato di archiviazione degli indirizzi. L'API non impone questo formato: l'obiettivo della mia risposta è mostrare che non appena si dispone di un campo di testo semplice e un campo XML / JSON / qualunque sia per i dati analizzati, è possibile sia archiviare che elaborare statisticamente un indirizzo da qualsiasi luogo nel mondo.
Arseni Mourzenko,

37

Non ce n'è uno.

Ogni paese ha diversi formati di indirizzo. Se sei fortunato, e hanno un formato a tutti!

Ovviamente latitudine / longitudine ti daranno un punto sul globo, ma non è davvero utile per identificare le singole case. Prendi in considerazione solo un palazzone per esempio.

La soluzione migliore è controllare il servizio postale di ciascun paese per un formato ufficiale. Questo può essere ottimo per il tuo database back-end. Ma probabilmente dovrai semplificarlo per gli utenti finali in quanto conterrà molti più campi di quanti sono abituati.

Quello del Regno Unito, ad esempio, include cose come "località a doppia dipendenza", ma nessuno saprebbe cosa significasse se glielo chiedessi.


3
Che cos'è un modo universale ...........
Xwaro,

40
@Xwaro Hanno appena detto, non
Zimo

6
Immagino che Xwaro significhi che sto assumendo indirizzi sulla terra.
Ewan,

3
Questa è la fonte ufficiale per i formati di indirizzi stampati: Universal Postal Union
grahamj42

3
interessante. Penso che questa sia la pagina pertinente: upu.int/en/activities/addressing/s42-standard/… puoi vedere come A: sono solo alcuni paesi e B: la mappatura da s42 al formato dell'indirizzo dei paesi non è 1 a 1
Ewan,

21

L'unico formato universale è avere un singolo campo di testo che può avere più righe di testo. Ciò consentirà qualsiasi possibile indirizzo sulla terra.


2
Bene, ora tutti possono descrivere lo stesso indirizzo in un modo diverso e incompatibile. Suppongo che la domanda non sia stata posta sugli standard, quindi questa è tecnicamente una risposta corretta.
Michael,

@Michael: gli indirizzi sono diversi e incompatibili in tutto il mondo. Non v'è alcun modello standard. Avere un campo a più righe consente all'utente di scrivere effettivamente l'indirizzo corretto.
Jacques B,

@Michael Campi separati spesso mi costringono a troncare / abbreviare un campo o l'altro, il che porta anche a rappresentazioni incoerenti. (Funziona ancora di solito, i servizi postali sono abbastanza esperti in questo).
Hulk,


Solo un bocconcino interessante, questo non è tecnicamente vero. In alcune aree dei paesi, parti di indirizzi sono disegnate come immagini.
KayakinKoder

9

Ho sviluppato soluzioni software da utilizzare in molti paesi. Affrontiamo questo problema iniziando prima con l'entità più grande, vale a dire il paese quindi ha i campi fino al meno comune o il più piccolo. Funziona bene per tutti i paesi con cui abbiamo sperimentato finora. Abbiamo anche un sistema intelligente di prevenzione dei duplicati e la fusione per coloro che in qualche modo entrano nel sistema poiché gli utenti sono molto "creativi". Nella sezione admin abbiamo un ordine dei campi indirizzo per paese. vale a dire che il Giappone ha prima il codice postale / postale dove ultimo come Regno Unito / Stati Uniti.

In generale, utilizziamo:

  • Nazione
  • Post / CAP
  • Stato / Provincia / Prefettura / County
  • Città / Comune / Frazione
  • Via / Strada / blocchi
  • Nome / numero dell'edificio
  • Informazioni specifiche / personalizzate

Una volta inserita e salvata, è possibile visualizzare una versione coniugata tralasciando i campi non necessari.

Come ho detto, questo funziona per tutti quei paesi in cui il software era dotato di software ed è il risultato dello sviluppo dal 1989.

Spero che questo aiuti in qualche modo o almeno fornisca un'altra intuizione.


come si nomina una colonna nel proprio db per "Stato / Provincia / Prefettura / Contea"?
Xwaro,

6
@Xwaro Non importa, chiamala come vuoi che i tuoi sviluppatori saranno meno confusi. Questo perché il nome è interno al tuo software e non sarà mai visto dagli utenti. Gli indirizzi non vengono mai visualizzati con il nome del campo. Cioè, non vedi mai No 10 Street Downing Street, City Westminster, State London, Country UK. Invece vedrai10 Downing Street, Westminster, London, UK
slebetman il

@slebetman La domanda era: come si nomina una colonna nel proprio db per "Stato / Provincia / Prefettura / Contea"? Non "come mi consigliate di nominare una colonna nel mio db per" Stato / Provincia / Prefettura / Contea "?
Dari,

@Dari Non importa, lo chiamo come mi pare che i miei sviluppatori saranno meno confusi. Questo perché il nome è interno al mio software e non verrà mai visto dagli utenti. Quindi dipende da cosa è abituata la mia squadra.
slebetman,

@slebetman - come lo chiami?
Dari,

0

Come già detto, il più universale (ma poco pratico da convalidare e forse meno utile) è un unico grande campo unicode.

È possibile separare il paese dal resto dell'indirizzo e memorizzarlo come codice paese ISO. Normalizzerebbe il paese e offrirebbe qualche utilità nel convalidare il resto dell'indirizzo.

Puoi anche separare il codice postale o CAP dal resto dell'indirizzo. Ciò avrebbe anche qualche utilità nel convalidare il resto dell'indirizzo e potrebbe essere utile (anche se impreciso) nella geolocalizzazione. Ad esempio: in Canada è possibile identificare in modo univoco qualsiasi indirizzo specificando solo il codice postale e il numero civico (ovvero il numero civico); questo potrebbe non essere vero in tutti i paesi.

Dedicare campi a stati / province o città inizia a diventare più problematico a causa delle variazioni nel modo in cui ciascun paese formula un indirizzo. Ho impostato tabelle di indirizzi con tali campi perché il pubblico iniziale è focalizzato sul Nord America, sapendo che un pubblico internazionale potrebbe creare un problema. Nella maggior parte dei casi, possono essere "con le scarpe", ma è un Compromesso imbarazzante e potenzialmente soggetto a guasti - sicuramente non universale.


0

Contrariamente alla risposta di Mitchdav, consiglierei di non utilizzare la biblioteca di Google. Ho cercato nel repository vari luoghi internazionali con schemi di indirizzamento non ortodossi nella speranza di trovare dati di test unitari, ma preoccupantemente ho trovato zero hit nell'intero repository.

Penso che la tua scommessa migliore sia trattare un indirizzo come testo a più righe in formato libero. Fa schifo che forse non è possibile convalidare tutti gli indirizzi, ma alcuni formati di indirizzamento sono davvero strani e forse imprevisti e alla fine la responsabilità di compilare l'indirizzo corretto ricade sull'utente e nella maggior parte delle applicazioni l'utente porta conseguenze negative della compilazione di un indirizzo non valido.

Forse potresti usare un validatore per fornire un avviso , ma niente di più. Ma non rifiutare indirizzi che non convalidano, perché altrimenti potresti perdere alcuni clienti. Il che porta alla domanda su come comunicare l'avviso all'utente in modo tale che comunicherà che, se l'utente vive in un'area con uno strano formato di indirizzo, è sicuro ignorare l'avviso ...


-1

Come dici qualsiasi indirizzo sulla terra c'è solo lat long o ...

https://what3words.com

Che 3 parole, è un algoritmo (quindi non un database, quindi può essere incorporato in qualsiasi cosa) che può definire una patch di 3x3 metri ovunque sulla Terra.

Tonga e alcuni altri stati l'hanno adottato come sistema di codice postale, mentre non lo sostituirà come sovrapposizione, è piuttosto bello, molto ben costruito e pensato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.