query pointfield installing gdal_library_path examples python django geodjango

python - pointfield - ¿Qué campo modelo usar en Django para almacenar valores de longitud y latitud?



install geodjango (3)

Quiero almacenar la ubicación de mis usuarios usando longitud y latitud, en este momento proviene de Google Maps, pero usaré GeoDango y algún punto para calcular las distancias entre puntos también.

Sin embargo, mi primera confusión es qué campo en Django debería usar para almacenar los valores de longitud y latitud. La información que obtengo es contradictoria.

La documentación oficial utiliza un FloatField https://docs.djangoproject.com/en/dev/ref/contrib/gis/tutorial/#geographic-models

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

Donde casi todas las respuestas en stackoverflow muestran un DecimalField

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

Entonces, ¿qué debo usar?


El flotador es generalmente una aproximación, vea here algunos ejemplos simples. Podría obtener resultados muy agradables modificando su modelo a algo como DecimalField(max_digits=9, decimal_places=6) , ya que los decimales son muy importantes en las coordenadas, pero usar más de 6 no tiene sentido.


La sugerencia aquí de usar DecimalField(max_digits=9, decimal_places=6) provocó errores al intentar guardar ubicaciones de Google Maps.

Si suponemos que el caso de uso más común es recuperar ubicaciones de puntos de la API de Maps y una URL típica de Google Maps al hacer clic derecho y seleccionar "¿Qué hay aquí?" produce algo como:

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

(lugar al azar)

Entonces la longitud tiene 15 lugares antes y después del decimal, por lo que la respuesta aceptada no funciona. Como no hay ninguna razón para validar "lo más corto posible" y el almacenamiento de db es barato, estoy usando:

max_digits=22, decimal_places=16)