压缩表示多边形

时间:2017-07-05 11:37:42

标签: algorithm geometry compression computational-geometry

我有很多(数百万)来自openstreetmap数据的多边形,其中大部分(超过99%)的四个坐标代表房屋。

示例 Example

我目前将每个房屋的四个坐标明确地保存为浮动元组(纬度和经度),因此占用了32个字节的内存。

有没有办法以压缩方式(少于32个字节)存储此信息,因为四个坐标在最后一个小数中只有很少差异?

3 个答案:

答案 0 :(得分:1)

如果地图补丁不是太大,您可以将相对坐标存储在某个基点(例如,左下角)。获取这些差异,按照这样的地图大小来规范它们:

   uint16_diff  = (uint16) 65535 * (lat - latbottom) / (lattop - latbottom)

此方法允许存储16位整数值。

对于矩形(您可以将它们存储在单独的列表中),有一种方法可以存储5个16位值而不是8个值 - 左上角坐标,宽度,高度和旋转角度(可能还有另一组)数据,例如,包括第二个角落)

结合这两种方法,可能会使数据大小损失高达3.2倍

答案 1 :(得分:1)

正如@MBo所说,你可以存放每个房子的一个角落并相对于第一个角落压缩其他三个角落。

此外,如果建筑物如此相似,您可以设置一个"字典"建筑物。对于每个建筑物,您将其索引存储在字典和一些特征中,如第一个角点坐标和旋转。

答案 2 :(得分:0)

您没有提供有关您想要保留的分辨率的信息。

假设1米精度足够,24位可以覆盖16000公里。那么8位也足以代表尺寸信息(最多256米)。

每个房子会产生8个字节。

例如,使用霍夫曼编码的更积极的压缩可能不会对位置起作用(相对均匀的分布);在尺寸上稍微好一点,但好处是微不足道的。