我目前有一个postgres数据库,我在其中存储有关照片的数据,以及作为JSON的位置(使用Django)。该位置是通过GooglePlacesAPI-获得的 https://developers.google.com/places/documentation/search(搜索响应中的搜索响应)
目前,每张照片都有location
列,其中包含从GooglePlacesAPI获取的地点的JSON信息
现在我想使用Postgres的空间功能来根据位置进行查询,但是我不知道该怎么做以及需要什么模式更改。 Postgres文档似乎表明,该位置的名称,lat,lng和其他信息需要一个新表。那么这是否意味着每个位置都将保存在不同的表中,并且将引用一个外键? 那么JSON需要基本扁平化才能存储在表中?
如果是这样,是否有推荐的表格格式可以很好地存储位置,以便我可以获取任何其他位置数据(例如来自Foursquare,FB等)并在存储之前将其转换为表格式
答案 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
数据类型,具体取决于您的需求。