地理的な住所/場所をデータベースに保存する一般的な方法は何ですか?[閉まっている]


25

地球上の住所に適した地理的な住所/場所の正しい形式は何ですか?今のところ:

  • シティ
  • 通り
  • テキストデータ(簡単にするため)
  • zip
  • 緯度/経度

しかし、私はそれを改善できると信じています。国の州/地域または地域のようなものがあるかもしれません。または、シンガポールや香港には、地域/地域/州はありません。

通りはないかもしれませんが、道路や大通りなどがあります。多数の建物が複合している場合があります。床があるかもしれません。部屋番号。等....


11
どのアプリケーションについて、誰がそのアドレスを提供しているかを説明する必要があります。たとえば、ほとんどのWeb商業ストア/ Webサイトでは、ICBM(またはGPS)に不可欠な "緯度/経度"は入力しません。また、高度(時間と日付が)上で重要であるいくつかの例(海上でのいくつかの船を考え、またはエベレストにいくつかの旅行者)。だから、普遍的な答えがあるかどうかはわかりません。
バジルスタリンケビッチ


6
@BasileStarynkevitch:「どんなアプリケーションのために」ではなく、「どのようなユースケースのために」それは重要だと思います。例えば、ユースケースが世界規模の郵便サービスがメールを配信できることを確認することである場合、この質問には賢明な方法で回答できると思います。ただし、このユースケースでは、「lat / lng」は必要ありません。
Doc Brown

34
住所の汎用形式は単一の文字列だと思います。
エリックエイド

12
:あなたは上げる問題はそこにいくつかの企業は、例えば、それに対処する彼らの普遍的な方法を開発することを、とても痛いですwhat3words.com(三つの言葉にマッピング位置座標に沸きます)。彼らは、「what3wordsで、誰もがどこにでもアドレスを持っている」と主張しています。
ローマンスーシ

回答:


51

Googleは、世界中のすべての国の郵便住所の検証に役立つライブラリ開発しました。このライブラリを使用して、このデータを保存するスキーマを設計できます。

ターゲットとする顧客ベースのアドレス全体で最も一般的な必須フィールドを探して開始し、さまざまな要件を持つ国を特定したら、引き続きスキーマを調整できます。


5
+1既存のソリューションを研究するため。AddressAndroid SDK のクラスは、開始するのに適した別の場所になる可能性があります。
ケビンクルムウィーデ

4
Googleライブラリのクイックスキャンは、oasis-open.org
committees /

@ grahamj42、笑、そのページはとても壊れています。
ナキロン

41

地理的な住所/場所をデータベースに保存する一般的な方法は次のとおりです。

[Address] nvarchar(max) not null

これにより、最小限のプログラミングコードが必要になり(したがって、メンテナンスコストが削減されます)、あらゆるアドレスと完全に互換性があります。ただし、次の3つの大きな問題があります。

  • データ検証の欠如は、住所を保存する以外の目的でフィールドを使用できることを意味します。目的の1つは、アドレスフィールドに2 GBのデータを入力して、データベースのスペースを埋めることを目的としたDOS攻撃です。

  • この方法で保存されたデータは、ビジネスインテリジェンスおよびデータマイニングの目的で処理することを不可能にします。たとえば、インドから何人のユーザーがいますか?これらのアドレスは正規化されないため、わかりやすい方法はありません。

  • ユーザーは、誤って不完全なアドレスまたは明らかに間違ったアドレスを入力する場合があります。

最初の問題を軽減するために、フィールドを合理的な制限と思われるものに制限します。個人的には、1000文字から始めて、十分な大きさのデータセットを取得したら、最初のユーザーが入力したアドレスの長さに基づいて文字数を減らします。

他の2つの問題を軽減するために、住所を解析し、国、都市、郵便番号などを含むデータを表示するサードパーティAPIを使用できます。可能であれば、APIは住所を表示できる必要があります不完全な住所や間違った住所を入力するリスクを軽減するために、ユーザーにマップを戻します。ほとんどのユーザーは自分の住んでいる場所を知っており、マップ上の別の位置を見るとすぐに入力を確認する手がかりが得られます。

