STK Components 二次开发- 区域

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);

实现效果

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值