3D地球的生成(一)——生成全球的3D图
原文发布时间:2010-07-03
作者:毛毛虫
这一部分内容是演示如何生成一个全球的3D图。
这篇文章中的例子显示了一个以经纬度表示的2D地图如何被转换为3D地球。
我们首先需要创建一个全球范围的矩形,然后把该矩形转换为3D地球,并将我们的一个包含全球国家行政区和南极洲的shape文件添加到这个3D表面上显示出来。
下面是操作过程:
首先创建3D地球。
使用转换器Creator创建一个全球范围的矩形(在后面转换为全球的格网),转换器设置如下:
然后使用AttributeCreator转换器,为这个矩形添加一些需要的属性,设置如下:
(图片已丢失)
使用Tiler转换器把矩形分为格网(例如,以5°为间隔),使用Counter转换器记录每个网格后(polyID),在使用Chopper转换器把网格转换为一个个的点,同时再次使用Counter转换器记录每个点(vexID),然后计算每个点的地心坐标值(x、y、z)。之前需要先获取每个点的经纬度坐标(使用转换器CoordinateExtractor),为了能使用三角转换器计算,需要把度转换为弧度,使用转换器AngleConverter,这两个转换器的设置分别如下:
每个点的坐标(x、y、z)计算如下:
x=_radius*cos(long+3.14159)*sin(3.14159/2.0-lat);
y=_radius*sin(long+3.14159)*sin(3.14159/2.0-lat)
z=_radius*cos(3.14159/2.0-lat)
此时的效果:
然后把点转换为3D点(3DpointReplacer转换器):
然后使用Sorter转换器排序,设置如下:
使用PointConnector转换器(注意这个转换器要根据属性polyID分组)重组多边形:
(图片已丢失)
对于LINE输出端口添加一个LineCloser转换器闭合可能的生成的线。
此时的输出结果如下(在pdf中显示的3D效果):
这就是一个生成3D地球的过程。下面我们看一下如何把全球的国家行政区显示在这个3D上。
< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />
同样,对shape图层做类似处理,该shape文件视图如下:
(图片已丢失)
为了区分各个行政区,并达到较好的视图效果,可以先使用RandomColorSetter转换器对图层进行渲染。对shape图层进行同样的处理,两个数据各个数据叠加在一起的效果如下:
这个图层的处理与上面的操作不同之处是:
为了区分各个行政区,并达到较好的视图效果,可以先使用RandomColorSetter转换器对图层进行渲染。另外对于shape图层,需要注意一点,如图:
输出结果可能会有这种自相交的情况产生,为了这后面的操作中能生成正确的多边形,需要消除这种情况(可以使用转换器SelfIntersector和Deaggregator)。最后得到的结果如图:
为了更好的视图效果,我们可以对这个shape图层使用转换器Extruder进行一下拉伸,根据前面提到的公式,在x、y和z轴上的拉伸矢量可以设置如下:
vector_x=_elevation*cos(long+3.14159)*sin(lat+3.14159/2.0)/10.0
vector_y=_elevation*sin(long+3.14159)*sin(lat+3.14159/2.0)/10.0
vector_z=_elevation*cos(lat-3.14159/2.0)/10.0
最后的效果如下: