我有一个使用Geometry
列类型的postgres表。
这是我的桌子:
CREATE TABLE areas (
id SERIAL PRIMARY KEY,
name VARCHAR(64),
polygon GEOMETRY
);
而且,通常我会插入如下数据:
INSERT INTO areas (name, polygon) VALUES (
'A',
ST_GeometryFromText('POLYGON ((-123.11386585235593 49.284015800344065,
-123.11882257461549 49.28074038150665,
-123.11337232589727 49.27721276406796,
-123.1078577041626 49.281104327676616,
-123.10996055603025 49.28152426222755,
-123.11386585235593 49.284015800344065))'));
如果我从postgres运行该语句,则当前工作正常。
但是在我的NestJS / TypeORM实体中,我已定义:
@Column('geometry', {nullable: true, name: 'polygon ' }
@ApiProperty()
polygon : string;
一旦我给值赋了:
areas .polygon ='POLYGON((--123.11386585235593 49.284015800344065, -123.11882257461549 49.28074038150665, -123.11337232589727 49.27721276406796, -123.1078577041626 49.281104327676616, -123.10996055603025 49.28152426222755, -123.11386585235593 49.284015800344065))';
我收到此错误:
错误:错误:未知的GeoJSON类型 在Parser.parseErrorMessage(C:\ Users \ myuserpath \ myproject \ node_modules \ pg-protocol \ dist \ parser.js:278:15)
但是我注意到原始查询是:
INSERT INTO "areas VALUES ('A', ST_GeomFromGeoJSON('POLYGON ((-123.11386585235593 49.284015800344065,
-123.11882257461549 49.28074038150665,
-123.11337232589727 49.27721276406796,
-123.1078577041626 49.281104327676616,
-123.10996055603025 49.28152426222755,
-123.11386585235593 49.284015800344065)))'::geometry)
我不确定该列在何处定义了ST_GeomFromGeoJSON
如何使用TypeORM插入该多边形?
答案 0 :(得分:2)
经过长时间的研究,我找到了一种方法。 还有另一种执行插入的方法:
const myPolygon = [[-123.11882257461549 49.28074038150665],[...],[...],[...]]
const areas = await getConnection()
.createQueryBuilder()
.insert()
.into(Areas) //HERE YOUR TABLE NAME
.values({
name: 'MrMins',
columnX: 'lorem ipsum', //LIST OF YOUR COLUMNS
active: true, //LIST OF YOUR COLUMNS
polygon: () =>
`ST_GeomFromGeoJSON( '{ "type": "Polygon", "coordinates": [${myPolygon}] }' )`,
})
.execute();
该实体在问题中被声明为。但是这种执行Insert
的方法可以使用任何需要的功能:ST_GeometryFromText
,甚至可以使用POINT
。
答案 1 :(得分:0)
我发现只是将实体的列注释如下,并在解析器上使用标准突变:
@Column({
type: 'geometry',
spatialFeatureType: 'LineString',
srid: 4326,
})
与使用 querybuilder 相比,我更喜欢这种方法,当您查询时,您的数据已经格式化为几何体的文本/JSON 形式。