2014-02-24 5 views
1

В настоящее время у меня есть база данных postgres, в которой хранятся данные о фотографии, а также местоположение как JSON (с использованием Django). Место получается через GooglePlacesAPI- https://developers.google.com/places/documentation/search (поиск Поиск ответов на примерах ответов)Преобразование существующего поля JSON в PostgresSQL для использования в PostGIS

Так в настоящее время, каждая фотография имеет location столбец, который содержит информацию о формате JSON для места, полученного из GooglePlacesAPI

Сейчас я хотел бы использовать пространственные возможности Postgres для запроса на основе местоположения, однако я не уверен, как это сделать и какие изменения схемы необходимы. Документация Postgres, по-видимому, указывает на то, что будет указана новая таблица с именем местоположения, lat, lng и другой информацией. Значит ли это, что каждое место будет сохранено в другой таблице и будет иметь к нему внешний ключ? И поэтому JSON необходимо будет сгладить, чтобы быть сохраненным в таблице?

Если это так, рекомендуется использовать формат таблицы, который был бы хорош для хранения местоположения, чтобы я мог получить любые другие данные о местоположении (скажем, из Foursquare, FB и т. Д.) И преобразовать их в формат таблицы до хранение.

ответ

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, в зависимости от ваших потребностей.

Смежные вопросы