GeoDjango:将地理数据保存在DMS(Degrees Minutes Seconds)中,而不是十进制度数

时间:2013-02-17 14:36:18

标签: django geospatial geodjango

TL; DR:如何让geodjango将数据保存为DMS格式


我正在构建一个简单的django(实际上是GeoDjango)应用程序,它加载一些包含DMS格式坐标的外部数据源。

目前,在加载该文件时,我将DMS转换为DD,以便将该数据存储为django模型中的POLYGON字段。

但是,对于输出(导出到文件),我需要将其转换回DMS 。这使得输出的坐标与输入的坐标略有不同。我认为这是由于浮动数字不准确...

1 个答案:

答案 0 :(得分:1)

只需保持度数,分钟,秒信息,并在带有属性装饰器的方法中对点操作进行单向转换为十进制度。

from django.db import models

class PolygonPoint(models.Model):
    parent_poly = models.ForeignKey(PolyModel)
    degrees = models.IntegerField()
    minutes = models.IntegerField()
    seconds = models.IntegerField()

    @property
    def point(self):
        """
        Do conversion to point here
        """
        ...
        p = Point(x, y, srid=a)
        return p

或者,只需将数据保存在JSON blob中。

class SomeModel(models.Model):
    ...
    dms_points_json = models.TextArea(help_text=u"JSON list of dms polygon points")
    poly = models.PolygonField()

    def populate_poly(self):
        """
        Perform steps to update/populate the PolygonField using 
        dms_points_json blob
        """
        ...