quantization和simplification有什么区别?量化是简化的另一种方式吗?在某些情况下使用量化更好吗?或者我应该同时使用两者的组合?
发布于 2013-09-20 16:08:20
几何的总尺寸由两个因素控制:、点数、和、每个坐标的数字数(精度)。
假设你有一个有1,000,000个点的大几何学,其中每个二维点表示为经度(±180°),纬度(±90°):
[-90.07231180399987,29.501753271000098],[-90.06635619599979,29.499494248000133],…实数可以具有任意精度(在JSON中;在JavaScript中,它们受IEEE 754精度的限制),因此数字的数量是无限的。但是在实践中,上面提到的是非常典型的,所以假设每个坐标都有18位数。包括额外的符号([、]和,),每一点最多需要花费1+ 18 +1+ 18 +1=39个字节在JSON中编码,整个几何图形大约是39 * 1,000,000≈39 is。
现在假设我们将这些实数转换成整数:经度和纬度都简化为整数x和y,其中0≤x≤99和0≤y≤99。实数点⟨λ,φ⟩和整数坐标⟨x,y⟩之间的简单映射是:
x = floor((λ + 180) / 360 * 100);
y = floor((φ + 90) / 180 * 100);由于每个坐标现在最多需要2位数字来编码,每个点最多需要1+2+1+2+1=7个字节来用JSON编码,整个几何图形大约是7MB;我们将总大小减少了82%。
当然,没有免费的:如果你删除太多的信息,你将不能再准确地显示几何图形。经验法则是,网格的大小至少应该是整个地图最大预期显示大小的两倍。例如,如果您在960×500像素空间中显示世界地图,则默认的10,000×10,000 (-q 1e4)是一个合理的选择。
因此,量化通过降低每个坐标的精度来去除信息,有效地将每个点抓取到一个规则的网格中。这减少了生成的TopoJSON文件的大小,因为每个坐标都表示为一个整数(例如0到9,999之间),其位数较少。
相反,简化通过删除点来删除信息,应用一种启发式方法来度量每个点的视觉显着性,并删除最不引人注目的点。有许多不同的简化方法,但是TopoJSON参考实现使用的Visvalingam方法在我的Line Simplification article中进行了描述,所以我不会在这里重复。
虽然量化和简化主要是独立地处理这两种不同类型的信息,但还有一个额外的复杂性:量化在topology is constructed之前应用,而简化则必然应用于preserve the topology。由于量化经常引入重合点([24,62],[24,62],[24,62]…),并且删除了重合点,所以量化也可以删除点。
在构造拓扑之前应用量化的原因是几何输入通常不具有拓扑有效性。例如,如果您将内华达州县的shapefile与内华达州边界的shapefile结合起来,那么一个shapefile中的坐标可能与另一个shapefile中的坐标不完全匹配。通过在构建拓扑之前对坐标进行量化,您可以将坐标固定到一个规则的网格中,并且可以得到一个更干净的拓扑结构,并且具有较少的弧度,希望能够正确地识别所有共享的弧。(当然,如果你过量化,那么你可能会造成太多的重合点,产生自交弧,这会导致其他问题。)
在以后的版本中,也许1.5.0,TopoJSON将允许您在拓扑构建之前控制量化,而不依赖于输出TopoJSON文件的量化。因此,您可以使用更精细的网格(或者根本不使用网格!)要计算拓扑,然后简化,然后使用适合低分辨率屏幕显示的粗网格。现在,它们是绑定在一起的,所以我建议使用一个更精细的网格(例如,-q 1e6)来生成一个干净的拓扑,而代价是一个稍微大一点的文件。因为TopoJSON也使用增量编码的坐标,所以您很少为所有的数字支付全部的代价!
发布于 2013-09-19 17:24:54
这两者是相关的,但目的和结果不同。
我相信量化会根据参数(调整到视图的预期分辨率)折叠附近的点--没有比绘制地图的像素更高的分辨率。但是它并没有去分析路径来确定表示形状所需的最佳点数。
Simplification算法是一种以最优方式分析多边形和减少点数的算法,使得多边形的整体变形最小化。基本上,它可以用于绘图减少点数(因此文件大小),而不会对路径的质量产生明显的影响。
作为一个并行的案例研究,考虑一条由10点组成的直线。量化将根据您使用的值减少点数(折叠附近点或重合点)。简化将分析这条线,并认识到在不显著改变多边形整体形状的情况下,10个点中的8个可以被移除,并将直线缩小到两个点(因为删除一条线上的点不会使路径发生变形)。
还请参见:
与结合使用:量化将地图缩小到适当大小的网格,简化以优化路径。
https://stackoverflow.com/questions/18900022
复制相似问题