Я хотел бы получить функцию геоджон со свойствами PostGIS. Я нашел пример, чтобы иметь коллекцию функций, но я не могу заставить ее работать только для функции.
SELECT row_to_json(fc)
FROM ( SELECT 'FeatureCollection' As type, array_to_json(array_agg(f)) As features
FROM (SELECT 'Feature' As type
, ST_AsGeoJSON(lg.geog)::json As geometry
, row_to_json(lp) As properties
FROM locations As lg
INNER JOIN (SELECT loc_id, loc_name FROM locations) As lp
ON lg.loc_id = lp.loc_id ) As f ) As fc;
до сих пор я пытался изменить запрос коллекции объектов в примере. но вывод не действителен.
postgis
postgresql
geojson
sql
Ниже радара
источник
источник
Ответы:
Это можно сделать немного проще с помощью
json_build_object
PostgreSQL 9.4+, который позволяет создавать JSON, предоставляя переменные аргументы ключ / значение. Например:Ситуация становится еще лучше в PostgreSQL 9.5+, где добавлены некоторые новые операторы для
jsonb
типа данных ( docs ). Это облегчает настройку объекта «свойств», который содержит все, кроме идентификатора и геометрии .Хотите сделать FeatureCollection? Просто оберните все это
jsonb_agg
:источник
regexp_replace(current_setting('server_version'),'(\d)\.(\d)\.(\d)','\1.\3.\2')
...json_build_object
двоеточия вместо запятых.ST_AsGeoJSON
следует ли модифицировать функцию PostGIS для самостоятельной коррекции ориентации.Этот ответ можно использовать с версией PostgreSQL, предшествующей 9.4. Используйте ответ dbaston для PostgreSQL 9.4+
Запрос следующий: (где
'GEOM'
находится поле геометрии,id
поле для включения в свойства json,shapefile_feature
имя таблицы и489445
идентификатор требуемой функции)выход:
источник
dict
не JSON. Это очень разные вещи. JSON - это строка Всегда. Это текстовый формат, точно так же, как XML это просто текстовый формат. Аdict
- это объект в памяти.Просто небольшая поправка к ответу dbaston (я бы прокомментировал, но у меня нет баллов). Вам нужно преобразовать вывод ST_AsGeoJSON в json (
::json
штука):В противном случае элемент геометрии будет строкой. Это не верно GeoJSON
источник
@ dbaston в ответ был изменен в последнее время по @John Пауэлл ака Барсой, и он производит недопустимые geojsons на моем конце. После изменения агрегация объектов возвращает каждый объект, вложенный в объект json, что недопустимо.
У меня нет репутации, чтобы комментировать непосредственно ответ, но окончательный jsonb_agg должен быть в столбце «функция», а не в подзапросе «функции». Агрегирование по имени столбца (или «features.feature», если вы находите его более точным) помещает каждый элемент прямо в массив «features» после агрегации, и это правильный путь.
Так что следующее, что очень похоже на ответ @ dbaston, как это было до нескольких недель назад (плюс исправление @Jonh Powell для именования подзапросов), работает:
источник