Подтвердить что ты не робот

Какое поле модели использовать в Django для хранения значений долготы и широты?

Я хочу сохранить местоположение моих пользователей с использованием долготы и широты, на данный момент это происходит из Карт Google, но я буду использовать GeoDango, а также указать расстояние между точками.

Однако, первая моя путаница - какое поле в Django я должен использовать для хранения значений долготы и широты? Информация, которую я получаю, противоречива.

В официальной документации используется FloatField https://docs.djangoproject.com/en/dev/ref/contrib/gis/tutorial/#geographic-models

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

Где почти каждый ответ на stackoverflow показывает a DecimalField

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

Итак, что я должен использовать?

4b9b3361

Ответ 1

Поплавок, как правило, приближен, см. здесь для некоторых простых примеров. Вы можете получить очень хорошие результаты, изменив вашу модель на что-то вроде DecimalField(max_digits=9, decimal_places=6), так как десятичные знаки очень важны в координатах, но использование более 6 в принципе бессмысленно.

Ответ 3

Предлагаемое здесь использование DecimalField(max_digits=9, decimal_places=6) привело к ошибкам при попытке сохранить местоположения из Карт Google.

Если предположить, что наиболее распространенный вариант использования - это получение местоположений точек из API Карт и типичный URL-адрес из Карт Google при щелчке правой кнопкой мыши и выборе "Что здесь?" дает что-то вроде:

https://www.google.com/maps/place/37°48'52.3"N+122°17'09.1"W/@37.814532,-122.2880467,17z

(случайное место)

Таким образом, долгота имеет 15 знаков до и после десятичной дроби, поэтому принятый ответ не работает. Поскольку нет причин проверять "как можно короче", а хранилище БД дешево, я использую:

    max_digits=22,
    decimal_places=16)