转换PostgreSQL中的现有JSON字段以在PostGIS中使用

时间:2014-02-24 20:51:22

标签: django postgresql postgis geodjango

我目前有一个postgres数据库,我在其中存储有关照片的数据,以及作为JSON的位置(使用Django)。该位置是通过GooglePlacesAPI-获得的 https://developers.google.com/places/documentation/search(搜索响应中的搜索响应)

目前,每张照片都有location列,其中包含从GooglePlacesAPI获取的地点的JSON信息

现在我想使用Postgres的空间功能来根据位置进行查询,但是我不知道该怎么做以及需要什么模式更改。 Postgres文档似乎表明,该位置的名称,lat,lng和其他信息需要一个新表。那么这是否意味着每个位置都将保存在不同的表中,并且将引用一个外键? 那么JSON需要基本扁平化才能存储在表中?

如果是这样,是否有推荐的表格格式可以很好地存储位置,以便我可以获取任何其他位置数据(例如来自Foursquare,FB等)并在存储之前将其转换为表格式

1 个答案:

答案 0 :(得分:0)

几何不是特别的:它只是另一种数据类型。因此,将几何列添加到现有表中。假设您已安装并启用了PostGIS 2.x:

ALTER TABLE mytable ADD COLUMN geom geometry(Point,4326);

然后通过从location JSON列中提取数据来填充几何数据(这实际上取决于数据在此无定形列中的结构):

UPDATE mytable SET
  geom = ST_SetSRID(ST_MakePoint((location->>'lng')::numeric,
                                 (location->>'lat')::numeric), 4326)

这应该是一个开始。后面的步骤是建立GiST索引并与其他表或兴趣点进行空间查询。您可能还需要考虑geography数据类型,而不是geometry数据类型,具体取决于您的需求。