postgresql - 从点数组创建 postgres postgis 多边形

标签 postgresql postgis knex.js bookshelf.js

我有位置数组,我想将它们作为多边形列插入到 postgres 表中。

我有一个 area 列,类型为 geometry(Polygon,4326)

    const area = [
            { lat: 6.517784, lng: 3.368254 },
            { lat: 6.522207, lng: 3.376356 },
            { lat: 6.525885, lng: 3.376322 },
            { lat: 6.526396, lng: 3.379497 },
            { lat: 6.524009, lng 3.383188 },
            { lat: 6.523668, lng: 3.398294 },
            { lat: 6.517431, lng: 3.402618 },
            { lat: 6.514458, lng: 3.404732 },
            { lat: 6.510535, lng: 3.398294 },
            { lat: 6.501794, lng: 3.397425 },
            { lat: 6.496016, lng: 3.395054 },
            { lat: 6.488874, lng: 3.392029 },
            { lat: 6.491006, lng: 3.389969 },
            { lat: 6.492456, lng: 3.385677 },
            { lat: 6.494162, lng: 3.384990 },
            { lat: 6.492968, lng: 3.378467 },
            { lat: 6.498554, lng: 3.376289 }
]

我正在将上述数据转换成字符串

   const transform = area.map(position => return `${position.lat} ${position.lng}`}).join(', ')

然后使用 bookshelf 和 knex-posgis 进行插入查询

const body = Object.assign({}, attrs, {
         area: st.geomFromText(`POLYGON((${transform}))`, 4326)
    });

    return Model.forge(body)
        .save()
        .then((result) => {
            return done(null, result)
        })
        .catch((error) => {
            return done(error, null)
        })

我收到一条错误消息,提示 geometry contains non-closed rings 不确定是什么导致了错误。任何帮助将不胜感激。

最佳答案

多边形的结束点应与起点相同。这就是为什么说非封闭

检查示例 ST_MakePolygon

只需将第一个点添加到末尾即可。

const area = [
        { lat: 6.517784, lng: 3.368254 },
        { lat: 6.522207, lng: 3.376356 },
        { lat: 6.525885, lng: 3.376322 },
        { lat: 6.526396, lng: 3.379497 },
        { lat: 6.524009, lng 3.383188 },
        { lat: 6.523668, lng: 3.398294 },
        { lat: 6.517431, lng: 3.402618 },
        { lat: 6.514458, lng: 3.404732 },
        { lat: 6.510535, lng: 3.398294 },
        { lat: 6.501794, lng: 3.397425 },
        { lat: 6.496016, lng: 3.395054 },
        { lat: 6.488874, lng: 3.392029 },
        { lat: 6.491006, lng: 3.389969 },
        { lat: 6.492456, lng: 3.385677 },
        { lat: 6.494162, lng: 3.384990 },
        { lat: 6.492968, lng: 3.378467 },
        { lat: 6.498554, lng: 3.376289 },
        { lat: 6.517784, lng: 3.368254 }
]

关于postgresql - 从点数组创建 postgres postgis 多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44637408/

相关文章:

尝试访问 API 调用时出现 Javascript 404 错误

postgresql - Redshift 并发交易

performance - 清理和分析 : Drastic change in query cost

postgresql - 是否可以在写保护的文件系统上运行 Postgres?还是共享文件系统?

postgresql - 多边形联合(地理类型为 ST_UNION)

sql - 邮政系统 |如何将两个或多个表合并为一个表

node.js - 错误: Transaction rejected with non-error: undefined

sql - 将 array_agg 输出转换为数组而不是字符串

java - PostgreSQL:如何在第一个事务未完成时从其他事务中读取更新

postgresql - 如何判断 Postgres 中是否启用了数据校验和功能