V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
kaesi0
V2EX  ›  Go 编程语言

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

  •  
  •   kaesi0 · 2023-07-27 19:48:47 +08:00 · 1572 次点击
    这是一个创建于 490 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    10 条回复    2023-08-07 09:52:37 +08:00
    28Sv0ngQfIE7Yloe
        1
    28Sv0ngQfIE7Yloe  
       2023-07-27 19:52:20 +08:00
    db.Raw()

    写原生 SQL
    kaesi0
        2
    kaesi0  
    OP
       2023-07-27 19:57:42 +08:00
    @Morii 啊。。。。受不了 受不了
    zhengwenk
        3
    zhengwenk  
       2023-07-28 14:03:54 +08:00
    那不是一样用么 ST_Distance_Sphere() 这玩意是 mysql 原生的 又不是 node 额外支持的。gorm 一样支持 GEOMETRY
    mengdodo
        4
    mengdodo  
       2023-07-28 15:56:02 +08:00
    万能的 sql
    mengdodo
        5
    mengdodo  
       2023-07-28 15:56:50 +08:00
    当然也可以使用 redis 的 GEO
    ninjashixuan
        6
    ninjashixuan  
       2023-07-28 16:14:14 +08:00
    gorm 可以自定义类型啊。
    kaesi0
        7
    kaesi0  
    OP
       2023-07-31 11:35:23 +08:00
    @zhengwenk 具体怎么操作呢请问,新手
    kaesi0
        8
    kaesi0  
    OP
       2023-07-31 11:35:59 +08:00
    @ninjashixuan 恩是可以,就是想请教下看看有没有成熟 的三方库把类型,常用的计算方法得打包了
    zhengwenk
        9
    zhengwenk  
       2023-07-31 13:56:09 +08:00
    @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
        10
    kaesi0  
    OP
       2023-08-07 09:52:37 +08:00
    @zhengwenk 感谢感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2579 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 15:52 · PVG 23:52 · LAX 07:52 · JFK 10:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.