【发布时间】:2021-10-11 05:27:57
【问题描述】:
所以,我正在使用 Leaflet 和 PostGIS 存储数据构建一个简单的地图应用程序。我已成功查询我的图层并将结果传递给我的客户端应用程序,但我正在努力修改查询以向属性添加其他字段。我的查询基于此helpful post:
"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.geom)::json As geometry
, row_to_json((SELECT l FROM (SELECT id, photo, type) As l
)) As properties
.\"Peng\" As lg ) As f ) As fc;";
查询生成有效的 GeoJSON,具有 id、photo 和 type 的预期属性。
我遇到的问题是将我的列名添加到(SELECT id, photo, type, desc) 会产生 SQL 语法错误 42601。该错误发生在我尝试将附加表列添加到内部选择语句的任何位置。谷歌搜索表明这是混合动态 SQL 和常规 SQL 的问题。不幸的是,我的 SQL 技能并不完全适合解决这个问题。
那么,如何在 select 语句中添加额外的列,以便向 GeoJSON 添加更多属性值?我的目标是添加更多属性来填充仪表板和一些弹出内容。
编辑
所以,我的 JSON 对象的示例在这里:
{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[8.697130556,50.123908333,108.5]},"properties":{"id":3,"photo":"/Users/Nizz0k/Desktop/Peng/IMG_3475.jpeg","type":"Quote"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[8.691429401,50.115307684,105.7]},"properties":{"id":4,"photo":"/Users/Nizz0k/Desktop/Peng/IMG_3025.jpeg","type":"Quote"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[8.694072891,50.119541651,111.5]},"properties":{"id":5,"photo":"/Users/Nizz0k/Desktop/Peng/IMG_1274.jpeg","type":"Drawing and Tag"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[8.697102778,50.119533333,112.8]},"properties":{"id":7,"photo":"/Users/Nizz0k/Desktop/Peng/IMG_4975.jpeg","type":null}},{"type":"Feature","geometry":{"type":"Point","coordinates":[8.729794444,50.113963889,99.6]},"properties":{"id":9,"photo":"/Users/Nizz0k/Desktop/Peng/IMG_5149.jpeg","type":null}},
完整的结果粘贴到geojson.io 没有问题。我的目标是向 JSON 中的属性对象添加更多值。
创建表语句在这里:
CREATE TABLE IF NOT EXISTS public."Peng"
(
id integer NOT NULL DEFAULT nextval('"Peng_id_seq"'::regclass),
geom geometry(PointZ,4326),
photo character varying(254) COLLATE pg_catalog."default",
filename character varying(254) COLLATE pg_catalog."default",
directory character varying(254) COLLATE pg_catalog."default",
altitude numeric,
direction numeric,
longitude character varying(254) COLLATE pg_catalog."default",
latitude character varying(254) COLLATE pg_catalog."default",
"timestamp" character varying(24) COLLATE pg_catalog."default",
weight bigint,
type character varying(244) COLLATE pg_catalog."default",
"desc" character varying(244) COLLATE pg_catalog."default",
surface character varying(244) COLLATE pg_catalog."default",
CONSTRAINT "Peng_pkey" PRIMARY KEY (id)
)
最终,我想将“desc”和“surface”列添加到 JSON。稍后我需要添加更多数据,所以我很想了解这里的语法。
【问题讨论】:
-
能否添加示例数据和预期结果?最好与创建表语句一起使用。
-
所以,我已经通过 QGIS 将数据拉入 Postgres。我如何为您提供 create table 语句?有没有首选的小提琴软件?
-
如果您安装了 pgadmin,您可以从那里获取创建表语句。您始终可以创建一个最小的可重现示例来说明您的观点。 .. 或者至少添加一个指向您使用的 shapefile 的链接。但最重要的是:确切的预期结果集。否则你很难得到任何体面的答案。
-
谢谢,感谢您的指导。
-
嗯,我很高兴能够在 QGIS 中利用 PGIS,我需要更多地利用 PGIS,但我还没有准备好放弃带有一些平视显示器的程序繁琐的编辑任务的能力。这有点像一个宠物项目,所以我希望对堆栈的迭代和更改能够继续。再次感谢
标签: sql postgresql postgis geojson