Golang Go语言中gorm如何支持地理数据类型存储和计算

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


Golang Go语言中gorm如何支持地理数据类型存储和计算
11 回复

db.Raw()

写原生 SQL

更多关于Golang Go语言中gorm如何支持地理数据类型存储和计算的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


啊。。。。受不了 受不了

那不是一样用么 ST_Distance_Sphere() 这玩意是 mysql 原生的 又不是 node 额外支持的。gorm 一样支持 GEOMETRY

万能的 sql

当然也可以使用 redis 的 GEO

gorm 可以自定义类型啊。

具体怎么操作呢请问,新手

恩是可以,就是想请教下看看有没有成熟 的三方库把类型,常用的计算方法得打包了



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 库。

感谢感谢

在Go语言中,GORM(Go Object-Relational Mapping)是一个流行的ORM库,用于在Go应用程序和数据库之间建立映射。对于地理数据类型(如点、线、多边形等)的存储和计算,GORM本身并不直接提供原生的支持,但可以通过几种方式来实现这一需求。

首先,你可以使用数据库支持的地理数据类型。例如,PostgreSQL提供了PostGIS扩展,它支持丰富的地理数据类型和函数。你可以在数据库中定义地理数据类型列,然后使用GORM的ScanCreate方法来读写这些列。为了处理这些地理数据类型,你可能需要自定义类型或使用现有的Go库(如github.com/twpayne/go-geom)来在Go中表示和操作这些地理数据。

其次,如果你使用的数据库不支持地理数据类型,你可以考虑将地理数据序列化为JSON或文本格式(如WKT,Well-Known Text),然后在GORM模型中将其作为字符串存储。在读取时,你可以反序列化这些数据并在Go应用程序中进行处理。

最后,对于地理数据的计算(如距离、交点等),建议在数据库层面使用PostGIS等扩展提供的函数,因为数据库通常对这些操作进行了优化。如果必须在Go中进行计算,可以使用专门的地理计算库。

总之,虽然GORM本身不直接支持地理数据类型,但通过结合使用数据库功能和Go库,你可以有效地在Go应用程序中存储和计算地理数据。

回到顶部