public static DelayedTerrainAzimuthElevationMask CreateDelayedMask( TerrainProvider provider, Cartographic observerPosition, int numberOfAzimuthSteps, double stepSize, double maximumSearchAngle )
Public Shared Function CreateDelayedMask ( provider As TerrainProvider, observerPosition As Cartographic, numberOfAzimuthSteps As Integer, stepSize As Double, maximumSearchAngle As Double ) As DelayedTerrainAzimuthElevationMask
public: static DelayedTerrainAzimuthElevationMask^ CreateDelayedMask( TerrainProvider^ provider, Cartographic observerPosition, int numberOfAzimuthSteps, double stepSize, double maximumSearchAngle )
static member CreateDelayedMask : provider : TerrainProvider * observerPosition : Cartographic * numberOfAzimuthSteps : int * stepSize : float * maximumSearchAngle : float -> DelayedTerrainAzimuthElevationMask
|ArgumentOutOfRangeException||Thrown if numberOfAzimuthSteps is less than or equal to zero.|
This method works by casting a ray out from the observerPosition in a number of directions to determine the minimum elevation angle that is visible above the terrain in that direction. More specifically, the various distances at which the minimum elevation angle increases in that direction are determined.
Selecting values for numberOfAzimuthSteps, stepSize, and maximumSearchAngle requires making a trade-off between the accuracy of the result and the time to compute it. The ideal values to use depend on the specifics of the problem being solved and the nature of the terrain data employed.
numberOfAzimuthSteps is the number of rays to cast out from the observerPosition in computing the mask. A value of 360 casts a ray for each degree, and is a reasonable value to use. Notice that when a value of 360 is used, the count of elevation masks will be 361 because it contains the elevation for both 0 and 360. The elevation data for 360 copies data from 0 with the exception of the azimuth for efficiency.
stepSize is the distance between steps along the ray, in radians. A reasonable value for this parameter would sample approximately three times per terrain grid cell, or 1/3 of the smallest of DeltaLongitude and DeltaLatitude.
maximumSearchAngle is the maximum angle, in radians, to move along each ray. In other words, this parameter indicates the stopping point for sampling along the ray. A reasonable value will take into account the difference between the maximum and minimum heights of terrain provided by provider and potentially how close together the minimum and maximum heights are located.
double approximateHeightOfMtEverest = 8850.0; double semimajorAxisLength = WorldGeodeticSystem1984.Shape.SemimajorAxisLength; double maximumSearchAngle = Math.Acos(semimajorAxisLength / (semimajorAxisLength + approximateHeightOfMtEverest));