Esiste un database di indirizzi stradali comune per tutti gli indirizzi del mondo?


122

Sono un programmatore e ad essere sincero non conosco le strutture degli indirizzi stradali del mondo, come è strutturato il mio paese :) quindi qual è il progetto di database migliore e comune per memorizzare gli indirizzi stradali? Dovrebbe essere così semplice da usare, veloce da interrogare e dinamico per memorizzare tutti gli indirizzi stradali del mondo che si identificano solo con un ID
Grazie mille



Hai chiesto indirizzi stradali, ma tutte le risposte riguardano indirizzi postali ( qual è la differenza? ). Forse il titolo dovrebbe essere cambiato?
wrygiel

Risposte:


123

È possibile rappresentare indirizzi da molti paesi diversi in un insieme standard di campi. L'idea di base di una via d'accesso con nome (arteria stradale) su cui si trovano gli edifici nominati o numerati è abbastanza standard, tranne che in Cina a volte. Altri concetti quasi universali includono: nominare l'insediamento (città / paese / villaggio), che può essere genericamente indicato come località; nominando la regione e assegnando un codice postale alfanumerico. Tieni presente che i codici postali, noti anche come codici postali, sono puramente numerici solo in alcuni paesi. Avrai bisogno di molti campi se vuoi davvero essere generico.

L'Unione postale universale UPU fornisce i dati degli indirizzi per molti paesi in un formato standard . Si noti che il formato UPU contiene tutti gli indirizzi (fino alla precisione del campo disponibile) per un intero paese, è quindi relazionale. Se si memorizzano gli indirizzi dei clienti, in cui verrà memorizzata solo una piccola parte di tutti gli indirizzi possibili, è meglio utilizzare un'unica tabella (o formato flat) contenente tutti i campi e un indirizzo per riga.

Un formato ragionevole per la memorizzazione degli indirizzi sarebbe il seguente:

  • Righe indirizzo 1-4
  • Località
  • Regione
  • Codice postale (o codice postale)
  • Nazione

Le righe dell'indirizzo 1-4 possono contenere componenti come:

  • Edificio
  • Sotto-Costruzione
  • Numero locale (numero civico)
  • Premessa Gamma
  • strada transitabile
  • Sotto-transitabile
  • Località a doppia dipendenza
  • Località secondaria

Spesso vengono utilizzate solo 3 linee di indirizzo, ma spesso questo è insufficiente. Ovviamente è possibile richiedere più righe per rappresentare tutti gli indirizzi nel formato ufficiale, ma le virgole possono sempre essere utilizzate come separatori di riga, il che significa che le informazioni possono ancora essere catturate.

Di solito l'analisi dei dati viene eseguita per località, regione, codice postale e paese e questi elementi sono abbastanza facili da comprendere per gli utenti durante l'immissione dei dati. Questo è il motivo per cui questi elementi dovrebbero essere memorizzati come campi separati. Tuttavia, non forzare gli utenti a fornire il codice postale o la regione, potrebbero non essere utilizzati localmente.

La località può essere poco chiara, in particolare la distinzione tra località cartografica e località postale. La località postale è quella considerata da un'autorità postale che a volte può essere una grande città vicina. Tuttavia, il codice postale di solito risolverà eventuali problemi o discrepanze, per consentire una consegna corretta anche se non viene utilizzata la località postale ufficiale.


1
Potete fornire un URL per l'UPU? (Sì, so che potrei trovarlo, ma le risposte migliori non spingono le persone a fare la ricerca.)
Jonathan Leffler,

Prova upu.int/post_code/en/… e scegli il paese appropriato nel
menu

Aggiunto URL per prodotto UPU Post * Code
Edward Ross,

