Я ищу, чтобы получить геометрические объекты из моей базы данных PostGIS. Я написал запрос, который могу использовать, чтобы вернуть отформатированный вывод Geo JSON, который мне нужен для отображения. Однако у меня возникают проблемы с их извлечением с использованием подзапроса в GORM.
Моя цель в том, чтобы задать этот вопрос, - выяснить, как именно я правильно структурирую свой подзапрос GORM, чтобы я мог получить нужные мне данные .
Фактический запрос PostgreSQL:
SELECT
jsonb_build_object(
'type',
'FeatureCollection',
'features',
jsonb_agg(features.feature)
)
FROM
(
SELECT
jsonb_build_object(
'type',
'Feature',
'geometry',
ST_AsGeoJSON(geom):: jsonb,
'properties',
to_jsonb(inputs) - 'id' - 'geom'
) AS feature
FROM
(
SELECT
*
FROM
gis_data
LIMIT
1000
) inputs
) features
То, как я пытаюсь использовать его в своей программе, заключается в следующем, однако, похоже, что Работа. Мне пришлось добавить две скобки в мой последний запрос, потому что мой запрос выбрасывал две дополнительные закрывающие скобки. Вот мой код:
var gisData []*model.GISData
sub1 := db.Raw("SELECT * FROM gis_data LIMIT 1000) inputs) features").SubQuery()
sub2 := db.Raw("SELECT jsonb_build_object('type', 'Feature', 'geometry', ST_AsGeoJSON(geom):: jsonb, 'properties', to_jsonb(inputs) - 'id' - 'geom') AS feature FROM ?", sub1).SubQuery()
if err := db.Raw("((SELECT jsonb_build_object('type', 'FeatureCollection', 'features', jsonb_agg(features.feature)) FROM ?", sub2).Scan(&gisData).Error; err != nil {
return err
}
А вот мой журнал на моей консоли:
[2020-04-25 00:19:28] [60.73ms]
((SELECT jsonb_build_object('type', 'FeatureCollection', 'features', jsonb_agg(features.feature)) FROM ( SELECT jsonb_build_object('type', 'Feature', 'geometry', ST_AsGeoJSON(geom):: jsonb, 'properties', to_jsonb(inputs) - 'id' - 'geom') AS feature FROM ( SELECT * FROM gis_data LIMIT 1000) inputs) features))
[1 rows affected or returned ]
Структурная модель выглядит так:
type UsersByID struct {
ID uint64 `gorm:"primary_key" json:"id"`
Name string `json:"name"`
Lat string `json:"lat"`
Lon string `json:"lon"`
Country string `json:"country"`
City string `json:"city"`
Zip string `json:"zip"`
Geom string `json:"geom"`
}
Когда я поднимаю результат не в формате Geo JSON, а в формате JSON для полей моих свойств. Все поля свойств не возвращают данных. Куда я иду не так?