8

地理点需要正确的数据类型。

我将使用谷歌地图 API 获取并显示它,格式如下

  • 42.761819,11.104863
  • 41.508577,-101.953125

用例:

  • 用户点击地图
  • django 用附加数据保存这一点
  • 在下次访问 django 时在地图上显示此点

因此,点之间没有距离等黑客攻击。

数据库:postgres 8

姜戈:1.4

4

5 回答 5

9

查看 GeoDjango,看看它是否对您有帮助。如果您的堆栈配置为运行 GeoDjango,您可以执行此操作。

你的模型看起来像这样

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()

要将点保存到数据库中,您所要做的就是

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 为您提供了在不久的将来可能会感兴趣的地理空间查询的扩展能力,例如查找点之间的距离、查找点周围最近的位置等。

这是GeoDjango的链接

于 2015-12-31T18:05:36.873 回答
3

看起来您将要存储纬度和经度。我会为此使用DecimalField,并分别存储每个数字。

于 2012-07-10T20:26:04.993 回答
3

来自有关 DecimalField 的 django 文档

DecimalField.max_digits

数字中允许的最大位数。请注意,此数字必须大于或等于 decimal_places。

DecimalField.decimal_places

与数字一起存储的小数位数。

这是指Python Decimal

要正确选择准确的数据类型和精度,您应该考虑:

  1. 什么是最小可能值(纬度可以从 0(下)到(-)90 度)_ _。
  2. 什么是最大可能值(经度范围可以从 0(向下)到(-)180 度)_ _ _。
  3. 你希望什么是准确度(decimal_places)。请注意,它会影响 Google 地图上的缩放级别。

顺便说一下,为了更好地理解,最好知道计算是如何完成的(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
于 2013-11-11T03:50:59.537 回答
1

我在 django 设置中使用经度和纬度。

我的模型包括:

long_position   = models.DecimalField (max_digits=8, decimal_places=3)
lat_position   = models.DecimalField (max_digits=8, decimal_places=3)

为了更精确,您可能希望 decimal_places 更多。

当您想在 Google Map API 方法中显示它时,您将引用您的模型并编写一个 python 代码来输出,如下所示:

output = some_long_position + "," + some_lati_position
于 2012-07-10T22:21:39.357 回答
0

我在模型中使用它

latitude = models.DecimalField(max_digits=11, decimal_places=7,null=True,blank=True)
longitude = models.DecimalField(max_digits=11, decimal_places=7,null=True,blank=True)
于 2020-05-01T02:03:13.767 回答