使用GORM和PostgreSQL查找半径为10km的所有行
我想列出使用GORM和PostgreSQL查找半径为10km的所有行,sql,postgresql,go,go-gorm,Sql,Postgresql,Go,Go Gorm,我想列出起点周围10km半径范围内的比赛(加入表地址) 我的模型就是这样写的: 类型( //竞赛模型 种族结构{ Base//ID,CreatedAt,UpdatedAt,DeletedAt Title字符串`json:“Title”gorm:“Title;”` StartAddress`json:“StartAddress”gorm:“外键:StartAddressID”` StartAddressID字符串`json:“起始地址id”gorm:“类型:char(36);起始地址id;”` E
起点周围10km半径范围内的比赛
(加入表地址
)
我的模型就是这样写的:
类型(
//竞赛模型
种族结构{
Base//ID,CreatedAt,UpdatedAt,DeletedAt
Title字符串`json:“Title”gorm:“Title;”`
StartAddress`json:“StartAddress”gorm:“外键:StartAddressID”`
StartAddressID字符串`json:“起始地址id”gorm:“类型:char(36);起始地址id;”`
EndAddress Address`json:“EndAddress”gorm:“foreignKey:EndAddressID”`
EndAddressID字符串`json:“end\u address\u id”gorm:“类型:char(36);end\u address\u id;”`
StartDate time.time`json:“开始日期”gorm:“开始日期”`
time`json:“end_date”gorm:“end_date;”`
}
地址结构{
Base//ID,CreatedAt,UpdatedAt,DeletedAt
Street字符串`json:“Street”gorm:“Street;”`
Zipcode字符串`json:“Zipcode”gorm:“Zipcode;”`
城市字符串`json:“城市”gorm:“城市`
Lat float64`json:“Lat”gorm:“Lat;”`
Lng float64`json:“Lng”gorm:“Lng`
}
)
要查询我的数据库,我使用
我不知道如何通过GORM编写使用PostgreSQL的cube
&earthdistance
扩展名的查询
我已经添加了以下扩展:
创建扩展多维数据集;
及
创建扩展接地距离;
类似于此,但使用GORM语法和按距离排序:
从比赛中选择*
addresses.id=races.start\u address\u id上的内部连接地址
和接地盒(ll_to_earth(48.8589507,2.2770205),5000)@>ll_to_earth(addresses.lat,addresses.lng)
按种族排序。状态描述
限制100
您在Gorm中可以进行如下查询:
var res[]比赛
db.Model(&Race{})。
加入(“StartAddress”)。
其中(“接地盒(ll-U-to-U-earth(?),?)@>ll-U-to-U-earth(addresses.lat,addresses.lng)”,ptLat,ptLng,dist。
顺序(“种族状态描述”)。
限制(100)。
查找(&R)
要按距离获取订单,您需要将订单(…)。
替换为:
子句(子句.OrderBy{
表达式:子句.Expr{
SQL:“接地距离(ll_至_接地(?),ll_至_接地(addresses.lat,addresses.lng))ASC”,
变量:[]接口{}{ptLat,ptLng},
没有论文:是的,
},
}).
您在Gorm中可以进行如下查询:
var res[]比赛
db.Model(&Race{})。
加入(“StartAddress”)。
其中(“接地盒(ll-U-to-U-earth(?),?)@>ll-U-to-U-earth(addresses.lat,addresses.lng)”,ptLat,ptLng,dist。
顺序(“种族状态描述”)。
限制(100)。
查找(&R)
要按距离获取订单,您需要将订单(…)。
替换为:
子句(子句.OrderBy{
表达式:子句.Expr{
SQL:“接地距离(ll_至_接地(?),ll_至_接地(addresses.lat,addresses.lng))ASC”,
变量:[]接口{}{ptLat,ptLng},
没有论文:是的,
},
}).
你好。出于好奇,您为什么选择earthdistance而不是postgis来处理空间数据?cheers@JimJones谢谢你的提问,我选择了“earthdistance”车,我觉得它更合适,并且得到了博士后的官方支持。我愿意使用PostGIS或任何扩展。据我所知,PostGIS是处理空间数据的最合适的扩展。在这个答案中,您可以找到一个计算距离的示例:您好。出于好奇,您为什么选择earthdistance而不是postgis来处理空间数据?cheers@JimJones谢谢你的提问,我选择了“earthdistance”车,我觉得它更合适,并且得到了博士后的官方支持。我愿意使用PostGIS或任何扩展。据我所知,PostGIS是处理空间数据的最合适的扩展。在这个答案中,你可以找到一个计算距离的例子:谢谢你的回答,两个选项我都有这个错误:错误:输入结束时语法错误
从“种族”中选择[…]左键加入“种族”中的“地址”“开始地址”=“开始地址”=“开始地址”=“开始地址”。“id”WHERE earth\u box(ll\u to\u earth(53.3781516,-9.338521),'5000')@>ll_to_earth(addresses.lat,addresses.lng和“races”。“deleted_at”按races.status DESC为空。我的代码中有一个拼写错误,看到了吗?第二个ll_to_earth缺少一个parens。非常感谢您的回复。我只需将出现的“addresses.lat”和“addresses.lng”替换为“lat”和“lng”如果我有一个错误。谢谢你的回答,两个选项我都有这个错误:error:syntax error在输入的末尾
SELECT[…]从“races”左键加入“addresses”“StartAddress”“ON“races”。“start\u address\u id”=“StartAddress”。“id”WHERE earth\u box(ll\u to\u earth(53.3781516,-9.338521),“5000”)@>ll\u to\u earth(addresses.lat,addresses.lng和“races”。“deleted_at”按races.status DESC为空顺序,我的代码中有一个输入错误,看到了吗?第二次地球大战缺少一个参数。非常感谢您的回复。如果我有错误,我只需将出现的“addresses.lat”和“addresses.lng”替换为“lat”和“lng”。