
昨天突然想看一下怎么用maps包画地图, 就做了一个CRAN镜像的地理位置数据试了一下. 城市地理位置数据主要来自maps包中的数据集world.cities. 画图时用到了maps和tripack这两个包, maps用于呈现地图, 而tripack可以根据给定点坐标计算并绘制Voronoi图/Delaunay三角剖分. 相比主流的C或C++甚至Python下的实现, 在R中做这种事情可以说是简单无比了. 同时也要慨叹R的扩展性是如此之好. 不过目前R中和计算几何相关的包似乎不多, 据我所知还有rcdd(cddlib在R中的接口)和geometry. 比如geometry包, 可以计算n-维上的Delaunay三角形, 等等. 如果某天哪位大牛可以替最强的计算几何算法库CGAL在R中做一个接口就好了.
Voronoi Diagram of CRAN Mirrors on World Map [PDF(Vector), 120KB]
Delaunay Triangulation of CRAN Mirrors on World Map [PDF(Vector), 120KB]
从图中看, 多数CRAN镜像分布在沿海地区, 内陆较少, 也极不均匀. 西欧密集分布了约30个镜像, 面积是其几倍大小的东侧大片内陆只有寥寥3、4个镜像. 非洲、南美洲的情况大致相同. 北美的镜像分布呈现比较均匀的态势, 至少看上去比较稳定, 不多也不少.
Dataset & R Code [Gzip, 1,932 bytes]
有两个问题是不得不考虑的:
- 地球是椭球体, 在球面上绘制Delaunay三角和Voronoi图, 需要通过计算三维空间中的凸包来实现 .. 但考虑到事实上太平洋中间没有CRAN的镜像, 正好十分自然地将现有镜像隔得很远, 就无视这个了 ..
- CRAN镜像发挥的影响力与各地光缆铺设情况的关系更紧密, 这时用地理意义上的世界地图就显得略不给力了 .. 使用能够体现网络分布情况的"地图"才是正解.


不错呀,夜晚是很有收获的..
数模的时候如果有个世界地图就好了哇
说不定今年给舟曲的题
不错!肖楠看来对可视化是非常感兴趣了,哈哈
可视化和人机交互这些方向确实很吸引人, 不过我只是打个酱油 ..
我在想这些三角形有什么实际含义么?它们不能代表用户的范围,也不能代表镜像服务器的影响范围……
嗯, 很好, 这也是我想问的问题. Delaunay三角形在某些特定问题上有具体意义, 而在这里其实可以说是 画着玩的 ...
不过这三角形似乎可以做Ad Hoc网络中的资源分配和区域划分什么的, 有一群搞通信和计算机的在研究. 个人观点, 如果可以假设用户请求分布均匀, 网络情况的影响可以忽略, 那么三角形形状越极端的地区不妨考虑增加镜像数量. 因为Delaunay三角形中的最小角都是"最大的最小角".