1.创建区域
需要提供点坐标。最少三个点可以确定一个区域。
创建区域也是一样,创建对象然后设置点位置 ,然后设置区域属性。
var referenceSurface = m_earth.Shape;
// We specify the boundary in terms of nodes connected by geodesics.
var result = new List<Cartographic>();
result.Add(new Cartographic(115.952385, 39.885819, 0));
result.Add(new Cartographic(116.090365, 39.946029, 0));
result.Add(new Cartographic(116.658381, 39.917702, 0));
// With the boundary nodes specified and the reference surface chosen,
// we now decide on the granularity of the interconnecting curves.
double granularity = Trig.DegreesToRadians(0.5);
var builder = new SpecifiedNodesEllipsoidSurfaceRegionBuilder(referenceSurface, granularity, result);
// The default connection type is geodesic, but rhumb lines could be used instead if desired.
builder.ConnectionType = EllipsoidSurfaceRegionCurveConnectionType.Geodesic;
// The region is ready to be built!
var region = builder.GetEllipsoidSurfaceRegion();
创建区域对象
var locationPoint = new PointCartographic(m_earth, region.Centroid);
m_CustomArea = new Platform
{
Name = "BJ",
LocationPoint = locationPoint,
OrientationAxes = new AxesEastNorthUp(m_earth, locationPoint),
};
m_CustomArea.Extensions.Add(new IdentifierExtension("BJ"));
CentralBodySurfaceRegion m_region = new CentralBodySurfaceRegion(m_earth, region);
m_CustomArea.Extensions.Add(m_region);
设置区域颜色
// Configure graphical display of the sensor dome.
m_CustomArea.Extensions.Add(new CentralBodySurfaceRegionGraphicsExtension(new CentralBodySurfaceRegionGraphics
{
/*Material = new StripeMaterialGraphics //交替颜色填充
{
EvenColor = Color.Blue,
OddColor = Color.White,
Repeat = 16.0,
},*/
Material = new SolidColorMaterialGraphics //交替纯色填充
{
Color = Color.Blue,
},
Outline = true,
OutlineColor = Color.White,
OutlineWidth = 2.0,
}));
实现效果
2.区域图片
区域不仅自定义区域也可以是图片
// load terrain data for Mount St. Helens.
string dataPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, AppDomain.CurrentDomain.RelativeSearchPath ?? "", "Data");
var terrain = new AGIProcessedDataTerrain(Path.Combine(dataPath, @"Terrain\StHelens.pdtt"));
// Calculate the surface position at the center of the terrain
double longitude = (terrain.BoundingExtent.WestLongitude + terrain.BoundingExtent.EastLongitude) / 2.0;
double latitude = (terrain.BoundingExtent.NorthLatitude + terrain.BoundingExtent.SouthLatitude) / 2.0;
Cartographic observerPosition = new Cartographic(longitude, latitude, terrain.GetHeight(longitude, latitude));
// Sample using 360 azimuth rays at 0.000275 degrees
const int numberOfAzimuthSteps = 360;
double stepSize = Trig.DegreesToRadians(0.000275);
const double maxSearchAngle = 0.025;
// Compute the mask.
var mask = TerrainAzimuthElevationMask.Compute(terrain, observerPosition, numberOfAzimuthSteps, stepSize, maxSearchAngle);
实现效果