Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用GORM和PostgreSQL查找半径为10km的所有行_Sql_Postgresql_Go_Go Gorm - Fatal编程技术网

使用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”。