如何将纬度/经度数据导入 PostgreSQL

发布于 2024-09-13 06:05:30 字数 405 浏览 6 评论 0原文

PostgreSQL / Django / 新手在这里。

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

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

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

那么如何生成正确的 SRID?

或者,考虑到 Django 的轻松性,我不禁觉得我在这里犯下了纲领性的异端邪说。有人能指出我更明智的方向吗?

谢谢,

乔恩

PostgreSQL / Django / newbie here.

I've got a bunch of JSON data with venues and lat/long information, and I'm looking to import it into my database. So far I've fenagled a script to format my JSON into SQL statements, so I can import them with a slew of INSERT statements.

But my 'location' field (a PointField) is giving me grief when I try to use ST_PointFromText('POINT(lon lat)') syntax. Specifically:

ERROR: new row for relation "finder_venue" violates check constraint "enforce_srid_location"

So how do I generate a proper SRID?

Or, given Django's ease, I can't help but feel like I'm committing programmatic heresy here. Can someone point me in a more intelligent direction?

Thanks,

Jon

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

私藏温柔 2024-09-20 06:06:11

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

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

(4326 是这里的 SRID。)

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

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

如果你实际上使用 4326,你可以省略它,因为那就是默认值。
然后,您将设置模型实例的位置,如下所示:

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

If you want to set the SRID in PostGIS, you can do this:

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

(4326 is the SRID here.)

For GeoDjango, your model will be defined like this:

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

If you're actually using 4326, you can leave it out, as that's the default.
Then, you'll set the location of your model instances so:

from django.contrib.gis.geos import Point
some_thing.location = Point(-122, 37)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文