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