我当前的实体看起来像这样:
import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Landmark extends BaseEntity {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column()
longitude: number
@Column()
latitude: number
}
但我想知道是否有更好的方法来做到这一点,使用一个特殊的postgres类型,它与typeorm一起工作。
2条答案
按热度按时间uujelgoq1#
你需要了解Typeorm中的PostGIS和空间列支持:
https://github.com/typeorm/typeorm/blob/master/docs/entities.md#spatial-columns
PostGIS是一个扩展,您可以在postgres数据库中启用它来处理空间数据类型。安装PostGIS后,您可以在Typeorm查询构建器中使用其特殊的空间数据函数,就像使用任何其他PG函数一样,由GeoJSON备份。
Typeorm的postgres驱动程序在内部使用GeoJSON来与PostGIS一起工作,因此当您定义Typeorm模型时,您需要添加
@types/geojson
,这将使您能够按照要求正确键入Typeorm列。例如,您可以导入
Geometry
类型定义并键入列如下:在您的示例中,您可能希望将
latitude
和longitude
列合并为一个列--location
--它可以使用point()
函数将纬度和经度合并为一个Geometry
类型。作为一个人为的例子,你可以这样做:
这会将
customers
表上的location
列(作为示例)设置为与San弗朗西斯科的纬度/经度位置相对应的geometry(point)
列类型。如果您想将lat/lon的现有双精度列值(这是您应该单独存储lat/lon的方式)迁移到
geometry(point)
类型的单个location
列,则可以使用PostGIS自带的ST_MakePoint
函数。即
kuarbcqp2#
扩展JosephHall答案
Used postgres,postgis,typeORM,@types/geojson,Nest JS
服务等级
控制器