Saltar al contenido

Django: ¿Cómo almaceno un punto geográfico en la base de datos?

este problema se puede abordar de diferentes maneras, por lo tanto te enseñamos la respuesta más completa para nosotros.

Solución:

Consulte GeoDjango y vea si le ayuda. Si su pila está configurada para ejecutar GeoDjango, puede hacerlo.

Tus modelos se verán así

from django.contrib.gis.db import models
class LocationPoint(models.Model):
    point = models.PointField(srid=4326,dim=3)
    accuracy = models.FloatField(default=0.0)
    objects = models.GeoManager()

Para guardar el punto en la base de datos todo lo que tendrá que hacer es

from django.contrib.gis.geos import Point
point = Point(x=12.734534, y=77.2342, z=0, srid=4326)

location = LocationPoint()
location.point = point
location.save()

GeoDjango le brinda capacidades extendidas para realizar consultas geoespaciales que podrían interesarle en un futuro cercano, como encontrar la distancia entre puntos, encontrar las ubicaciones más cercanas alrededor de un punto, etc.

Aquí está el enlace a GeoDjango

Parece que vas a almacenar una latitud y una longitud. Iría con un DecimalField para esto, y almacenaría cada número por separado.

De la documentación de Django sobre DecimalField:

CampoDecimal.max_digits

El número máximo de dígitos permitidos en el número. Tenga en cuenta que este número debe ser mayor o igual que decimal_places.

CampoDecimal.decimal_places

El número de lugares decimales para almacenar con el número.

que se refiere al Python Decimal

Para hacer una buena elección sobre el tipo de datos precisos y la precisión, debe considerar:

  1. cuál es el valor mínimo posible (la latitud puede ser desde 0 (hacia abajo) hasta (-) 90 grados) _ _.
  2. cuál es el valor máximo posible (la longitud puede variar desde 0 (hacia abajo) hasta (-) 180 grados) _ _ _.
  3. qué es precisión (decimal_places), lo desea. Tenga en cuenta que tiene un impacto en el nivel de zoom en Google Maps.

Por cierto, para una mejor comprensión, es bueno saber cómo se hace el cálculo (código Python):

def deg_to_dms(deg):
    d = int(deg)
    md = abs(deg - d) * 60
    m = int(md)
    sd = (md - m) * 60
    return [d, m, sd]

def decimal(deg,min,sec): 
    if deg < 0:
       dec= -1.0 * deg + 1.0 * min/60.0 + 1.0 * sec/3600.0
       return -1.0 * dec
    else:
        dec=1.0 * deg + 1.0 * min/60.0 + 1.0 * sec/3600.0;

    return dec

Te mostramos comentarios y valoraciones

Puedes amparar nuestra misión poniendo un comentario o dejando una valoración te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *