如何使用Typeorm在Postgis中处理几何场

发布于 2025-02-07 12:19:45 字数 847 浏览 1 评论 0 原文

我正在使用Typeorm,该typeorm连接到从

这是我的实体文件(几何来自此软件包):

@Entity()
export class Port {
  @Column({ type: 'geometry' })
  geometry: Geometry;
}

在这里,我可以看到该类型成功成功地创建了数据库。

但是,当我尝试插入任何端口时,Typeorm投掷:

QueryFailedError: unknown GeoJSON type

我要插入的数据是WKT格式。例如,

"POINT(18.5478833 54.5353333)"

我在做什么错?

I am using TypeORM which is connected to a local postgis instance running from this image

This is my entity file (Geometry comes from this package):

@Entity()
export class Port {
  @Column({ type: 'geometry' })
  geometry: Geometry;
}

Here I can see that TypeORM succeeded in creating the database.

(screenshot from pgadmin)

However when I try to insert any port, TypeORM throws:

QueryFailedError: unknown GeoJSON type

Data I am trying to insert is in WKT format. For example

"POINT(18.5478833 54.5353333)"

What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

自由如风 2025-02-14 12:19:45

好的,我最终使用的是:

entity

@Column({
  type: 'geometry',
  srid: 4326,
})
geometry: string;

服务

public async create(version: CreateTDTO): Promise<T> {
  return this.baseZoneVersionRpository
    .createQueryBuilder()
    .insert()
    .values({
      ...(version as any),
      geometry: () => `ST_GeomFromText('${version.geometry}', 4326)`,
    })
    .execute() as any;
}

请注意,这个人期望以WKT格式输入数据。

不幸的是,我没有 摆脱

't找到一种

方法 Geojson 格式的数据默认情况下,我无法通过 typeorm 更改它。但是,有一种方法可以使用 typeorm 's 变形金刚进行变换实体。

@Column({
  type: 'geometry',
  srid: 4326,
  transformer: {
    to: (something) => something,
    from: transformFromGeoJSONToYourFormat,
  },
})
geometry: string;

图书馆我发现对更改几何格式的有帮助是 https://www.npmjs.coms.coms.coms.coms.coms.coms.coms.coms.coms.coms.coms.com/package/package/wkx

Ok so what I ended up using is:

Entity

@Column({
  type: 'geometry',
  srid: 4326,
})
geometry: string;

Service

public async create(version: CreateTDTO): Promise<T> {
  return this.baseZoneVersionRpository
    .createQueryBuilder()
    .insert()
    .values({
      ...(version as any),
      geometry: () => `ST_GeomFromText('${version.geometry}', 4326)`,
    })
    .execute() as any;
}

Note that this one expects input data in a WKT format.

Unfortunately I didn't find a way to get rid of any

Change format coming from database

I am not sure why but my PostGIS database returns data in GeoJSON format by default and I haven't been able to change it through the TypeORM. There is a way however to transform entities using TypeORM's transformer.

@Column({
  type: 'geometry',
  srid: 4326,
  transformer: {
    to: (something) => something,
    from: transformFromGeoJSONToYourFormat,
  },
})
geometry: string;

Library I found particularly helpfull for changing geometry formats was https://www.npmjs.com/package/wkx

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文