Javascript 高效压缩ASCII格式的数字(使用PHP或JS)

Javascript 高效压缩ASCII格式的数字(使用PHP或JS),javascript,php,compression,ascii,coordinates,Javascript,Php,Compression,Ascii,Coordinates,在短时间内,我两次遇到相同的问题: 我有一个坐标列表(对于地理坐标,是纬度、经度,对于3D OBJ文件,是x、y、z) 坐标存储为以ASCI小数表示的数字,。。。e、 g.3.14159265 坐标有小数 坐标以文本形式存储在文本文件或数据库中 整群人都变得太大了 现在,我们可以简单地忽略这个问题,接受一个缓慢的响应或者一个更加参差不齐的形状——但这会让人感到厌烦。ASCII中的十进制使用8位(我们只需要4位来表示数字0…10),许多坐标共享相同的前两位数。。。感觉这些文件很容易压缩。压缩显

在短时间内,我两次遇到相同的问题:

  • 我有一个坐标列表(对于地理坐标,是纬度、经度,对于3D OBJ文件,是x、y、z)
  • 坐标存储为以ASCI小数表示的数字,。。。e、 g.3.14159265
  • 坐标有小数
  • 坐标以文本形式存储在文本文件或数据库中
  • 整群人都变得太大了
现在,我们可以简单地忽略这个问题,接受一个缓慢的响应或者一个更加参差不齐的形状——但这会让人感到厌烦。ASCII中的十进制使用8位(我们只需要4位来表示数字0…10),许多坐标共享相同的前两位数。。。感觉这些文件很容易压缩。压缩显然会减少一些文件,尽管它会有所不同。基本编码似乎也有帮助,但结果并不像我希望的那样高效(大约30%)

使用PHP,压缩存储在文本文件中的坐标的实用方法是什么


(实用意义:相当快,最好使用香草PHP)

您可以使用四键对地理坐标和其他预排序算法进行预排序,例如,移动到front和burrow wheeler。四边形键通常用于贴图应用程序,特别是用于贴图分幅,但它有一些有趣的特性。只需将地理坐标转换为二进制并将其连接起来。然后将其视为基数为4的数字。这里有一个免费的源代码:。然后使用统计压缩,如哈夫曼。delaunay三角剖分也使用相同的算法。

为什么是5位?有11种可能性(包括“.”),因此少于4位。但是为什么不将它们存储为单精度浮点呢?这是4个字节。(或32位整数,取决于您的范围/精度要求。)“太大”是什么?。。。我们说的是1000的坐标吗?100/1000的坐标?还有,“我们可以忽略这个问题”-我强烈建议这样做,除非你有证据表明增加的数据量实际上导致了问题。为其增加复杂性被称为“微观优化”。@Oliver:谢谢你的批评!5位是一个错误,我在问题中更正了它。我无法更改存储,因为坐标以OBJ或CSV文件的形式出现,并且/或者存储在CMS中。优化将导致更快的响应,更快的绘图或更详细的对象,所以是的,这是值得的!我的目标是将文件大小减少2到10倍。这是微观优化吗?@Scunliffe:对于3D对象,我们讨论的是10e5数量级的点,导致文件大小在1到20Mbi之间。我不确定我是否应该将此标记为可接受的答案。四键可以在三维坐标上使用,还是依赖于x、y和缩放(不是Z)坐标?Burrow Wheeler和move to front非常有趣,因为它们似乎使拉链压缩更有效。是的,当然你可以在3轴上使用它,它有点像八叉树。但我没试过这可能是地理坐标的问题。