You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Node API从PostGIS输出标准GeoJSON数据?

解决方法

你的问题出在直接返回了pool.query的完整结果对象,PostgreSQL客户端会把查询结果包装在rows数组里,而你需要的标准GeoJSON数据就藏在这个数组的第一个元素中。

修改后的完整API代码

router.get('/api/data', async(req, res) => {
    try {
        const queryResult = await pool.query(
            "SELECT json_build_object('type', 'FeatureCollection', 'features', json_agg(ST_AsGeoJSON(t.*)::json)) AS geojson FROM my_table AS t"
        );
        // 提取聚合生成的GeoJSON对象
        const standardGeoJSON = queryResult.rows[0].geojson;
        res.json(standardGeoJSON);
    } catch (err) {
        // 补充错误处理逻辑,生产环境必备
        console.error(err);
        res.status(500).json({ error: '服务器内部错误' });
    }
});

核心修改说明

  • 给SQL查询的字段添加别名AS geojson,避免直接使用json_build_object这个冗长的默认字段名,提升代码可读性
  • 从查询结果的rows数组中取出第一个元素(因为你的聚合查询只会返回一行结果),提取对应的geojson属性值,这就是Leaflet可直接使用的标准GeoJSON结构
  • 补充了缺失的catch错误捕获块,处理查询过程中可能出现的数据库连接、SQL语法等问题

内容的提问来源于stack exchange,提问作者MidPiedmont

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:38:10