3D地球的生成(一)——生成全球的3D图

原文发布时间:2010-07-03

作者:毛毛虫

这一部分内容是演示如何生成一个全球的3D图。

这篇文章中的例子显示了一个以经纬度表示的2D地图如何被转换为3D地球。

我们首先需要创建一个全球范围的矩形,然后把该矩形转换为3D地球,并将我们的一个包含全球国家行政区和南极洲的shape文件添加到这个3D表面上显示出来。

下面是操作过程:

首先创建3D地球。

使用转换器Creator创建一个全球范围的矩形(在后面转换为全球的格网),转换器设置如下:


然后使用AttributeCreator转换器,为这个矩形添加一些需要的属性,设置如下:

图片已丢失

使用Tiler转换器把矩形分为格网(例如,以5°为间隔),使用Counter转换器记录每个网格后(polyID),在使用Chopper转换器把网格转换为一个个的点,同时再次使用Counter转换器记录每个点(vexID),然后计算每个点的地心坐标值(xyz)。之前需要先获取每个点的经纬度坐标(使用转换器CoordinateExtractor),为了能使用三角转换器计算,需要把度转换为弧度,使用转换器AngleConverter,这两个转换器的设置分别如下:


(注意 Convert Angles On :选项选择 Attributes Only ,我们只转换属性,不转换几何)。
求出弧度之后,就可以计算每个点的地心坐标,可以参考下面公式:

    

    

每个点的坐标(xyz)计算如下:

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图层,需要注意一点,如图:


输出结果可能会有这种自相交的情况产生,为了这后面的操作中能生成正确的多边形,需要消除这种情况(可以使用转换器SelfIntersectorDeaggregator)。最后得到的结果如图:


为了更好的视图效果,我们可以对这个shape图层使用转换器Extruder进行一下拉伸,根据前面提到的公式,在xyz轴上的拉伸矢量可以设置如下:

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

最后的效果如下:





猜你喜欢

转载自blog.csdn.net/fmechina/article/details/80789332