Coğrafi bir adres / konumun veritabanında depolanmasının evrensel bir yolu nedir? [kapalı]


25

Dünyadaki herhangi bir adres için uygun bir coğrafi adres / konumun doğru biçimi nedir? Şu an elimde:

  • ülke
  • Kent
  • sokak
  • numara
  • metin verileri (basitlik için)
  • zip
  • enlem / Ing

Ancak onu geliştirebileceğime inanıyorum: Bir ülkenin bir eyaleti / bölgesi ya da benzeri bir bölge olabilir. Ya da hiçbir bölge / bölge / eyalette, örneğin Singapur'da veya Hong Kong'da.

Sokak olamaz, yol ya da bulvar ya da başka bir şey olabilir. Bir binanın bir kısmı bileşik olabilir. Zemin olabilir. Bir oda numarası. Vb....


11
Hangi uygulamayı ve bu adresi kimin verdiğini açıklamalısınız. Örneğin çoğu Web ticari mağazasında / web sitesinde, aksine ICBM'ler (veya GPS) için gerekli olan herhangi bir "enlem / boylam" yazmıyorum. Ayrıca, irtifa (ve saat ve tarih) bazı durumlarda önemlidir (denizde bir gemi veya Everest'te bir gezgin düşünün). Bu yüzden evrensel bir cevap olduğundan emin değilim.
Basile Starynkevitch


6
@BasileStarynkevitch: "Hangi uygulama için" değil, "hangi durumlarda / durumlar için" çok önemli olmadığını düşünüyorum. Örneğin, kullanım durumu, dünya çapında posta hizmetlerinin postaları sunabilmesini sağlamaksa, bu sorunun makul bir şekilde yanıtlanabileceğini tahmin ediyorum. Ancak, bu kullanım için "lat / lng" gerekli olmayacaktır.
Doktor Brown

34
Bir adresin evrensel biçiminin tek bir Dize olduğunu düşünüyorum.
Erik Eidt

12
Ortaya attığınız sorun o kadar acı verici ki, oradaki bazı şirketler bunu ele almak için evrensel yollarını geliştiriyorlar, örneğin: what3words.com (konum koordinatlarını üç kelimeye eşlemek için aşağı doğru kayıyor ). "What3words ile herkesin ve her yerin artık bir adresi olduğunu" iddia ediyorlar.
Roman Susi

Yanıtlar:


51

Google, bu verileri depolamak için bir şema tasarlamak için kullanabileceğiniz, dünyadaki her ülke için posta adreslerini doğrulamaya yardımcı olan bir kütüphane geliştirmiştir .

Başlamak için hedeflenen müşteri tabanınızdaki adresler arasında en yaygın gerekli alanları arayın ve farklı gereksinimleri olan diğer ülkeleri tanımlarken şemanızı düzenlemeye devam edebilirsiniz.


5
Mevcut çözümleri incelemek için +1. AddressAndroid SDK sınıf başlatmak için başka bir iyi yer olabilir.
Kevin Krumwiede

4
Google kütüphane gösterileri hızlı bir tarama bunun üzerine inşa o oasis-open.org/committees/ciq/download.shtml
grahamj42

@ grahamj42, lol, bu sayfa çok bozuk.
Nakilon

41

Coğrafi bir adres / konumun veritabanında depolanmasının evrensel yolu şudur:

[Address] nvarchar(max) not null

Bu, en az miktarda programlama kodu gerektirir (ve böylece bakım maliyetlerini düşürür) ve herhangi bir adresle tamamen uyumludur. Bununla birlikte, üç büyük sorunu var:

  • Veri doğrulama eksikliği, alanın adresin kaydedilmesinden başka amaçlarla kullanılabileceği anlamına gelir. Amaçlardan biri, adres alanına 2 GB veri girerek veritabanınızın alanını doldurmayı amaçlayan bir DOS saldırısıdır.

  • Bu şekilde depolanan veriler, iş zekası ve veri madenciliği amacıyla işlenmesini imkansız kılar. Mesela, Hindistan'dan kaç kullanıcı var? Söylemenin kolay bir yolu yok, çünkü bu adresler normalleşmeyecek.

  • Kullanıcılar yanlışlıkla eksik veya açıkça yanlış bir adres girebilirler.

