2015-06-08 21 views
29

Kullanıcılarımı, Google Haritalar’dan geldiği anda enlem ve boylamı kullanarak saklamak istiyorum, ancak GeoDango’yu kullanacağım ve noktaları arasındaki mesafeyi hesaplamak için kullanacağım bir nokta.Boylam ve enlem değerlerini depolamak için Django'da kullanılacak Model Alanı?

Ancak ilk kafa karışıklığım Django'daki hangi alanın enlem ve boylam değerlerini depolamak için kullanacağım? Aldığım bilgiler çelişkili.

resmi belgeler kullanan bir neredeyse stackoverflow her cevap bir DecimalField

long = models.DecimalField(max_digits=8, decimal_places=3) 
lat = models.DecimalField(max_digits=8, decimal_places=3) 

Peki ben ne kullanıyor olmalıdır gösterir FloatField https://docs.djangoproject.com/en/dev/ref/contrib/gis/tutorial/#geographic-models

lon = models.FloatField() 
lat = models.FloatField() 

?

+0

Bir FloatField kullanmak lat uzun saklamak için. – Brandon

+3

Uzamsal arka planınız varsa, bu konumları bir PointField içinde saklayabilirsiniz, bu da mekansal sorgulamayı çok daha kolay hale getirir. https://docs.djangoproject.com/en/1.8/ref/contrib/gis/model-api/#pointfield – yellowcap

cevap

46

Float genellikle bir yaklaşımdır, bazı basit örnekler için bkz. here. Modelinizi DecimalField(max_digits=9, decimal_places=6) gibi bir şeye değiştirerek çok güzel sonuçlar elde edebilirsiniz, çünkü ondalık değerler koordinatlarda çok önemlidir, ancak 6'dan fazla kullanmak temelde anlamsızdır.

+0

Bu. Ve ihtiyacınız olan hassasiyeti elde etmek için yeterli ondalık basamak kullanın. Çok sayıda büyüklük sırasını desteklemeniz gerektiğinde, kayan nokta sayıları iyidir. Birden fazla değeri bir araya getirirken bazen şaşırtıcı yuvarlama vb. Davranışlarla bunun için ödeme yaparsınız. –

+6

[Koordinatlar için maksimum uzunluğa bakın.] (Http://stackoverflow.com/questions/15965166/what-is-the-maximum-length-of-latitude-and-longitude) DecimalField (max_digits = 9) , decimal_places = 6) çünkü "Her .000001 koordinat ondalık derecesi farkı yaklaşık 10 cm uzunluğundadır." ve bundan daha fazla hassasiyet kullanacağınızdan şüpheliyim;) – grokpot

+0

@grokpot ilginç, teşekkürler! – mccc

İlgili konular