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
,哇,太棒了,非常感谢