İlk sorunu azaltmak için, alanı makul bir sınır olarak düşündüğünüz şeyle sınırlandırın. Şahsen, 1000 karakterle başlayacağım ve daha sonra, yeterince büyük bir veri kümesi elde ettiğinizde, ilk kullanıcılar tarafından girilen adreslerin uzunluğunu temel alarak azaltmak istiyorum.

Diğer iki sorunu azaltmak için, adresleri ayıran ve size ülke, şehir, posta kodu, vb. İçeren verileri sunan üçüncü taraf bir API kullanabilirsiniz. Mümkünse, API adresini görüntüleyebilmelidir. Eksik veya hatalı bir adres girme riskini azaltmak için kullanıcıya geri dönen bir harita: çoğu kullanıcı nerede yaşadıklarını bilir ve bir haritada farklı bir konum görmesi derhal girişlerini kontrol etmeleri gerektiği konusunda ipucu verir.

Hangi API'yi kullanırsanız kullanın, mükemmel olmayacağını unutmayın. Adreslerin çoğunu bulur, ancak hepsini bulamaz. API adresi var olmadığını söyler, ancak kullanıcı öyle ısrar, bu araçlar, sen gerektiğini önsel güven kullanıcı, o yanlış olabilir bile.

Bu, aynı zamanda, orijinal kullanıcının girişini API sonucu yan yana saklamanız gerektiği anlamına gelir. Bu, şema haline gelir:

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

Not: Gerekirse, en azından ülkeyi ayrı ayrı saklayabilirsiniz. Örneğin, adres alanından otomatik olarak çıkarılabilir ve kullanıcı tarafından değiştirilebilir.
Matthieu M.

'Bir API kullanın' sadece başka birinin ülkesinin resmi formatlarına sahip olduğu anlamına gelir. Kendin yapamazsın sebep yok
Ewan

@Ewan Zaman, para, dil ve diğer engeller dışında hiçbir sebep yok.
Andrew, 22: 05’de Monica

Elbette, ama sizin için bir şeyler yapması veya sizin için bir şeyler yapan diğer insanların fiyatlarını karşılaştırması konusunda cevaplar mı veriyoruz?
Ewan

@Ewan: soru adreslerin depolama formatı ile ilgili. API bu biçimi dikte etmez: cevabım amacı en kısa sürede düz bir metin alanını ve XML / JSON / çözümlenen veriler için ne alanında, mağaza hem edebilirsiniz sahip olarak göstermektir ve istatistiksel her yerde bir adres işlemek dünyada.
Arseni Mourzenko

37

Bir tane yok.

Her ülkenin farklı adres biçimleri vardır. Şanslıysanız ve bunların bir formatı var!

Açıkçası enlem / boylam, size dünya üzerinde bir nokta verecektir, ancak bireysel evleri tanımlamak için gerçekten yararlı değil. Örneğin bir kule bloğunu düşünün.

En iyi bahis, her ülkenin posta servisini resmi bir format için kontrol etmektir. Bu, arka uç veritabanınız için harika olabilir. Ancak muhtemelen çoğu insanın alıştığından daha fazla alan içereceği için son kullanıcılar için basitleştirmeniz gerekecektir.

Örneğin İngiltere, 'çifte bağımlı bölge' gibi şeyleri içeriyor, ancak siz onlara sorsanız bunun ne anlama geldiğini kimse bilemez.


3
Evrensel bir yol nedir ...........
Xwaro 23:17

40
@ Xwaro Az önce dediler, Bir tane yok.
Zymus

