将三维穹顶作为网格绘制在球体上
本示例演示了如何以本地东北天 (ENU) 坐标系中的三维特征为起点,对其进行变换,并将其与地心地固 (ECEF) 坐标系中的球体显示进行组合。
步骤 1:设置定义参数
请使用 1980 年大地测量参考系 (GRS80),并以公里为单位进行计算。将本坐标系的原点设在美国华盛顿特区附近。
grs80 = referenceEllipsoid("grs80","km"); domeRadius = 3000; % km domeLat = 39; % degrees domeLon = -77; % degrees domeAlt = 0; % km
步骤 2:在本地“东北天”坐标系中构建穹顶
本地 ENU 系统是相对于一个大地测量参考点定义的,在此情况下由 (domeLat、domeLon 和 domeAlt) 指定。这是一个三维笛卡尔坐标系,其中 x 轴正方向指向东方,y 轴正方向指向北方,z 轴与参考椭球面垂直并向上延伸。
在此示例中,该三维特征是在 z ≥ 0 半空间内半径为 3000 公里的半球体。假设而言,该半球可包含一个理想化雷达系统覆盖范围内的空间体积,该系统在所有方位角上均能从地平线到天顶实现均匀覆盖。像这样的空间区域,当代表有效监视覆盖范围时,有时被非正式地称为“雷达穹顶”。
构建描述封闭半球穹顶的坐标数组的快速方法是:从单位球体开始,放大半径,然后将下半球压扁。如果将其设置为半透明,会更容易直观地理解——在这种情况下,将 FaceAlpha 设置为 0.5。
[x,y,z] = sphere(20); xEast = domeRadius * x; yNorth = domeRadius * y; zUp = domeRadius * z; zUp(zUp < 0) = 0; surf(xEast,yNorth,zUp,"FaceColor","yellow","FaceAlpha",0.5) axis equal

步骤 3:将穹顶坐标系转换为地心地固 (ECEF) 坐标系
使用 enu2ecef 函数,将穹顶从本地 ENU 坐标系转换为基于 GRS 80 参考椭球体的 ECEF 坐标系。它执行了三维平移和旋转。请注意,半球是如何倾斜的,以及它的中心是如何从原点偏移数千公里的。
[xECEF, yECEF, zECEF] ... = enu2ecef(xEast,yNorth,zUp,domeLat,domeLon,domeAlt,grs80); surf(xECEF,yECEF,zECEF,"FaceColor","yellow","FaceAlpha",0.5) axis equal

步骤 4:构造球体显示
使用 axesm 和 globe 构建一个基本的球体展示。
figure ax = axesm("globe","Geoid",grs80,"Grid","on", ... "GLineWidth",1,"GLineStyle","-",... "Gcolor",[0.9 0.9 0.1],"Galtitude",100); ax.Position = [0 0 1 1]; axis equal off view(3)

步骤 5:添加各种全球地图数据
在球体上添加低分辨率的全球地形、海岸线和河流。
load topo60c geoshow(topo60c,topo60cR,"DisplayType","texturemap") demcmap(topo60c) load coastlines geoshow(coastlat,coastlon,"Color","black") rivers = readgeotable("worldrivers.shp"); geoshow(rivers,"Color","blue")

步骤 6:将穹顶添加到球体显示中
将 ECEF 版本的穹顶作为半透明网格添加到球体坐标系中。
surf(xECEF,yECEF,zECEF,"FaceColor","yellow","FaceAlpha",0.5)

您可以通过交互式旋转坐标轴,从不同角度观察穹顶和球体。
致谢
Thanks to Edward J. Mayhew, Jr. for providing technical background on "radar domes" and for bringing to our attention the problem of visualizing them with the Mapping Toolbox™.