Sql 基于地理位置过滤的数据库设计

Sql 基于地理位置过滤的数据库设计,sql,search,database-design,geolocation,database-schema,Sql,Search,Database Design,Geolocation,Database Schema,我的PostgreSQL中有2个实体: @Entity() export class Listing extends BaseEntity { @PrimaryGeneratedColumn() id: number @Column({ type: 'varchar', length: 255 }) title: string // For example, 'Best restaurant for work and english learning' @Column({ t

我的
PostgreSQL
中有2个实体:

@Entity()
export class Listing extends BaseEntity {
  @PrimaryGeneratedColumn() id: number

  @Column({ type: 'varchar', length: 255 })
  title: string // For example, 'Best restaurant for work and english learning'

  @Column({ type: 'double precision', nullable: true })
  latitude: number // For example: 41.87194

  @Column({ type: 'double precision', nullable: true })
  longitude: number // For example: 12.56738

  // Solution 1
  // @ManyToMany(() => City, city => city.listing) 
  // city: City

  @OneToMany(() => Offer, offer => offer.listing)
  offerList: Offer[]
}

@Entity()
export class Offer extends BaseEntity {
  @PrimaryGeneratedColumn() id: number

  @Column({ type:'text' })
  position: string // For example: 'cashier'

  @Column({ type:'int' })
  wage: number // For example: 6

  @ManyToOne(() => Listing, listing => listing.offerList)
  listing: Listing
}
如果我100%存储
纬度
经度
,按
城市/县
过滤
列表(地点)
的最佳方法是什么?

搜索请求示例:
意大利服务员提供的服务

解决方案1:存储在
列表实体
附加字段中,如
城市
(和
国家
?)。 (实际上,它将是独立的多对多(城市列表)实体,以避免用户混乱,优化
SQL
搜索请求,并轻松地将新城市添加到
生产数据库中,对吗?)

解决方案2:当用户键入
Italy
时,客户端将此查询发送到后端。之后,后端解析并获取
意大利
查询的
经度
纬度
(我假设会有一些bug,比如
奇怪的查询
)。然后后端开始搜索位于接收到的地理位置附近的列表(位置)。越近的搜索排名越好

解决方案3:您的解决方案…=)

以下是airbnb搜索引擎的工作原理,他们没有硬编码城市列表

你可以试试

它增加了对地理对象的支持,允许在SQL中运行位置查询

SELECT superhero.name
FROM city, superhero
WHERE ST_Contains(city.geom, superhero.geom)
AND city.name = 'Gotham';

使用postgresql,您可以使用postgis和相关拓扑函数。。(使用适当的几何或地理)否则,城市和纬度/经度之间的关系可以很容易地建立在一个边界框的基础上谷歌
postgis
,哇,太棒了,非常感谢