void ShowRouts() { List <PointLatLng> mPointsList1 = new List <PointLatLng>(); mPointsList1 = new List <PointLatLng>(); //mPointsList1.Add(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin, CMBaseGeoPoint.ShowDegreeFraction(61, 02, 18), 14010).Coordinates); mPointsList1.Add(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.BackTrueCourse, 17512.5)); mPointsList1.Add(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.BackTrueCourse, 14010)); mPointsList1.Add(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.BackTrueCourse, 10507.5)); mPointsList1.Add(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.BackTrueCourse, 7005)); mPointsList1.Add(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.BackTrueCourse, 3502.5)); mPointsList1.Add(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.BackTrueCourse, 1701.25)); mPointsList1.Add(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.BackTrueCourse, 800.75)); mPointsList1.Add(CMGeoBase.GetCoordinate(APInf.CRW.RunwayEnd.Coordinates, APInf.CRW.RunwayEnd.BackTrueCourse, 800.75)); mPointsList1.Add(CMGeoBase.GetCoordinate(APInf.CRW.RunwayEnd.Coordinates, APInf.CRW.RunwayEnd.BackTrueCourse, 1701.25)); mPointsList1.Add(CMGeoBase.GetCoordinate(APInf.CRW.RunwayEnd.Coordinates, APInf.CRW.RunwayEnd.BackTrueCourse, 3502.5)); mPointsList1.Add(CMGeoBase.GetCoordinate(APInf.CRW.RunwayEnd.Coordinates, APInf.CRW.RunwayEnd.BackTrueCourse, 7005)); mPointsList1.Add(CMGeoBase.GetCoordinate(APInf.CRW.RunwayEnd.Coordinates, APInf.CRW.RunwayEnd.BackTrueCourse, 10507.5)); mPointsList1.Add(CMGeoBase.GetCoordinate(APInf.CRW.RunwayEnd.Coordinates, APInf.CRW.RunwayEnd.BackTrueCourse, 14010)); mPointsList1.Add(CMGeoBase.GetCoordinate(APInf.CRW.RunwayEnd.Coordinates, APInf.CRW.RunwayEnd.BackTrueCourse, 17512.5)); //mPointsList1.Add(CMGeoBase.GetCoordinate(APInf.CRW.RunwayEnd, CMBaseGeoPoint.ShowDegreeFraction(61, 1, 30), 14010).Coordinates); //mPointsList1.Add(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin, CMBaseGeoPoint.ShowDegreeFraction(241, 02, 18), 14010).Coordinates); //ShowPolygonPoints(mPointsList1); polyOverlay.Routes.Add(new GMapRoute(mPointsList1, "2")); mPointsList1 = new List <PointLatLng>(); mPointsList1.Add(APInf.CRW.RunwayBegin.Coordinates); mPointsList1.Add(APInf.CRW.RunwayEnd.Coordinates); polyOverlay.Routes.Add(new GMapRoute(mPointsList1, "4")); }
void FillPointSpec(CMCheckedGeoPoint point) { point.Angle = Math.Round(CMGeoBase.GetAsimut(APInf.KTA, point, 0), 2); point.Distance = Math.Round(CMGeoBase.GetDistance(APInf.KTA, point), 2); point.HeightAboveRunwayBegin = point.Height - APInf.CRW.RunwayBegin.Height; point.Offset = OffsetRunwayBegin(point); }
public CMCGPCheckedResult CheckSurface(CMCheckedGeoPoint Input, double X) { CMCGPCheckedResult CheckedResult = new CMCGPCheckedResult(); CheckedResult.SurfaceName = "Поверхность прерванной посадки"; CheckedResult.PointHeight = Input.Height; if (CMGeoBase.IsPointInPolygon(mPointsList, Input.Coordinates)) { PointLatLng temp = CMGeoBase.OtstupVPP(Offset, APInf.CRW.TakeoffSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates); GeoCoordinate sCoord = new GeoCoordinate(temp.Lat, temp.Lng); GeoCoordinate eCoord = new GeoCoordinate(Input.Lat, Input.Lng); double length = sCoord.GetDistanceTo(eCoord); double angle = CMGeoBase.Azimut(temp, Input.Coordinates) - CMGeoBase.Azimut(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayEnd.Coordinates); length *= Math.Cos(Math.Abs(angle) * CMGeoBase.DegToRad); CheckedResult.SurfaceHeight = HeightAngle * (Math.Abs(X) - 1800) + APInf.AirfieldHeight; if (CheckedResult.SurfaceHeight <= Input.Height) { CheckedResult.IsObstacle = true; CheckedResult.Exceeding = Input.Height - CheckedResult.SurfaceHeight; } CheckedResult.ResultText = string.Format("Попадает в область прерванной посадки и {0} превышает допустимую высоту{1}", (CheckedResult.IsObstacle == true ? "" : " не "), (CheckedResult.IsObstacle == true ? string.Format(" на {0} / {1}", CheckedResult.Exceeding, CheckedResult.SurfaceHeight) : "")); } else { Visible = false; } return(CheckedResult); }
/// <summary> /// Проверка конической поверхности /// </summary> /// <param name="Input"></param> public CMCGPCheckedResult CheckConeSurface__(CMCheckedGeoPoint Input, CMAPSurfaceA SurfaceA) { double distance = CMGeoBase.GetDistance(Input, CMGeoBase.GetZone(Input, Radius, APInf.CRW.TakeoffSurfaceDirection, APInf.CRW.RunwayBegin, APInf.CRW.RunwayEnd), APInf.CRW.RunwayBegin, APInf.CRW.RunwayEnd); double height = HeigthPlaneB(distance, SurfaceA); bool IsObstacle = false; double dif = 0; CMCGPCheckedResult CheckedResult = new CMCGPCheckedResult(); CheckedResult.SurfaceName = "Коническая поверхность"; ////если попал, считаем высоту height += APInf.AirfieldHeight; if (distance <= Radius) { if (distance > SurfaceA.Radius) { if (height <= Input.Height) { IsObstacle = true; dif = Input.Height - height; } CheckedResult.ResultText = string.Format("Попадает в коническую поверхность и {0} превышает допустимую высоту {1} ", ((IsObstacle == true) ? "" : "не"), ((IsObstacle == true) ? (string.Format(" на {0} / {1}", Math.Round((Input.Height - height), 2), Math.Round(height, 2))) : "")); } } CheckedResult.IsObstacle = IsObstacle; CheckedResult.PointHeight = Input.Height; CheckedResult.SurfaceHeight = height; CheckedResult.Exceeding = dif; return(CheckedResult); }
public CMCGPCheckedResult CheckSurface(CMCheckedGeoPoint Input, CMAPSurfaceB SurfaceB) { CMCGPCheckedResult CheckedResult = new CMCGPCheckedResult(); CheckedResult.SurfaceName = "Горизонтальная поверхность"; bool IsObstacle = false; double dif = 0; double height = Height + APInf.AirfieldHeight; if (CMGeoBase.IsPointInPolygon(mPointsList, Input.Coordinates)) { if (height <= Input.Height) { IsObstacle = true; dif = Input.Height - height; } CheckedResult.ResultText = string.Format("Попадает во внутреннюю горизонтальную поверхность и {0} превышает допустимую высоту{1}", (IsObstacle == true ? "" : " не "), (IsObstacle == true ? string.Format(" на {0} / {1}", dif, height) : "")); } CheckedResult.IsObstacle = IsObstacle; CheckedResult.PointHeight = Input.Height; CheckedResult.SurfaceHeight = height; CheckedResult.Exceeding = dif; return(CheckedResult); }
public CMCGPCheckedResult CheckSurface(CMCheckedGeoPoint Input, CMBAPSurfaceNoise APSurfaceNoiseInner) { double height = 100; bool IsObstacle = false; double dif = 0; CMCGPCheckedResult CheckedResult = new CMCGPCheckedResult(); CheckedResult.SurfaceName = SurfaceName;//string.Format("Поверхность R-{0}", Radius); height += APInf.AirfieldHeight; if (CMGeoBase.IsPointInPolygon(mPointsList, Input.Coordinates)) { if (CMGeoBase.IsPointInPolygon(APSurfaceNoiseInner.PointsList, Input.Coordinates) == false) { CheckedResult.ResultText = string.Format("Попадает в {0}", SurfaceName); } } CheckedResult.IsObstacle = IsObstacle; CheckedResult.PointHeight = Input.Height; CheckedResult.SurfaceHeight = height; CheckedResult.Exceeding = dif; return(CheckedResult); }
public void LoadPointsList()//CMAirPortInfo APInf) { mPointsList.Clear(); PointLatLng _n = CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.TrueCourse, -Offset); //mPointsList.Add(_n); mPointsList.Add(CMGeoBase.GetCoordinate(_n, APInf.CRW.RunwayBegin.TrueCourse + 90, Width / 2)); mPointsList.Add(CMGeoBase.GetCoordinate(_n, APInf.CRW.RunwayBegin.TrueCourse - 90, Width / 2)); PointLatLng _m1 = CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.TrueCourse, (Offset + Length1) * -1); mPointsList.Add(CMGeoBase.GetCoordinate(_m1, APInf.CRW.RunwayBegin.TrueCourse - 90, Width / 2 + WidthAngle * (Length1))); PointLatLng _m2 = CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.TrueCourse, (Offset + Length1 + Length2) * -1); mPointsList.Add(CMGeoBase.GetCoordinate(_m2, APInf.CRW.RunwayBegin.TrueCourse - 90, Width / 2 + WidthAngle * (Length1 + Length2))); PointLatLng _m3 = CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.TrueCourse, (Offset + Length1 + Length2 + Length3) * -1); mPointsList.Add(CMGeoBase.GetCoordinate(_m3, APInf.CRW.RunwayBegin.TrueCourse - 90, Width / 2 + WidthAngle * (Length1 + Length2 + Length3))); mPointsList.Add(CMGeoBase.GetCoordinate(_m3, APInf.CRW.RunwayBegin.TrueCourse + 90, Width / 2 + WidthAngle * (Length1 + Length2 + Length3))); mPointsList.Add(CMGeoBase.GetCoordinate(_m2, APInf.CRW.RunwayBegin.TrueCourse + 90, Width / 2 + WidthAngle * (Length1 + Length2))); mPointsList.Add(CMGeoBase.GetCoordinate(_m1, APInf.CRW.RunwayBegin.TrueCourse + 90, Width / 2 + WidthAngle * (Length1))); }
public CMCGPCheckedResult CheckSurface(CMCheckedGeoPoint Input) { CMCGPCheckedResult CheckedResult = new CMCGPCheckedResult(); CheckedResult.SurfaceName = SurfaceName;//"Поверхность взлета"; CheckedResult.PointHeight = Input.Height; if (CMGeoBase.IsPointInPolygon(PointsList, Input.Coordinates)) { Visible = true; double Angle = Math.Abs(CMGeoBase.Azimut(APInf.CRW.RunwayEnd.Coordinates, Input.Coordinates) - CMGeoBase.Azimut(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayEnd.Coordinates)); double _length = CMGeoBase.GetDistance(Input.Coordinates, APInf.CRW.RunwayEnd.Coordinates) * Math.Cos(Angle * CMGeoBase.DegToRad); CheckedResult.SurfaceHeight = _length * HeightAngle; CheckedResult.SurfaceHeight += APInf.CRW.RunwayBegin.Height; if (CheckedResult.SurfaceHeight <= Input.Height) { CheckedResult.IsObstacle = true; CheckedResult.Exceeding = Input.Height - CheckedResult.SurfaceHeight; } CheckedResult.ResultText = string.Format("Попадает в {0} и {1} превышает допустимую высоту{2}", SurfaceName, (CheckedResult.IsObstacle == true ? "" : " не "), (CheckedResult.IsObstacle == true ? string.Format(" на {0} / {1}", CheckedResult.Exceeding, CheckedResult.SurfaceHeight) : "")); } else { Visible = false; } return(CheckedResult); }
public CMCGPCheckedResult CheckSurface(CMCheckedGeoPoint Input, CMAPSurfaceB SurfaceB) { double height = Height + APInf.AirfieldHeight; bool IsObstacle = false; double dif = 0; CMCGPCheckedResult CheckedResult = new CMCGPCheckedResult(); CheckedResult.SurfaceName = SurfaceName; if (CMGeoBase.IsPointInPolygon(mPointsList, Input.Coordinates)) { if (CMGeoBase.IsPointInPolygon(SurfaceB.PointsList, Input.Coordinates) == false) { CheckedResult.ResultText = string.Format("Попадает в {0}", SurfaceName); if (Height > 0) { if (height <= Input.Height) { IsObstacle = true; dif = Input.Height - height; } CheckedResult.ResultText += string.Format(" и {0} превышает допустимую высоту {1} ", ((IsObstacle == true) ? "" : "не"), ((IsObstacle == true) ? (string.Format(" на {0} / {1}", Math.Round((Input.Height - height), 2), Math.Round(height, 2))) : "")); } } } CheckedResult.IsObstacle = IsObstacle; CheckedResult.PointHeight = Input.Height; CheckedResult.SurfaceHeight = height; CheckedResult.Exceeding = dif; return(CheckedResult); }
public CMCGPCheckedResult CheckSurface(CMCheckedGeoPoint Input) { CMCGPCheckedResult CheckedResult = new CMCGPCheckedResult(); CheckedResult.SurfaceName = "Переходная поверхность"; CheckedResult.PointHeight = Input.Height; if (CMGeoBase.IsPointInPolygon(mPointsList, Input.Coordinates) || CMGeoBase.IsPointInPolygon(mPointsList2, Input.Coordinates)) { CheckedResult.SurfaceHeight = HeightAngle * (Math.Abs(Input.Offset.Lng) - 150) + APInf.AirfieldHeight; if (CheckedResult.SurfaceHeight <= Input.Height) { CheckedResult.IsObstacle = true; CheckedResult.Exceeding = Input.Height - CheckedResult.SurfaceHeight; } CheckedResult.ResultText = string.Format("Попадание в переходную плоскость и {0} превышает допустимую высоту{1}", (CheckedResult.IsObstacle == true ? "" : " не "), (CheckedResult.IsObstacle == true ? string.Format(" на {0} / {1}", CheckedResult.Exceeding, CheckedResult.SurfaceHeight) : "")); } else { Visible = false; } return(CheckedResult); }
/// <summary> /// Проверка конической поверхности /// </summary> /// <param name="Input"></param> public CMCGPCheckedResult CheckSurface(CMCheckedGeoPoint Input, CMAPSurfaceC SurfaceC) { double height = 100; bool IsObstacle = false; double dif = 0; CMCGPCheckedResult CheckedResult = new CMCGPCheckedResult(); CheckedResult.SurfaceName = "Граница района аэродрома"; height += APInf.AirfieldHeight; if (CMGeoBase.IsPointInPolygon(mPointsList, Input.Coordinates)) { if (CMGeoBase.IsPointInPolygon(SurfaceC.PointsList, Input.Coordinates) == false) { CheckedResult.ResultText = "Попадает в границы района аэродрома"; } } CheckedResult.IsObstacle = IsObstacle; CheckedResult.PointHeight = Input.Height; CheckedResult.SurfaceHeight = height; CheckedResult.Exceeding = dif; return(CheckedResult); }
void DrawEllipse_() { double a = 5947.81; double b = 726.22; double cx = 0; double cy = 0; double Ugol = 60; double X = 0; double Y = 0; List <PointF> PFlist = new List <PointF>(); List <PointLatLng> mPointsList = new List <PointLatLng>(); for (int fi = 0; fi < 360; fi += 5)//шаг формирования точек 5 градусов { //PointF p = new PointF(); X = a * (float)Math.Cos(fi * CMGeoBase.DegToRad); Y = b * (float)Math.Sin(fi * CMGeoBase.DegToRad); double tempX = X; double tempY = Y; X = cx + tempX * Math.Cos(-Ugol * CMGeoBase.DegToRad) + tempY * Math.Sin(-Ugol * CMGeoBase.DegToRad); Y = cy - (tempX * (-Math.Sin(-Ugol * CMGeoBase.DegToRad)) + tempY * Math.Cos(-Ugol * CMGeoBase.DegToRad)); PFlist.Add(new PointF((float)(X), (float)(Y))); mPointsList.Add(CMGeoBase.GetCoordinate(APInf.KTA, fi, (Math.Sqrt(Math.Pow(X, 2) + Math.Pow(Y, 2)))).Coordinates); } ShowPolygonPoints(mPointsList); }
public CMCGPCheckedResult CheckSurface(CMCheckedGeoPoint Input) { CMCGPCheckedResult CheckedResult = new CMCGPCheckedResult(); CheckedResult.SurfaceName = "Полоса воздушных подходов"; bool IsObstacle = false; bool Forward = false; double dif = 0; if (CMGeoBase.IsPointInPolygon(mPointsList, Input.Coordinates)) { IsObstacle = true; Forward = true; } if (CMGeoBase.IsPointInPolygon(mPointsList2, Input.Coordinates)) { IsObstacle = true; Forward = false; } if (IsObstacle) { CheckedResult.ResultText = string.Format("Попадает в {0}полосу воздушных подходов", (Forward == true ? "" : " обратную ")); } CheckedResult.PointHeight = Input.Height; CheckedResult.Exceeding = dif; return(CheckedResult); }
public CMCGPCheckedResult CheckSurface(CMCheckedGeoPoint Input) { CMCGPCheckedResult CheckedResult = new CMCGPCheckedResult(); CheckedResult.SurfaceName = "Внутренняя поверхность захода на посадку"; CheckedResult.PointHeight = Input.Height; if (CMGeoBase.IsPointInPolygon(mPointsList, Input.Coordinates)) { double length = CMGeoBase.GetDistance(Input.Coordinates, APInf.CRW.RunwayBegin.Coordinates) - Offset; double angle = Math.Abs(CMGeoBase.Azimut(CMGeoBase.OtstupVPP(Offset, APInf.CRW.TransitionSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates), Input.Coordinates) - CMGeoBase.Azimut(APInf.CRW.RunwayEnd.Coordinates, APInf.CRW.RunwayBegin.Coordinates)); length *= Math.Cos(angle * CMGeoBase.DegToRad); CheckedResult.SurfaceHeight = length * HeightAngle; // CheckedResult.SurfaceHeight += APInf.CRW.RunwayBegin.Height; // //TextResult.Text += CheckedResult.SurfaceHeight <= Input.Height ? "Попадает во внутренюю поверхность захода на посадку и превышает высоту на :" + (Input.Height - height).ToString() + " / " + height.ToString() + Environment.NewLine : " Попадает во внутренюю поверхность захода на посадку и не превышает высоту" + Environment.NewLine; if (CheckedResult.SurfaceHeight <= Input.Height) { CheckedResult.IsObstacle = true; CheckedResult.Exceeding = Input.Height - CheckedResult.SurfaceHeight; } CheckedResult.ResultText = string.Format("Попадает во внутренюю поверхность захода на посадку и {0} превышает высоту{1}", (CheckedResult.IsObstacle ? "" : " не "), (CheckedResult.IsObstacle ? string.Format(" на {0} / {1}", CheckedResult.Exceeding, CheckedResult.SurfaceHeight) : "")); } else { Visible = false; } return(CheckedResult); }
/// <summary> /// Проверка на вхождение точки во внутреннюю горизонтальную поверхность /// </summary> /// <param name="Input">Проверяемая точка</param> public CMCGPCheckedResult CheckHorizSurface___(CMCheckedGeoPoint Input, CMAPSurfaceB SurfaceB) { double distance = CMGeoBase.GetDistance(Input, CMGeoBase.GetZone(Input, SurfaceB.Radius, APInf.CRW.TakeoffSurfaceDirection, APInf.CRW.RunwayBegin, APInf.CRW.RunwayEnd), APInf.CRW.RunwayBegin, APInf.CRW.RunwayEnd); double height = Height + APInf.AirfieldHeight; //HeightA + APInf.AirfieldHeight; //абсолютная высота внутренней горизонтальной поверхности bool IsObstacle = false; double dif = 0; CMCGPCheckedResult CheckedResult = new CMCGPCheckedResult(); CheckedResult.SurfaceName = "Горизонтальная поверхность"; if (distance <= Radius) { if (height <= Input.Height) { IsObstacle = true; dif = Input.Height - height; } CheckedResult.ResultText = string.Format("Попадает во внутреннюю горизонтальную поверхность и {0} превышает допустимую высоту{1}", (IsObstacle == true ? "" : " не "), (IsObstacle == true ? string.Format(" на {0} / {1}", dif, height) : "")); } CheckedResult.IsObstacle = IsObstacle; CheckedResult.PointHeight = Input.Height; CheckedResult.SurfaceHeight = height; CheckedResult.Exceeding = dif; return(CheckedResult); }
void CalcGeoPoint() { if (mCheckedGeoPoint != null) { CheckedGeoPoint.Coordinates = CMGeoBase.GetCoordinate(mAPInf.KTA.Coordinates, (double)nudAzimut.Value, (double)nudDistance.Value); LoadData1(); } }
public void LoadPointsListO() { mPointsList.Clear(); for (int i = 0; i < 360; i++) { mPointsList.Add(CMGeoBase.GetCoordinate(APInf.KTA, i, Radius).Coordinates); } }
public void LoadPointsList_()//CMAirPortInfo APInf) { mPointsList.Clear(); //красная трапеция рядом с зеленой mPointsList.Add(CMGeoBase.OtstupVPP(Width / 2, 1, CMGeoBase.OtstupVPP(Offset, APInf.CRW.TakeoffSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); mPointsList.Add(CMGeoBase.OtstupVPP(Width / 2 + Height / HeightAngle * WidthAngle, 1, CMGeoBase.OtstupVPP(Offset + Height / HeightAngle, APInf.CRW.TakeoffSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); mPointsList.Add(CMGeoBase.OtstupVPP(Width / 2 + Height / HeightAngle * WidthAngle, 3, CMGeoBase.OtstupVPP(Offset + Height / HeightAngle, APInf.CRW.TakeoffSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); mPointsList.Add(CMGeoBase.OtstupVPP(Width / 2, 3, CMGeoBase.OtstupVPP(Offset, APInf.CRW.TakeoffSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); }
public void LoadPointsList_() { mPointsList.Clear(); mPointsList.Add(CMGeoBase.OtstupVPP(Width / 2, 1, CMGeoBase.OtstupVPP(Offset, APInf.CRW.TransitionSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); mPointsList.Add(CMGeoBase.OtstupVPP(Width / 2, 3, CMGeoBase.OtstupVPP(Offset, APInf.CRW.TransitionSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); mPointsList.Add(CMGeoBase.OtstupVPP(Width / 2, 3, CMGeoBase.OtstupVPP(Offset + Length, APInf.CRW.TransitionSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); mPointsList.Add(CMGeoBase.OtstupVPP(Width / 2, 1, CMGeoBase.OtstupVPP(Offset + Length, APInf.CRW.TransitionSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); }
public void LoadPointsList() { mPointsList.Clear(); mPointsList.Add(CMGeoBase.GetCoordinate(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.TrueCourse, -Offset), APInf.CRW.RunwayBegin.TrueCourse + 90, Width / 2)); mPointsList.Add(CMGeoBase.GetCoordinate(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.TrueCourse, -Offset), APInf.CRW.RunwayBegin.TrueCourse - 90, Width / 2)); mPointsList.Add(CMGeoBase.GetCoordinate(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.TrueCourse, -(Offset + Length)), APInf.CRW.RunwayBegin.TrueCourse - 90, Width / 2)); mPointsList.Add(CMGeoBase.GetCoordinate(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.TrueCourse, -(Offset + Length)), APInf.CRW.RunwayBegin.TrueCourse + 90, Width / 2)); }
public void LoadPointsList()//CMAirPortInfo APInf) { mPointsList.Clear(); //красная трапеция рядом с зеленой mPointsList.Add(CMGeoBase.GetCoordinate(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.TrueCourse, Offset), APInf.CRW.RunwayBegin.TrueCourse + 90, Width / 2)); mPointsList.Add(CMGeoBase.GetCoordinate(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.TrueCourse, Offset + Height / HeightAngle), APInf.CRW.RunwayBegin.TrueCourse + 90, Width / 2 + Height / HeightAngle * WidthAngle)); mPointsList.Add(CMGeoBase.GetCoordinate(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.TrueCourse, Offset + Height / HeightAngle), APInf.CRW.RunwayBegin.TrueCourse - 90, Width / 2 + Height / HeightAngle * WidthAngle)); mPointsList.Add(CMGeoBase.GetCoordinate(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.TrueCourse, Offset), APInf.CRW.RunwayBegin.TrueCourse - 90, Width / 2)); }
public void LoadPointsList_(CMInnerApproachSurfaceData InnerApproachSurface, CMCancelledApproachSurfaceData CancelledApproachSurface) { mPointsList.Clear(); mPointsList.Add(CMGeoBase.OtstupVPP(Width / 2 + 42 / HeightAngle, 1, CMGeoBase.OtstupVPP(InnerApproachSurface.Offset + InnerApproachSurface.Length, APInf.CRW.TransitionSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); //1 mPointsList.Add(CMGeoBase.OtstupVPP(Height / HeightAngle + Width / 2, 1, CMGeoBase.OtstupVPP(InnerApproachSurface.Offset, APInf.CRW.TransitionSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); //2 mPointsList.Add(CMGeoBase.OtstupVPP(Height / HeightAngle + Width / 2, 1, CMGeoBase.OtstupVPP(CancelledApproachSurface.Offset, APInf.CRW.TakeoffSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); //3 mPointsList.Add(CMGeoBase.OtstupVPP(Width / 2 + CancelledApproachSurface.Height / CancelledApproachSurface.HeightAngle * CancelledApproachSurface.WidthAngle, 1, CMGeoBase.OtstupVPP(3600, APInf.CRW.TakeoffSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); //4 mPointsList.Add(CMGeoBase.OtstupVPP(Width / 2 + CancelledApproachSurface.Height / CancelledApproachSurface.HeightAngle * CancelledApproachSurface.WidthAngle, 3, CMGeoBase.OtstupVPP(3600, APInf.CRW.TakeoffSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); mPointsList.Add(CMGeoBase.OtstupVPP(Height / HeightAngle + Width / 2, 3, CMGeoBase.OtstupVPP(CancelledApproachSurface.Offset, APInf.CRW.TakeoffSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); mPointsList.Add(CMGeoBase.OtstupVPP(Height / HeightAngle + Width / 2, 3, CMGeoBase.OtstupVPP(InnerApproachSurface.Offset, APInf.CRW.TransitionSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); mPointsList.Add(CMGeoBase.OtstupVPP(Width / 2 + 42 / HeightAngle, 3, CMGeoBase.OtstupVPP(InnerApproachSurface.Offset + InnerApproachSurface.Length, APInf.CRW.TransitionSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); }
public void LoadPointsList() { mPointsList.Clear(); mPointsList.Add(CMGeoBase.GetCoordinate(APInf.KTA, APInf.CRW.RunwayThreshold1.TrueCourse + 180 + AzimutP, Radius).Coordinates); mPointsList.Add(CMGeoBase.GetCoordinate(APInf.KTA, APInf.CRW.RunwayThreshold1.TrueCourse - AzimutP, Radius).Coordinates); for (int i = (int)Math.Round(APInf.CRW.RunwayThreshold1.TrueCourse - AzimutP) + 1; i < (int)Math.Round(APInf.CRW.RunwayThreshold1.TrueCourse + 180 + AzimutP); i++) { mPointsList.Add(CMGeoBase.GetCoordinate(APInf.KTA, i, Radius).Coordinates); } }
public void LoadPointsList_()//CMAirPortInfo APInf) { mPointsList.Clear(); mPointsList.Add(CMGeoBase.OtstupVPP(Width / 2, 1, CMGeoBase.OtstupVPP(Offset, APInf.CRW.TransitionSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); mPointsList.Add(CMGeoBase.OtstupVPP(Width / 2, 3, CMGeoBase.OtstupVPP(Offset, APInf.CRW.TransitionSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); mPointsList.Add(CMGeoBase.OtstupVPP(Width / 2 + WidthAngle * (Length1), 3, CMGeoBase.OtstupVPP((Offset + Length1), APInf.CRW.TransitionSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); mPointsList.Add(CMGeoBase.OtstupVPP(Width / 2 + WidthAngle * (Length1 + Length2), 3, CMGeoBase.OtstupVPP((Offset + Length1 + Length2), APInf.CRW.TransitionSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); mPointsList.Add(CMGeoBase.OtstupVPP(Width / 2 + WidthAngle * (Length1 + Length2 + Length3), 3, CMGeoBase.OtstupVPP((Offset + Length1 + Length2 + Length3), APInf.CRW.TransitionSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); mPointsList.Add(CMGeoBase.OtstupVPP(Width / 2 + WidthAngle * (Length1 + Length2 + Length3), 1, CMGeoBase.OtstupVPP((Offset + Length1 + Length2 + Length3), APInf.CRW.TransitionSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); mPointsList.Add(CMGeoBase.OtstupVPP(Width / 2 + WidthAngle * (Length1 + Length2), 1, CMGeoBase.OtstupVPP((Offset + Length1 + Length2), APInf.CRW.TransitionSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); mPointsList.Add(CMGeoBase.OtstupVPP(Width / 2 + WidthAngle * (Length1), 1, CMGeoBase.OtstupVPP((Offset + Length1), APInf.CRW.TransitionSurfaceDirection, APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.GetCalcTrueCourse()), APInf.CRW.GetCalcTrueCourse())); }
public void LoadPointsList()//CMAirPortInfo APInf) { //зеленая область PointLatLng RunwayEndWithOffset = CMGeoBase.GetCoordinate(APInf.CRW.RunwayEnd.Coordinates, APInf.CRW.RunwayEnd.TrueCourse, -Offset); mPointsList.Clear(); mPointsList.Add(CMGeoBase.GetCoordinate(RunwayEndWithOffset, APInf.CRW.RunwayEnd.TrueCourse - 90, Width1 / 2)); mPointsList.Add(CMGeoBase.GetCoordinate(CMGeoBase.GetCoordinate(RunwayEndWithOffset, APInf.CRW.RunwayEnd.TrueCourse - 180, (Width2 - Width1) / 2 / WidthAngle), APInf.CRW.RunwayEnd.TrueCourse - 90, Width2 / 2)); mPointsList.Add(CMGeoBase.GetCoordinate(CMGeoBase.GetCoordinate(RunwayEndWithOffset, APInf.CRW.RunwayEnd.TrueCourse - 180, Length2), APInf.CRW.RunwayEnd.TrueCourse - 90, Width2 / 2)); mPointsList.Add(CMGeoBase.GetCoordinate(CMGeoBase.GetCoordinate(RunwayEndWithOffset, APInf.CRW.RunwayEnd.TrueCourse - 180, Length2), APInf.CRW.RunwayEnd.TrueCourse - 270, Width2 / 2)); mPointsList.Add(CMGeoBase.GetCoordinate(CMGeoBase.GetCoordinate(RunwayEndWithOffset, APInf.CRW.RunwayEnd.TrueCourse - 180, (Width2 - Width1) / 2 / WidthAngle), APInf.CRW.RunwayEnd.TrueCourse - 270, Width2 / 2)); mPointsList.Add(CMGeoBase.GetCoordinate(RunwayEndWithOffset, APInf.CRW.RunwayEnd.TrueCourse + 90, Width1 / 2)); }
public void LoadPointsList() { mPointsList.Clear(); for (double fi = 0; fi < 360; fi += 1) { double distance = Math.Sqrt(Math.Pow((RadiusA * Math.Cos((fi * CMGeoBase.DegToRad))), 2) + Math.Pow((RadiusB * Math.Sin((fi * CMGeoBase.DegToRad))), 2)); double Fi4Ellipse = GetFi4Ellipse(fi, RadiusA, RadiusB); //TextResult.Text += string.Format("< {0} << {1} d {2}", fi, Fi4Ellipse, distance) + " \r\n"; ; mPointsList.Add(CMGeoBase.GetCoordinate(APInf.KTA, Fi4Ellipse, distance).Coordinates); } }
public CMCGPCheckedResult CheckSurface(CMCheckedGeoPoint Input) { CMCGPCheckedResult CheckedResult = new CMCGPCheckedResult(); CheckedResult.SurfaceName = "Поверхность захода на посадку"; CheckedResult.PointHeight = Input.Height; if (CMGeoBase.IsPointInPolygon(PointsList, Input.Coordinates)) { Visible = true; double angle = Math.Abs(CMGeoBase.Azimut(APInf.CRW.RunwayBegin.Coordinates, Input.Coordinates) - CMGeoBase.Azimut(APInf.CRW.RunwayEnd.Coordinates, APInf.CRW.RunwayBegin.Coordinates)); double length = CMGeoBase.GetDistance(Input.Coordinates, APInf.CRW.RunwayBegin.Coordinates) * Math.Cos(angle * CMGeoBase.DegToRad); if (length <= Length1) { CheckedResult.SurfaceHeight = (length - Offset) * HeightAngle1; } else if (length > Length1 && length <= (Length1 + Length2)) { CheckedResult.SurfaceHeight = (length - (Length1 + Offset)) * HeightAngle2 + Length1 * HeightAngle1; } else { CheckedResult.SurfaceHeight = Length2 * HeightAngle2 + Length1 * HeightAngle1; } CheckedResult.SurfaceHeight += APInf.CRW.RunwayBegin.Height;; if (CheckedResult.SurfaceHeight <= Input.Height) { CheckedResult.IsObstacle = true; CheckedResult.Exceeding = Input.Height - CheckedResult.SurfaceHeight; } //TextResult.Text += height <= DataStorage.Height ? "Попадает в область захода на посадку и превышает допустимую высоту на " // + (DataStorage.Height - height).ToString() + " / " + height.ToString() + Environment.NewLine : "Попадает в область захода на посадку и не превышает допустимую высоту" + Environment.NewLine; CheckedResult.ResultText = string.Format("Попадает в область захода на посадку и {0} превышает допустимую высоту{1}", (CheckedResult.IsObstacle == true ? "" : " не "), (CheckedResult.IsObstacle == true ? string.Format(" на {0} / {1}", CheckedResult.Exceeding, CheckedResult.SurfaceHeight) : "")); // CheckedResult.ResultText = string.Format("Попадает во внутреннюю горизонтальную поверхность и {0} превышает допустимую высоту{1}", (IsObstacle == true ? "" : " не "), (IsObstacle == true ? string.Format(" на {0} / {1}", dif, height) : "")); } else { Visible = false; } return(CheckedResult); }
PointLatLng OffsetRunwayBegin(CMGeoPoint point) { PointLatLng v1 = CMGeoBase.Mercator(point.Coordinates); PointLatLng v2 = CMGeoBase.Mercator(RunwayBegin); double AzimutP1 = CMGeoBase.GetAsimut(APInf.CRW.RunwayBegin, point); double AzimutP2 = CMGeoBase.GetAsimut(APInf.CRW.RunwayEnd, APInf.CRW.RunwayBegin); double Angle = Math.Abs(AzimutP1 - APInf.CRW.RunwayBegin.BackTrueCourse); double K = 1; if (AzimutP2 >= 0 && AzimutP2 <= 180) { if (AzimutP1 >= AzimutP2 && AzimutP1 <= (AzimutP2 + 180)) { K = -1; } else { K = 1; } } else { if (AzimutP1 <= AzimutP2 && AzimutP1 >= (AzimutP2 - 180)) { K = 1; } else { K = -1; } } double Latitude = 0; //(v1.Lat - v2.Lat) * Math.Cos(Angle * DegToRad); double Longtitude = 0; //(v1.Lng - v2.Lng) * Math.Cos(Angle * DegToRad); double distance = CMGeoBase.GetDistance(APInf.CRW.RunwayBegin, point); double x = distance * Math.Cos(Angle * CMGeoBase.DegToRad); double y = Math.Abs((distance * Math.Sin(Angle * CMGeoBase.DegToRad))) * K; Latitude = Math.Round(y, 2); Longtitude = Math.Round(x, 2); PointLatLng v3 = new PointLatLng(Longtitude, Latitude); return(v3); }
public void LoadPointsList() { //зеленая область mPointsList.Clear(); for (int i = 90; i >= -90; i--) { mPointsList.Add(CMGeoBase.GetCoordinate(APInf.CRW.RunwayEnd, APInf.CRW.RunwayEnd.BackTrueCourse + i, Radius).Coordinates); } for (int i = 90; i >= -90; i--) { mPointsList.Add(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin, APInf.CRW.RunwayBegin.BackTrueCourse + i, Radius).Coordinates); } }
public void LoadPointsList()//CMAirPortInfo APInf) { mPointsList.Clear(); //красная трапеция рядом с зеленой mPointsList.Add(CMGeoBase.GetCoordinate(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.BackTrueCourse, Offset), APInf.CRW.RunwayBegin.BackTrueCourse + 90, Width / 2)); mPointsList.Add(CMGeoBase.GetCoordinate(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.BackTrueCourse, Offset + Length), APInf.CRW.RunwayBegin.BackTrueCourse + 90, (Width / 2) + WidthAngle * Length)); mPointsList.Add(CMGeoBase.GetCoordinate(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.BackTrueCourse, Offset + Length), APInf.CRW.RunwayBegin.BackTrueCourse - 90, (Width / 2) + WidthAngle * Length)); mPointsList.Add(CMGeoBase.GetCoordinate(CMGeoBase.GetCoordinate(APInf.CRW.RunwayBegin.Coordinates, APInf.CRW.RunwayBegin.BackTrueCourse, Offset), APInf.CRW.RunwayBegin.BackTrueCourse - 90, Width / 2)); mPointsList2.Clear(); //красная трапеция рядом с зеленой mPointsList2.Add(CMGeoBase.GetCoordinate(CMGeoBase.GetCoordinate(APInf.CRW.RunwayEnd.Coordinates, APInf.CRW.RunwayEnd.BackTrueCourse, Offset), APInf.CRW.RunwayEnd.BackTrueCourse + 90, Width / 2)); mPointsList2.Add(CMGeoBase.GetCoordinate(CMGeoBase.GetCoordinate(APInf.CRW.RunwayEnd.Coordinates, APInf.CRW.RunwayEnd.BackTrueCourse, Offset + Length), APInf.CRW.RunwayEnd.BackTrueCourse + 90, (Width / 2) + WidthAngle * Length)); mPointsList2.Add(CMGeoBase.GetCoordinate(CMGeoBase.GetCoordinate(APInf.CRW.RunwayEnd.Coordinates, APInf.CRW.RunwayEnd.BackTrueCourse, Offset + Length), APInf.CRW.RunwayEnd.BackTrueCourse - 90, (Width / 2) + WidthAngle * Length)); mPointsList2.Add(CMGeoBase.GetCoordinate(CMGeoBase.GetCoordinate(APInf.CRW.RunwayEnd.Coordinates, APInf.CRW.RunwayEnd.BackTrueCourse, Offset), APInf.CRW.RunwayEnd.BackTrueCourse - 90, Width / 2)); }