1 /* 2 * This file is part of the "GKMap". 3 * GKMap project borrowed from GMap.NET (by radioman). 4 * 5 * Copyright (C) 2009-2018 by radioman (email@radioman.lt). 6 * This program is licensed under the FLAT EARTH License. 7 */ 8 9 using System.Globalization; 10 11 namespace GKMap 12 { 13 /// <summary> 14 /// the rect of coordinates 15 /// </summary> 16 public struct RectLatLng 17 { 18 public static readonly RectLatLng Empty = new RectLatLng(); 19 20 21 private double fLng; 22 private double fLat; 23 private double fWidthLng; 24 private double fHeightLat; 25 private bool fNotEmpty; 26 27 28 public PointLatLng LocationTopLeft 29 { 30 get { 31 return new PointLatLng(fLat, fLng); 32 } 33 set { 34 fLng = value.Lng; 35 fLat = value.Lat; 36 } 37 } 38 39 public PointLatLng LocationRightBottom 40 { 41 get { 42 PointLatLng ret = new PointLatLng(Lat, Lng); 43 ret.Offset(HeightLat, WidthLng); 44 return ret; 45 } 46 } 47 48 public SizeLatLng Size 49 { 50 get { 51 return new SizeLatLng(fHeightLat, fWidthLng); 52 } 53 set { 54 fWidthLng = value.WidthLng; 55 fHeightLat = value.HeightLat; 56 } 57 } 58 59 public double Lng 60 { 61 get { 62 return fLng; 63 } 64 set { 65 fLng = value; 66 } 67 } 68 69 public double Lat 70 { 71 get { 72 return fLat; 73 } 74 set { 75 fLat = value; 76 } 77 } 78 79 public double WidthLng 80 { 81 get { 82 return fWidthLng; 83 } 84 set { 85 fWidthLng = value; 86 } 87 } 88 89 public double HeightLat 90 { 91 get { 92 return fHeightLat; 93 } 94 set { 95 fHeightLat = value; 96 } 97 } 98 99 /// <summary> 100 /// returns true if coordinates wasn't assigned 101 /// </summary> 102 public bool IsEmpty 103 { 104 get { 105 return !fNotEmpty; 106 } 107 } 108 RectLatLngGKMap.RectLatLng109 public RectLatLng(double lat, double lng, double widthLng, double heightLat) 110 { 111 fLng = lng; 112 fLat = lat; 113 fWidthLng = widthLng; 114 fHeightLat = heightLat; 115 fNotEmpty = true; 116 } 117 FromLTRBGKMap.RectLatLng118 public static RectLatLng FromLTRB(double leftLng, double topLat, double rightLng, double bottomLat) 119 { 120 return new RectLatLng(topLat, leftLng, rightLng - leftLng, topLat - bottomLat); 121 } 122 EqualsGKMap.RectLatLng123 public override bool Equals(object obj) 124 { 125 if (!(obj is RectLatLng)) { 126 return false; 127 } 128 RectLatLng ef = (RectLatLng)obj; 129 return ((((ef.Lng == Lng) && (ef.Lat == Lat)) && (ef.WidthLng == WidthLng)) && (ef.HeightLat == HeightLat)); 130 } 131 operator ==GKMap.RectLatLng132 public static bool operator ==(RectLatLng left, RectLatLng right) 133 { 134 return ((((left.Lng == right.Lng) && (left.Lat == right.Lat)) && (left.WidthLng == right.WidthLng)) && (left.HeightLat == right.HeightLat)); 135 } 136 operator !=GKMap.RectLatLng137 public static bool operator !=(RectLatLng left, RectLatLng right) 138 { 139 return !(left == right); 140 } 141 ContainsGKMap.RectLatLng142 public bool Contains(double lat, double lng) 143 { 144 return ((((Lng <= lng) && (lng < (Lng + WidthLng))) && (Lat >= lat)) && (lat > (Lat - HeightLat))); 145 } 146 ContainsGKMap.RectLatLng147 public bool Contains(PointLatLng pt) 148 { 149 return Contains(pt.Lat, pt.Lng); 150 } 151 GetHashCodeGKMap.RectLatLng152 public override int GetHashCode() 153 { 154 if (IsEmpty) { 155 return 0; 156 } 157 return (((Lng.GetHashCode() ^ Lat.GetHashCode()) ^ WidthLng.GetHashCode()) ^ HeightLat.GetHashCode()); 158 } 159 ToStringGKMap.RectLatLng160 public override string ToString() 161 { 162 return ("{Lat=" + Lat.ToString(CultureInfo.CurrentCulture) + ",Lng=" + Lng.ToString(CultureInfo.CurrentCulture) + ",WidthLng=" + WidthLng.ToString(CultureInfo.CurrentCulture) + ",HeightLat=" + HeightLat.ToString(CultureInfo.CurrentCulture) + "}"); 163 } 164 } 165 } 166