所以我正在使用pg-promise将多个geojson MultiPolygons插入到postgis数据库中。插入数据库的工作正常,但是对于数据库中的某些行,我得到了奇怪的行为,那就是单元格填充了两行。第一行是加载消息,第二行是实际的geom对象,更奇怪的是,它直接从geojson转换为postgis geom。
function createBorder(pathToJSON, table) {
fs.readFile(pathToJSON,
{encoding: 'UTF-8'},
(err, data) => {
let geoJSON = JSON.parse(data);
geoJSON.features.forEach(f => {
f.geometry.crs = {
type: 'name',
properties: {
name: 'EPSG:4326'
}
}
db.none('INSERT INTO nyc_borders(geom)\
VALUES (ST_GeomFromGeoJSON(${geoJSON}))', {
geoJSON: f.geometry
})
.then((d) => {
console.log(f.geometry);
})
.catch(error => {
console.log("ERROR: ", error);
})
});
});
}
createBorder('./data/community_districts.geojson');
我缩短了geoJSON输出,基本上是从opendata portal下载的nyc的社区区域边界 Geojson:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"shape_leng": "51549.5578986",
"boro_cd": "311",
"shape_area": "103177785.347"
},
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[
-73.97348373564797,
40.61137106069874
],
[
-73.97303089190211,
40.6090051063008
],
[
-73.97299433938896,
40.60881414180224
]
]
]
]
}
},
{
"type": "Feature",
"properties": {
"shape_leng": "65821.875617",
"boro_cd": "313",
"shape_area": "88195686.2688"
},
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[
-73.96720294103956,
40.573326317397424
],
[
-73.96738975478877,
40.573258999904446
],
[
-73.9674356779313,
40.57320896967127
],
[
-73.96736390080571,
40.57304456895217
],
[
-73.98372152615246,
40.59582107821707
]
]
]
]
}
}
]
}
我数据库中的一些图片:
database table with rows that have two lines inside one cell
one cell expanded to see the actual tow lines better
所以我真的很困惑,因为我不知道如何开始调试,插入插入确实可以正常工作,并且geojson对象的转换也很好。我实际上不知道是谁造成了这种错误的行为。
答案 0 :(得分:1)
通过使用pg-promise,您可以完全控制Custom Type Formatting格式化数据的方式。
例如,如果您有一个array[][2]
(如图所示的点),则可以像这样转换它们:
const toGeometry = g => ({ /* g = array[][2] (points) */
rawType: true,
toPostgres: a => {
const points = a.map(p => pgp.as.format('$1 $2', p));
return 'ST_GeomFromText(\'LINESTRING(' + points.join() + ')\')';
}
});
然后您可以传入toGeometry(f.geometry)
以应用自定义格式。
另请参阅:ST_GeomFromText。
答案 1 :(得分:0)
我找到了解决问题的方法,图片中显示的两行让我感到困惑,其中只有datagrip添加的信息告诉我巨大的多边形没有完全加载。
我用psql查看了相同的行:
public void OnDrag(PointerEventData eventData)
{
transform.parent.position = (Vector3)eventData.position + offset;
}
,第二行将不会显示。 然后我意识到这只是补充信息。