6
Sanırım Xwaro dünyadaki adresleri kabul ediyorum anlamına geliyor.
Ewan

3
Bu basılı adres formatları için resmi kaynak: Evrensel Posta Birliği
grahamj42

3
ilginç. Ancak, bu sayfanın alakalı sayfa olduğunu düşünüyorum: upu.int/tr/activities/addressing/s42-standard/… A: ne kadar az sayıda ülke olduğunu ve B: s42'den ülke adres biçimini eşleme olmadığını görebilirsiniz 1 - 1
Ewan

21

Tek evrensel biçim, birden çok metin satırına sahip olabilecek tek bir metin alanına sahip olmaktır. Bu, yeryüzünde olası adreslere izin verecektir.


2
Harika, şimdi herkes aynı adresi farklı, uyumsuz bir şekilde tanımlayabilir. Sanırım soru standartlar hakkında soru sormadı, bu yüzden teknik olarak doğru bir cevap.
Michael

@Michael: Adresler olan dünyada farklı ve uyumsuz. Orada olan hiçbir standart şablonu. Çok satırlı bir alana sahip olmak, kullanıcının gerçekten doğru adresi yazmasına izin verir.
JacquesB

@Michael Ayrı alanlar, beni bir alanı veya diğerini kısaltmaya / kısaltmaya zorlar; bu da tutarsız temsillere yol açar. (Yine de genellikle çalışır, posta hizmetleri bu konuda oldukça deneyimlidir).
Hulk


Sadece ilginç bir haberleşme, teknik olarak doğru değil . Ülkelerin bazı bölgelerinde, adreslerin bir kısmı resim olarak çizilir.
KayakinKoder

9

Birçok ülkede kullanılmak üzere yazılım çözümleri geliştiriyorum. Bu konuyu önce en büyük kuruluştan başlayarak ele alıyoruz, yani ülke daha sonra en az yaygın veya en küçük alanlara sahip. Şimdiye kadar denediğimiz tüm ülkeler için iyi çalışıyor. Ayrıca akıllı bir yinelenen önleme sistemine sahibiz ve kullanıcılar çok 'yaratıcı' olduklarından sisteme bir şekilde girenleri birleştiriyoruz. Yönetici bölümünde ülke ayarına göre bir adres alanı siparişimiz var. yani Japonya, İngiltere / ABD’nin en son nerede olduğu ilk Posta / Posta Koduna sahiptir.

Genel olarak şunları kullanıyoruz:

  • ülke
  • Mesaj / Posta kodu
  • Eyalet / İl / idari bölge / İlçe
  • İl / İlçe / Köy
  • Cadde / Yol / Blok
  • Bina Adı / Numarası
  • Özel / Özel Bilgiler

Girilip kaydedildikten sonra, zorunlu olmayan alanları bırakarak birleşik bir sürüm görüntülenebilir.

Dediğim gibi, bu bizim yazılımımız olan tüm ülkeler için işe yarıyor ve 1989'dan bu yana gelişen bir sonucudur.

Umarım bu bir şekilde yardımcı olur veya en azından başka bir içgörü sağlar.


db'nizde "Eyalet / İl / İl / İlçe" için bir sütunu nasıl isimlendirirsiniz?
Xwaro

6
@ Xwaro Önemli değil, geliştiricilerin kafanızın karıştıracağını düşündüğünüz herhangi bir kelimeyi yazın. Bunun nedeni, adın yazılımınızın içindedir ve kullanıcılar tarafından asla görülmez. Adres asla alanın adıyla gösterilmez. Yani, asla göremezsin No 10 Street Downing Street, City Westminster, State London, Country UK. Bunun yerine göreceksiniz10 Downing Street, Westminster, London, UK
slebetman

@slebetman Soru şuydu: db'nizdeki "Eyalet / İl / İl / İlçe" sütununu nasıl adlandırırsınız? "Db'mde" Eyalet / İl / İl / İlçe "
Dari