17
Inoltre, alcuni paesi (ad esempio la Repubblica d'Irlanda) non utilizzano i codici postali. Se avessi un centesimo per il numero di volte che ho dovuto inserire nd (non applicabile) come CAP perché è un field man obbligatorio. . . Ormai avrei cinque o sei centesimi :)
Binary Worrier

se l'UPU ha elenchi scaricabili, attualmente, hanno fatto un buon lavoro nel tenerli ben nascosti.
Jahmic

47

Dai un'occhiata alle risposte al database . Nello specifico, questo copre molti casi:

(Tutti i tipi di dati con caratteri di lunghezza variabile)

AddressId
Line1
Line2
Line3
City
ZipOrPostcode
StateProvinceCounty
CountryId
OtherAddressDetails

inserisci qui la descrizione dell'immagine


Non ho downvote, ma penso che l'unico modo in cui potrebbe funzionare era se tutti i campi tranne AddressId e Line1 fossero opzionali. In tal caso, non è troppo utile.

11
I tipi di dati sono importanti: non tutti i paesi hanno codici postali interi! Un collega lo ha scoperto rapidamente con un cliente in Canada.
Eric

1
@Eric: oltre ai campi Id, tutti questi campi sono tipi di dati carattere
Mitch Wheat,

2
Per l'ID paese, è necessario utilizzare il codice paese ISO 3166 a 2 lettere (o 3 lettere). Lo schema proposto consente di memorizzare un indirizzo analizzato; non ti dice come formattarlo. (Oh, e il Regno Unito ha codici postali alfanumerici: IP31 3GH, SE1W 9PQ, ecc. Penso che il secondo gruppo sia sempre NAA; il primo gruppo inizia con A e contiene almeno una N (A = alfa, N = cifra), ma niente mi sorprenderebbe.)
Jonathan Leffler

@ Neil: esatto. C'è così tanta variazione in base al paese che non è possibile utilizzare una singola tabella e aspettarsi che il db la convalidi.
Dave Sherohman

26

Chiediti qual è lo scopo principale dell'archiviazione di questi dati? Hai intenzione di inviare effettivamente posta alla persona all'indirizzo? Monitorare i dati demografici, le popolazioni? Riuscirai a chiedere ai chiamanti il ​​loro indirizzo corretto come parte di alcune autenticazioni / verifiche di base? Tutti i precedenti? Nessuno dei precedenti?

A seconda delle tue effettive necessità, determinerai a) che non ha molta importanza, e puoi optare per un approccio a testo libero, oppure b) campi strutturati / specifici per tutti i paesi, oppure c) architettura specifica del paese.


Ha senso. Sto cercando una buona soluzione a questo problema, ma ce ne sono molte diverse. Come hai detto: probabilmente è meglio scegliere tra i requisiti effettivi.
displayname

12

A volte il punto più vicino che puoi raggiungere a un indirizzo è la città.

Una volta avevo un progetto per mettere tutte le scuole secondarie in India su Google Maps. Ho scritto un programma elegante utilizzando l'API di Google e ho pensato che sarebbe stato abbastanza facile.

Poi ho ricevuto i dati dal cliente. Alcuni indirizzi scolastici erano cose come "Di fronte al mercato, vicino al barbiere" o "Vicino alla vecchia fermata dell'autobus".

Ha reso il mio compito molto più difficile poiché, sfortunatamente, l'API di Google non supporta quel formato.


2
Anche gli indirizzi asiatici sono famosi per questo. "73rd Block West Ninjang St, Building 2, Take Second Upper Elevator, Complesso di uffici accanto alla food court, 468th Industrial District, Shanghai 456789" ...
ruhnet

9

Per gli indirizzi internazionali, è notevolmente difficile trovare un modo per formattare le informazioni se sono suddivise in campi. Ad esempio, un indirizzo italiano utilizza:

<street address>
<zip> <town> <region>
<country>

Ad esempio

Via Eroi della Repubblica
89861 Tropea VV
Italy

Questo è piuttosto diverso dall'ordine per gli indirizzi statunitensi - sulla seconda riga.

Vedi anche le domande SO:

Controlla anche il tag " codice postale ".


Modifica : ordine inverso di regione e città - per UPU


5

Forse questo è utile: https://gist.github.com/259744 Per un progetto ho raccolto una tabella di informazioni su tutti i paesi del mondo, inclusi codici ISO, dominio di primo livello, codice telefonico, segno dell'auto, lunghezza e regex di cerniera lampo. Nomi e commenti dei paesi purtroppo solo in tedesco ...


2

Dipende da quanto sei pronto ad andare con i campi. Un campo indirizzo in formato libero ovviamente andrà sempre bene, ma sarà di relativamente poco aiuto per restringere la geografia.

Il problema che avrai è che c'è troppa variazione nel livello della gerarchia geografica tra i paesi. Diamine, alcuni paesi non hanno nemmeno "indirizzi stradali" ovunque.

Ti consiglio di non provare a renderlo troppo intelligente.


2

A differenza di altre risposte qui, credo che sia possibile avere un database di indirizzi strutturato.

Appena fuori dal cappello, posso pensare alla seguente struttura:

  • Nazione
  • Regione (stato / provincia)
  • Località (Città / Comune)
  • Località secondaria (contea / altra suddivisione di una località)
  • strada

