我正在尝试将 Geo CoOrdinates 存储在 mysql 数据库服务器中。如果我的坐标精度值超过 15 位,则该值会四舍五入并存储在数据库中。我相信这是因为这个文档而发生的。
但有趣的信息是 当我尝试使用双数据类型存储相同的坐标时。我可以存储高达 17 位的精度。
空间数据类型还将每个坐标存储为内部的双精度值。那么为什么 Spatial 数据类型不能存储超过 15 位的精度呢?我必须存储高达 20 位的精度现在该怎么办?
我正在尝试将 Geo CoOrdinates 存储在 mysql 数据库服务器中。如果我的坐标精度值超过 15 位,则该值会四舍五入并存储在数据库中。我相信这是因为这个文档而发生的。
但有趣的信息是 当我尝试使用双数据类型存储相同的坐标时。我可以存储高达 17 位的精度。
空间数据类型还将每个坐标存储为内部的双精度值。那么为什么 Spatial 数据类型不能存储超过 15 位的精度呢?我必须存储高达 20 位的精度现在该怎么办?
这是一个很好的问题,也许对内部有更深入了解的人可以回答这个问题,但是,我个人会质疑为什么你“必须存储高达 20 位的精度”。
我从您之前的一些问题中注意到您正在处理纬度和经度坐标,这仍然正确吗?
假设是这样,对 20 位精度的需求是值得怀疑的,并且有充分的理由。赤道的单经度(最大)代表大约 110 公里。所以:
..我认为我不需要在这里继续,在小数点后 20 位,您将处理小于纳米尺度的距离。值得注意的是,实际上这些距离会随着您靠近两极而减小,尽管使用 MySQL 您正在处理平面模型,因此这不适用(除非您手动实现复杂的 vincenty 算法来计算距离 - 这会带来严重的开销与haversine方法相比)。地球上也没有任何设备可以准确记录这一点,因此您永远不会在这些级别上获得“绝对”的结果。
即使您不使用纬度和经度,而是在平面模型上使用几何,您的单位也可以是您想要的任何度量(只要您记住,根据需要进行转换并记录它 - 例如米),同样,不需要 20 位精度。
当然,您可以完全放弃对 Spatial 的使用,并使用支持所需精度的类型手动实现存储经纬度的类型。但是,您将不得不实施所有自己的计算并破坏空间索引所带来的好处,从而产生巨大的开销。我不推荐这种方法,也不推荐重新发明轮子。
希望这是有道理的。如果我遗漏了什么,请随时发表评论,我会更新我的答案。