Преобразование таблицы PostGIS (postgresql) в GeoJSON - PullRequest
0 голосов
/ 16 мая 2019

Я посетил вопрос, показанный в Как конвертировать из PostgreSQL в формат GeoJSON?

Этот PostGIS SQL преобразует всю таблицу в результат GeoJSON:

SELECT row_to_json(fc) AS geojson FROM 
(SELECT 'FeatureCollection' As type, array_to_json(array_agg(f))
As features FROM 
(SELECT 
'Feature' As type, 
ST_AsGeoJSON((lg.geometry),15,0)::json As geometry,
row_to_json((id, name)) As properties
FROM imposm3_restaurants As lg) As f ) As fc;

Я обнаружил, что в результатах мы не получаем названия полей.

Я ожидаю, что выход "properties": {"id": 6323, "name": "Ресторан Синая"

но фактический результат "properties": {"f1": 6323, "f2": "Ресторан Синая"

Я прочитал спецификацию инструкции row_to_json, поэтому решил изменить последнюю инструкцию row_to_json

SELECT row_to_json(fc) AS geojson FROM 
(SELECT 'FeatureCollection' As type, array_to_json(array_agg(f))
As features FROM 
(SELECT 
'Feature' As type, 
ST_AsGeoJSON((lg.geometry),15,0)::json As geometry,
row_to_json((lg)) As properties
FROM imposm3_restaurants As lg) As f ) As fc;

Но теперь геоджон извлекает также геометрическое поле как свойство.

Я имею в виду, что в результатах я могу видеть геометрию, отформатированную в формате геойсона и снова в формате PostGIS (эта вторая геометрия не нужна, я мог бы тратить ее впустую), поэтому, если первый результат равен 1200 КБ, второй будет около 2300Kb.

Что я могу сделать? любые альтернативы

row_to_json((id, name)) As properties

или

row_to_json((lg)) As properties

Я тоже пробовал такие вещи, как

row_to_json(('id',lg.id ,'masa',lg.masa ,'parcela',lg.parcela)) As properties

и любые другие, но без результатов (только ошибки SQL)

Большое спасибо

1 Ответ

2 голосов
/ 16 мая 2019

Что вам нужно сделать, это сначала выбрать столбцы, а затем row_to_json. С вашими значениями это даст следующий пример:

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(geom)::json as geometry
            , (
                SELECT
                    row_to_json(t)
                FROM (
                    SELECT
                        id
                        , name
                    ) AS t
                ) AS properties
        FROM imposm3_restaurants
    ) AS f
) AS fc
...