@ Önemli değil, geliştiricilerimin en az kafasını karıştıracağını düşündüğüm herhangi bir kelimeyi adlandırıyorum. Bunun nedeni adıma yazılımımın içinde yer alması ve kullanıcılar tarafından asla görülmemesidir. Bu yüzden takımımın neye alışkın olduğuna bağlı.
slebetman

@slebetman - buna ne ad veriyorsunuz?
Dari

0

Daha önce de belirtildiği gibi, en evrensel (ancak doğrulanması ve belki de en az kullanışlı olması pratik değildir) tek bir büyük unicode alanıdır.

Ülkeyi adresin geri kalanından ayırabilir ve ISO ülke kodu olarak saklayabilirsiniz. Ülkeyi normalleştirir ve adresin geri kalanının doğrulanmasında bazı yararlar sağlar.

Posta kodunu, posta kodunu adresin geri kalanından da ayırabilirsiniz. Bu ayrıca adresin geri kalanının onaylanmasında bazı faydalara sahip olacak ve coğrafi konumlandırmada yardımcı olabilir (kesin olmasa da). Örneğin: Kanada’da yalnızca posta kodunu ve sokak numarasını (aka ev numarası) belirten herhangi bir adresi benzersiz şekilde tanımlayabilirsiniz; bu tüm ülkelerde doğru olmayabilir.

Alanların eyaletlere / illere veya şehirlere tahsis edilmesi, her ülkenin bir adres oluşturma şeklindeki farklılıklar nedeniyle daha problemli olmaya başlar. Bu tür alanlara sahip adres tabloları kurdum, çünkü ilk izleyici Kuzey Amerika'ya odaklandı, uluslararası izleyicilerin uyması gereken bir sorun olacağını biliyordu. Çoğu durumda, içinde "ayakkabı boynuzu" olabilir, ancak garip ve potansiyel olarak başarısızlığa eğilimli bir uzlaşma - kesinlikle evrensel değil.


0

Mitchdav'ın cevabının aksine, Google’ın kütüphanesini kullanmama konusunda tavsiyelerde bulunabilirim. Birim test verilerini bulmayı ümit eden ortodoks olmayan adresleme şemalarına sahip çeşitli uluslararası yerler için depoyu aradım, ama endişe verici bir şekilde tüm depoda sıfır sonuç buldum.

Bence en iyisi, bir adresi serbest biçimli çok satırlı metin olarak ele almak. Tüm adresleri doğrulayamıyor olabilirsiniz, ancak bazı adres biçimleri gerçekten garip ve büyük olasılıkla beklenmiyor ve sonunda doğru adres doldurma sorumluluğu kullanıcıya aittir ve çoğu uygulamada kullanıcı, doldurmanın olumsuz sonuçlarına neden olur. geçersiz adres.

Belki bir uyarı vermek için doğrulayıcı kullanabilirsiniz , ama bundan başka bir şey değil. Ancak doğrulamayan adresleri reddetmeyin, aksi halde bazı müşterileri kaybedebilirsiniz. Bu, uyarıyı kullanıcıya tuhaf bir adres biçiminde bir alanda yaşıyorsa, uyarıyı göz ardı etmek güvenli ...


-1

Yeryüzünde herhangi bir adres söylediğin gibi , sadece en uzun süre ya da ...

https://what3words.com

3 kelimeden oluşan, bir algoritmadır (yani herhangi bir veritabanına gömülemeyecek bir veritabanı değildir), dünyanın herhangi bir yerindeki 3x3 metrelik bir yamayı tanımlayabilir.

Tonga ve diğer birkaç eyalet onu posta kodu sistemi olarak benimsemişlerdir, bunun yerine bir kaplama olarak değiştirmeyecek, oldukça serin ve çok iyi inşa edilmiş ve düşünülmüşlerdir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.