【问题标题】:How to import Lat/Long data into PostgreSQL如何将纬度/经度数据导入 PostgreSQL
【发布时间】:2011-03-25 23:54:24
【问题描述】:

PostgreSQL / Django / 新手在这里。

我有一堆包含场地和纬度/经度信息的 JSON 数据,我希望将其导入我的数据库。到目前为止,我已经编写了一个脚本来将我的 JSON 格式化为 SQL 语句,因此我可以使用大量的 INSERT 语句来导入它们。

但是当我尝试使用 ST_PointFromText('POINT(lon lat)') 语法时,我的“位置”字段(一个 PointField)让我很伤心。具体来说:

错误:关系“finder_venue”的新行违反了检查约束“enforce_srid_location”

那么如何生成正确的 SRID?

或者,鉴于 Django 的轻松,我不禁觉得我在这里犯了编程异端。有人能指出我更聪明的方向吗?

谢谢,

乔恩

【问题讨论】:

    标签: django postgresql postgis geodjango


    【解决方案1】:

    如果你想在 PostGIS 中设置 SRID,你可以这样做:

    ST_SetSRID(ST_PointFromText('POINT(-122 37)'), 4326)
    

    (这里的 SRID 是 4326。)

    对于 GeoDjango,您的模型将这样定义:

    from django.contrib.gis.db import models
    class Thing(models.Model):
        # ...
        location = models.PointField(srid=4326)  
        objects = models.GeoManager()
    

    如果您实际使用的是 4326,则可以将其省略,因为这是默认设置。 然后,您将设置模型实例的location

    from django.contrib.gis.geos import Point
    some_thing.location = Point(-122, 37)
    

    【讨论】:

    • 也许这是我的问题的一部分——我什至不知道 SRID 映射到什么,所以我不确定我需要使用哪一个。你能详细说明一下吗?
    • 甜,你的语法就像一个魅力。 4326似乎是票。对于像我一样迷路的其他人,这个帖子对什么是 SRID 有很好的见解:stackoverflow.com/questions/373589/… 谢谢!
    猜你喜欢
    • 2023-03-31
    • 2013-09-29
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多