Ma come interrogarlo abbastanza velocemente?

Un modo in cui penso sempre che possa essere realizzato è chiedere il codice postale (o codice postale) che varia da paese a paese, ma è solido all'interno del paese.

In questo modo puoi strutturare i tuoi dati attorno alle informazioni fornite dagli uffici postali di tutto il mondo.


2

Len Silverston, famoso per l' Universal Data Model, raccomanda una gerarchia separata GEOGRAPHIC BOUNDARIESe in base a quanta forma di libertà sei disposto ad accettare sia semplici STREET ADDRESS LINEs che derivati ​​per paese.


1
È vero, ei modelli che Silverston ha inventato sono abbastanza buoni e coprono molto terreno, ma ancora non penso che tale complessità sia applicata al web (a questo punto), specialmente dal punto di vista dell'utente finale. Alla fine, l'usabilità (quasi) vince sempre.
Alix Axel

2

No, assolutamente no. Se confronti il ​​modo in cui funzionano gli indirizzi statunitensi e giapponesi , vedrai che non è possibile.

AGGIORNARE:

A pensarci bene, tutto può essere fatto, ma c'è un compromesso.

Un approccio è modellare il problema con le tabelle address e address_attribute, con una relazione 1: m tra di loro, qualsiasi cosa può essere modellata. La tabella address_attribute avrebbe un pk, un nome, un valore e un fk che rimanda al suo indirizzo genitore pk. È quasi come usare una mappa con nome, coppie di valori.

Il compromesso è dover fare un JOIN ogni volta che vuoi un indirizzo. Devi anche interrogare i nomi di address_attributes per capire con cosa hai a che fare ogni volta.

Un altro approccio potrebbe essere quello di effettuare ricerche più complete su come vengono modellati gli indirizzi in tutto il mondo. In un mondo orientato agli oggetti potresti avere la classe Indirizzo occidentale (street1 / street2 / city / state / zip) e altre per Giappone, Cina, tante quante sono necessarie per affiancare lo spazio degli indirizzi. Quindi avresti una tabella indirizzi principale e tabelle figlio per gli altri tipi con una relazione 1: 1 tra di loro.

Come fanno Amazon o eBay? Spediscono a livello internazionale. Hanno funzionalità dell'interfaccia utente specifiche della locale? Ho usato solo le impostazioni internazionali degli Stati Uniti.


1
e se avessi bisogno della maggior parte degli indirizzi?
Arsen Mkrtchyan

Scusa, non ti sto seguendo qui.
duffymo

2

No, non esistono schemi di indirizzamento standard. Di solito varia da paese a paese. Anche l' Unione postale universale ha detto su Rivolgersi al mondo, un indirizzo per tutti che non c'è. La soluzione migliore è utilizzare gli standard del codice del paese di 2/3 lettere noti come ISO 3166 e trattare tutto il resto secondo gli standard del paese.

Tuttavia, se desideri davvero disperatamente utilizzare strumenti facilmente accessibili per il tuo progetto, puoi provare l' API di Google Place .


Mi piace molto l'idea di vedere come l'API di Google Place gestisce le cose!
Andrew Steitz

1

Il tuo design dovrebbe dipendere fortemente dal tuo scopo. Alcune persone hanno pubblicato come strutturare i dati. Quindi, se vuoi semplicemente inviare una s-mail a qualcuno, lo farà. Le cose iniziano a complicarsi se si desidera utilizzare questi dati per la navigazione. La navigazione in auto richiederà strutture aggiuntive per contenere informazioni sul traffico (ad esempio strade a senso unico), mentre la navigazione a piedi richiederà molti dati aggiuntivi. Ecco un piccolo esempio: nella mia città, il mio quartiere è vicino al parco. Accanto al parco si trova l'ex campo d'aviazione (in effetti, uno dei più antichi d'Europa) trasformato in museo dell'aviazione. Accanto al museo dell'aviazione c'è un parco commerciale. Il numero civico del museo è 39, mentre i numeri dei parchi commerciali iniziano con 39A. Quindi può sembrare che 39 e 39A siano vicini, ma ci vuole circa un miglio per camminare dall'uno all'altro (e anche di più se si va in auto).
Questo è solo un piccolo esempio tratto dalla mia città, penso che probabilmente puoi trovare molte eccezioni (specialmente nelle parti rurali o selvagge di ogni paese).

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.