どんなAPIを使用しても、完璧ではないことに注意してください。ほとんどのアドレスが検索されますが、すべてではありません。これは、アドレスが存在しないことをAPIが示しているが、ユーザーが存在すると主張している場合、たとえユーザーが間違っていても、ユーザーをアプリオリに信頼する必要があることを意味します。

これは、元のユーザーの入力をAPIの結果と並べて保存する必要があることも意味します。これは、スキーマが次のようになることを意味します。

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

注:少なくとも、これが必要な場合は、国を個別に保存できます。たとえば、ユーザーが変更するオプションを使用して、アドレスフィールドから自動的に推測できます。
マチューM.

「APIを使用する」とは、他の国がすべての国の公式フォーマットを持っていることを意味します。自分でできない理由はありません
ユアン

@Ewan時間、お金、言語、その他の障壁を除いて理由はありません。
アンドリューは、モニカを復活させる

確かですが、何かをする方法についての答えを提供したり、何かをしている他の人の価格を比較したりしますか?
ユアン

@Ewan:質問はアドレスの保存形式についてです。APIはこの形式を指示しません。私の回答の目標は、プレーンテキストフィールドとXML / JSON /解析済みデータ用のフィールドがあればすぐに、どこからでもアドレスを保存して統計的に処理できることを示すことです世界中。
アルセニムルゼンコ

37

ありません。

国ごとに異なる住所形式があります。あなたが幸運であり、彼らがまったくフォーマットを持っているなら!

明らかに、緯度/経度は地球上のポイントを提供しますが、個々の家を識別するのにはあまり役に立ちません。たとえば、タワーブロックを考えてみてください。

最善の策は、各国の郵便サービスで正式な形式を確認することです。これはバックエンドデータベースに最適です。ただし、ほとんどの人が慣れているよりもはるかに多くのフィールドが含まれるため、エンドユーザー向けに単純化する必要があります。

たとえば、英国には「二重依存地域」などが含まれていますが、尋ねるとそれが何を意味するのか誰もわかりません。


3
普遍的な方法 ...........
Xwaro

40
@Xwaro彼らは言った、「ない」。
ザイマス

6
Xwaroとは、地球上の住所を想定していることを意味すると思います。
ユアン

3
これは印刷された住所形式の公式ソースです
。UniversalPostal

3
面白い。これは関連するページだと思います:upu.int/en/activities/addressing/s42-standard / ... A:ほんの数カ国、B:s42から国の住所形式へのマッピングが1対1
ユアン

21

唯一の普遍的な形式は、複数のテキスト行を持つ単一のテキストフィールドを持つことです。これにより、地球上のあらゆるアドレスが許可されます。


2
素晴らしい、今では誰もが異なる、互換性のない方法で同じ住所を記述することができます。私は質問が標準について尋ねなかったと思うので、これは技術的に正しい答えです。
マイケル

@Michael:アドレス世界中で異なり、互換性ありません。ありません標準的なテンプレートが。複数行フィールドを使用すると、ユーザーは実際に正しいアドレスを書き込むことができます。
ジャックB

@Michael個別のフィールドは、しばしば1つのフィールドまたは他のフィールドを切り捨て/短縮することを強制します。これは、一貫性のない表現にもつながります。(それでも通常は動作しますが、郵便サービスはこれでかなり経験があります)。
ハルク


ちょっとおもしろいですが、これは技術的には正しくありません。国の一部の地域では、住所の一部が写真として描かれています。
KayakinKoder

9

私は多くの国で使用されるソフトウェアソリューションを開発しています。この問題に対処するには、最初に大きなエンティティから開始します。つまり、国には最小のフィールドまたは最小のフィールドがあります。これは、これまでに実験したすべての国でうまく機能します。また、スマートな重複防止システムもあり、ユーザーが非常に「創造的」であるために何らかの形でシステムに参加している人々の合併もあります。管理セクションには、国ごとの住所フィールドの順序設定があります。つまり、日本では郵便番号が最初にあり、英国/米国は最後です。

