我有一系列的位置,我想在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
不确定导致错误的原因。任何帮助将不胜感激。
答案 0 :(得分:2)
多边形应该以与开始相同的点结束。这就是为什么说non-closed
。
检查示例 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 }
]