MySQL'de lng / lat depolamak için veri türleri


14

Bir MySQL veritabanında lnt / lat noktalarının büyük bir listesini saklıyorum. Şu anda bunlar M için İngiltere için öngörülen puanlardır, ancak uzun vadede tüm dünya için puan koordinatlarını saklayabildiğimden emin olmak istiyorum. Hangi veri tipini kullanmalıyım?

Kullanmaya başladım decimal(18,12), ancak bu hassasiyetin gerekli olup olmadığından veya yalnızca a float. Kodumu dahil ettim, düşünmem gereken başka bir şey varsa:

CREATE TABLE UKTest
(
lat FLOAT,
lng FLOAT
)

Ben bir sorgu çalıştırırken veri türü önemli olup olmadığından emin değilim ben SQL için oldukça yeniyim. Genel belleğin değişken tipine göre değişeceğini varsaydım. Bu tür işler için temel bir MySQL veritabanı üzerinde uzamsal bir veritabanı kullanmanın bir yararı var mı?

Yanıtlar:


16

Bu soru StackOverlow'da da soruldu .

En üstteki yanıt MySQL Uzamsal Uzantıları önerir . Burada bu uzantılarla çalışma konusunda bir sürü bağlantı var .

Uzamsal türleri kullanmak istemiyorsanız ve bir GPS biriminden veya coğrafi kodlama hizmetinden değerler alıyorsanız, ondalık duyarlığınızı veri kaynağına eşleştirebilirsiniz. Genel bir kural, verileri bir uygulamada görüntüleyeceğinizden iki kat daha büyük bir doğrulukta depolamaktır.

Bir de Google dan kod örneği bir harita üzerinde puan görüntüleyerek, bunlar devlet:

MySQL tablosunu oluştururken, lat ve lng özniteliklerine özellikle dikkat etmek istersiniz. Google Haritalar'ın mevcut yakınlaştırma özellikleriyle, ondalık basamaktan sonra yalnızca 6 basamak hassasiyete ihtiyacınız vardır.

Tablonuz için gereken depolama alanını minimumda tutmak için lat ve lng özelliklerinin boyutta kayan (10,6) olduğunu belirtebilirsiniz. Bu, alanların ondalık basamaktan sonra 6 basamak ve ondalık basamaktan önce 4 basamağa kadar depolamasını sağlar, örn. -123.456789 derece

Sayısal türler arasındaki performans farkları konusunda endişe etmem. İyi endeksler çok daha büyük bir etkiye sahip olacaktır.


İyi bir cevap için +1! Bunu söylerdim ve yapardım.
OptimizePrime

Cevabınız için teşekkürler - MySQL Uzamsal Uzantılar belgelerini okudum, ancak bunları nasıl kullanmaya başlıyorsunuz? Ben sadece GoDaddy varsayılan bir MySQL DB var; Nereden başlamam gerektiğini bilmiyorum.
djq


1
Ve cevap daha fazla bağlantı bir bağlantı ile güncellendi
geographika

Neden 4 tam sayı basamağı?
Alix Axel

6

Başka bir nedenden ötürü MySQL'e bağlı olmadığınız sürece, bu ayrıntıları sizin için işlemek için bir Point (ve Line, Polygon vb.) Nesnesi olan postgis gibi uzamsal olarak etkinleştirilmiş bir veritabanı kullanmayı düşünmelisiniz. Ayrıca tüm dünyada bu değişikliği yaptığınızda projeksiyon desteği de alırsınız.

2019 : Benim gibi yorumları da okumamış kişiler için - MySQL, kanıt olmadan daha yavaş olan uzamsal veri türlerini destekliyor.


Not: Yeni olan ve yukarıdakileri okuyanlar için MySql 5.7+ artık Mekansal Dizinlerle çalışmaktadır.
HopeKing

ama yine de yavaş
Ian Turton

Ne kadar yavaş olduğunu gösteren kaynaklara yardımcı olabilir misiniz? Bir milyondan az kaydı olan bir projede kullanmayı düşünüyorum. Teşekkürler.
HopeKing

kişisel deneyim herkese açık veri yok. Geçersiz geometriler vb. Kırma ile ilgili çok fazla sorun var
Ian Turton

Teşekkürler. Benim ihtiyacım sadece veritabanı kayıtları (ve Polygon gibi karmaşık gereksinimleri) dayalı noktalar arasındaki mesafe -bunun için mysql kullanmak muhtemelen güvenli olacaktır.
HopeKing
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.