gorm 如何支持地理数据类型存储和计算

289 天前
 kaesi0

项目需要使用到地理坐标,记录地点的经纬度,原来 node 中用的 sequelize ,支持 mysql 的 GEOMETRY 数据,还会涉及到比如计算两个地理位置的球面距离,原来使用的是 mysql 的 ST_Distance_Sphere()这些方法,请教各位大佬,在 gorm 中如何实现这些需求啊

1333 次点击
所在节点    Go 编程语言
10 条回复
Morii
289 天前
db.Raw()

写原生 SQL
kaesi0
289 天前
@Morii 啊。。。。受不了 受不了
zhengwenk
288 天前
那不是一样用么 ST_Distance_Sphere() 这玩意是 mysql 原生的 又不是 node 额外支持的。gorm 一样支持 GEOMETRY
mengdodo
288 天前
万能的 sql
mengdodo
288 天前
当然也可以使用 redis 的 GEO
ninjashixuan
288 天前
gorm 可以自定义类型啊。
kaesi0
285 天前
@zhengwenk 具体怎么操作呢请问,新手
kaesi0
285 天前
@ninjashixuan 恩是可以,就是想请教下看看有没有成熟 的三方库把类型,常用的计算方法得打包了
zhengwenk
285 天前
@kaesi0

chatgpt 回答:
在 Golang 中,原生并没有内置的地理数据类型,但是你可以使用第三方库来实现它们。对于地理数据类型,通常我们会使用以下两个流行的库:

github.com/twpayne/go-geom/geom:这个库提供了几何对象(例如 Point 、LineString 、Polygon 等)的定义和操作。你可以使用它来处理地理数据,但它不直接与 GORM 集成,需要你手动处理数据库和模型之间的映射。

github.com/paulmach/orb:这个库提供了类似的几何对象定义和操作,并且还提供了一些更高级的地理计算功能。与前面的库不同,orb 库提供了 GORM 模型定义和数据库映射的支持,使得在 GORM 中使用地理数据更加方便。

在示例代码中,我使用了 geom.Point ,它实际上是由 github.com/twpayne/go-geom/geom 库提供的,如果你想要在 GORM 中使用地理数据类型,并且希望更加方便的集成和映射,可以考虑使用 github.com/paulmach/orb 库。
kaesi0
278 天前
@zhengwenk 感谢感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/960332

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX