用ArcGIS来绘制你的小星球

最近看地图投影,在检索Stereographic Projection时,无意中看到flickr上有很多这样的图片(在Google第一页,不让我看到都难啊):

直观的感受是将空间扭曲成了一个小星球,夸大和缩小都十分巧妙(等角的)。虽然以前也见到过,但一直觉得只是设计师的小把戏而已,与GIS没有半毛钱关系。

学过地图投影的都应当认识Stereographic Projection,翻译过来有好多种译法,比如球极投影、球面投影(直译过来是“立体投影”,这是为什么呢?),学名应该叫等角方位透视投影吧。透视投影原理很简单,推导的话初中几何的知识就够用了。

投影原点必须在球面上(在球心是日晷投影,在无穷远是正射投影),比如南极点,经纬网坐标原点,或者地球上任意一点。

Stereographic Projection绘图步骤

既然是投影,是不是可以用GIS的方法去做这种图呢?比如ArcGIS?答案显然是可以的。地球可以看成一个球体,球体上的坐标用经纬度来刻画。经度的跨度是360度,纬度的跨度是180度。显然,经度的范围是纬度的两倍。那么,我们找一张横纵比是2:1的图片,配准后是不是就能将地球包络起来了?

下面我介绍一下具体过程,以南京玄武湖为例:

选择3个角点做控制点,这样对应点是显而易见的。千万不要去地图上点,要在链接表里面输入,用完保存,这样下次还能用。

配好控制点之后要Update,重采样就算了,没必要。

这样坐标配对了,但还是没有空间参考的,所以要define一个。(注:这里选WGS84的椭球,虽然说理论上是要用正球的(sphere),但这点偏差眼睛根本看不出来。用WGS84只是为了方便在Globe中叠加,不然datum从sphere到spheroid是一次transform,这对于栅格来说,代价很大。)

叠加到Globe中查看一下,配上经纬网。看一下“南北极点”,以及“赤道”视角。注意,现在这不是一张照片了,这是一张有空间参考的栅格“地图”!

改变一下dataframe的空间参考属性,将显示投影改为Stereographic(没必要去重新project数据,因为我们只需要显示就够了。)。当然要改一下投影参数,原点设为(0,-90),也就是“南极点”。这就像你是站在南极点往北极点方向看。

这是结果:

大图点这里

全景Stereographic Projection绘法

如果你理解了上面所说的,那你会发现上图还是有一些不恰当的地方,或者可以改进的地方。比如:图片不是“圆融”的,中轴线下半段是明显的“边界”。因为上面的照片不是全景照片,panorama。全景是你站立的地方,上下左右等能看到的意思。如果是全景照片,那照片的左右是“连续”的。比如这张南京照片:

可以想象,如果将全景照片进行投影,可以得到“圆融”的效果,更像一个小星球。但是,你肯定也发现了,这种照片横纵比明显不是2:1的。这不是问题,重新计算一下配准点就行了,还是选择“南极点”为原点。我给出一个通用公式:

W是宽度,H是高度。

那这幅2048×461的照片的配准点文件就是这样的:

球面上是这样:

显然只能从“南极点”覆盖到“赤道以南”附近。整个“北半球”都没有啦。

同样按上述步骤操作,可见:

大图点这里

更多

  • 再进一步,如果你有兴趣,可以利用ArcPy写一个脚本,让这个过程自动化了。或者脱离ArcGIS,完全用开源的东西也肯定是可能的。因为我发现那些设计师做这个图真的好累,这难得让我在江湖中体会到GIS的一丁点优势呀:P
  • 改变投影参数还会有很多玩法,特别是把“北极点”作为原点。以及Scale Factor也是有用的,自己挖掘啦。
  • 另外,原始照片不能太宽,也就是尽量保持2:1吧。不然投影完后都缩成一团里,这应该挺好理解的。
  • 关于数据,google panorama可以找到一些图片,但很多都是360度全景展示的,而且显然是瓦片式的,这样的图片你抓了也没用,街景也应该是这个意思吧,没研究过。而且panorama不是全指360度的视角,有些广角图也叫panorama。反正360度全景图片不好找!这里有个网站里面分享了不少:http://www.wpanorama.com/panoramas.php
  • 在ArcGISOnline上放了一个地图包,有兴趣的同学自取:http://www.arcgis.com/home/item.html?id=e7d10b20ad5c4dbeb7aab8e785779cf1
分享到:
  1. 儿子八个月,整天光屁股在床上爬来爬去,今天,突然听到他放了个屁,屁股后面还冒起白烟。我顿时吓坏了,慌得老婆要去医院。我妈悠悠地说:“没事,没事,下次在屁股那少擦点爽身粉就行了!” 一个程序员社区 http://www.1024xyz.com