一般的に、次を使用します。

  • 郵便番号
  • 州/県/県/郡
  • 市/町/村
  • 通り/道路/ブロック
  • 建物名/番号
  • 特定/カスタム情報

入力して保存すると、共役バージョンを表示でき、フィールドは不要です。

私が言ったように、これは私たちがソフトウェアを持っているすべての国で機能し、1989年以来の開発の結果です。

これが何らかの形で役立つか、少なくとも別の洞察を提供することを願っています。


「州/県/都道府県/郡」のデータベースの列にどのように名前を付けますか?
Xwaro

6
@Xwaro重要ではありませんが、開発者が最も混乱しないと思う言葉に名前を付けてください。これは、名前がソフトウェアの内部にあり、ユーザーに表示されないためです。アドレスがフィールドの名前とともに表示されることはありません。つまり、決して表示されませんNo 10 Street Downing Street, City Westminster, State London, Country UK。代わりに表示されます10 Downing Street, Westminster, London, UK
slebetman

@slebetman質問は、「State / Province / Prefecture / County」のデータベースの列にどのように名前を付けるのですか?「「州/県/県/県」のデータベースの列に名前を付けることをどのようにお勧めしますか?
ダリ

@Dari関係ありません。開発者が最も混乱しないと思う言葉は何でも付けます。これは、名前が私のソフトウェアの内部にあり、ユーザーに表示されることがないためです。だから、私のチームが何に慣れているかに依存します。
スリーブマン

@slebetman-名前はなんですか?
ダリ

0

すでに述べたように、最も普遍的な(ただし、検証するのは実用的ではなく、おそらく最も有用ではない)単一の大きなUnicodeフィールドです。

国を住所の残りの部分から分離し、ISO国コードとして保存できます。国を正規化し、住所の残りの部分を検証する際に何らかの有用性を提供します。

郵便番号(郵便番号)をその他の住所から分離することもできます。これは、住所の残りの部分を検証するのにも有用であり、ジオロケーションでは(不正確ではありますが)役立つ可能性があります。たとえば、カナダでは、郵便番号と番地(別名家屋番号)のみを指定して住所を一意に識別できます。これはすべての国で当てはまるわけではありません。

各国が住所を作成する方法が異なるため、フィールドを州/県または都市専用にすることは、より困難になり始めます。最初のオーディエンスは北米に焦点を当てているため、このようなフィールドを持つアドレステーブルを設定しました。これは、国際的なオーディエンスが問題を引き起こす可能性があることを知っているためです。厄介で潜在的に障害が発生しやすい妥協-決して一般的ではありません。


0

Mitchdavの答えに反して、Googleのライブラリを使用することはお勧めしません。ユニットテストデータを見つけることを期待して、非正統的なアドレス指定スキームを使用して、さまざまな国際的な場所のリポジトリを検索しましたが、心配なことにリポジトリ全体でゼロヒットが見つかりました。

あなたの最善の策は、住所を自由形式の複数行テキストとして扱うことだと思います。すべてのアドレスを検証できない可能性がありますが、一部のアドレス形式は非常に奇妙で予想外であり、最終的に正しいアドレスを入力する責任はユーザーにあり、ほとんどのアプリケーションではユーザーが無効なアドレス。

おそらく、バリデーターを使用して警告を提供するかもしれませんが、それ以上のものはありません。ただし、検証しないアドレスは拒否しないでください。拒否すると、一部の顧客が失われる可能性があります。これは、ユーザーが奇妙なアドレス形式のエリアに住んでいる場合、警告を無視しても安全であることを伝えるように、ユーザーに警告を伝える方法の問題につながります...


-1

あなたが地球上の任意のアドレスを言うように、唯一の緯度経度または...があります

https://what3words.com

3つの言葉は、アルゴリズムであり(データベースではないため、あらゆるものに埋め込むことができます)、地球上のどこでも3x3メートルのパッチを定義できます。

トンガと他のいくつかの州は、それを郵便番号システムとして採用していますが、オーバーレイとしてそれを置き換えることはありませんが、かなりクールで、非常によく構築され、考え抜かれています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.