Advertisement
Guest User

Untitled

a guest
Feb 14th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.18 KB | None | 0 0
  1. using GMap.NET;
  2. using GMap.NET.MapProviders;
  3. using GMap.NET.WindowsForms;
  4. using GMap.NET.WindowsForms.Markers;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Net;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows;
  13. using System.Windows.Controls;
  14. using System.Windows.Data;
  15. using System.Windows.Documents;
  16. using System.Windows.Input;
  17. using System.Windows.Media;
  18. using System.Windows.Media.Imaging;
  19. using System.Windows.Navigation;
  20. using System.Windows.Shapes;
  21. using System.Xml.Serialization;
  22.  
  23. namespace Zad2
  24. {
  25. /// <summary>
  26. /// Interaction logic for MainWindow.xaml
  27. /// </summary>
  28. public partial class MainWindow : Window
  29. {
  30. public MainWindow()
  31. {
  32. InitializeComponent();
  33. }
  34.  
  35.  
  36.  
  37.  
  38. private void MapLoad1(object sender, EventArgs e)
  39. {
  40. gmap.Overlays[3].IsVisibile = false;
  41.  
  42. }
  43. private void MapLoad2(object sender, EventArgs e)
  44. {
  45.  
  46. if (gmap.Overlays.Count > 0)
  47. {
  48. gmap.Overlays[3].IsVisibile = true;
  49.  
  50. }
  51. }
  52.  
  53. private void Node(object sender, EventArgs e)
  54. {
  55. if (gmap.Overlays.Count > 0)
  56. {
  57. gmap.Overlays[2].IsVisibile = true;
  58.  
  59. }
  60.  
  61. }
  62.  
  63. private void Node2(object sender, EventArgs e)
  64. {
  65. gmap.Overlays[2].IsVisibile = false;
  66.  
  67. }
  68.  
  69.  
  70. private void Lines(object sender, EventArgs e)
  71. {
  72.  
  73. if (gmap.Overlays.Count > 0)
  74. {
  75. gmap.Overlays[0].IsVisibile = true;
  76.  
  77. }
  78.  
  79.  
  80.  
  81. }
  82.  
  83. private void Lines2(object sender, EventArgs e)
  84. {
  85. gmap.Overlays[0].IsVisibile = false;
  86. }
  87.  
  88. private void Switches(object sender, EventArgs e)
  89. {
  90. if (gmap.Overlays.Count > 0)
  91. {
  92. gmap.Overlays[1].IsVisibile = true;
  93.  
  94. }
  95.  
  96. }
  97.  
  98. private void Switches2(object sender, EventArgs e)
  99. {
  100. gmap.Overlays[1].IsVisibile = false;
  101.  
  102. }
  103.  
  104.  
  105. private NetworkModel Deserialize(string path)
  106. {
  107. NetworkModel networkModel = null;
  108. XmlSerializer xmlSerializer = new XmlSerializer(typeof(NetworkModel));
  109.  
  110. try
  111. {
  112. StreamReader reader = new StreamReader(path);
  113. networkModel = (NetworkModel)xmlSerializer.Deserialize(reader);
  114. reader.Close();
  115. }
  116. catch (Exception e)
  117. {
  118. //error
  119. }
  120.  
  121. return networkModel;
  122. }
  123.  
  124.  
  125. public static void ToLatLon(double utmX, double utmY, int zoneUTM, out double latitude, out double longitude)
  126. {
  127. bool isNorthHemisphere = true;
  128.  
  129. var diflat = -0.00066286966871111111111111111111111111;
  130. var diflon = -0.0003868060578;
  131.  
  132. var zone = zoneUTM;
  133. var c_sa = 6378137.000000;
  134. var c_sb = 6356752.314245;
  135. var e2 = Math.Pow((Math.Pow(c_sa, 2) - Math.Pow(c_sb, 2)), 0.5) / c_sb;
  136. var e2cuadrada = Math.Pow(e2, 2);
  137. var c = Math.Pow(c_sa, 2) / c_sb;
  138. var x = utmX - 500000;
  139. var y = isNorthHemisphere ? utmY : utmY - 10000000;
  140.  
  141. var s = ((zone * 6.0) - 183.0);
  142. var lat = y / (c_sa * 0.9996);
  143. var v = (c / Math.Pow(1 + (e2cuadrada * Math.Pow(Math.Cos(lat), 2)), 0.5)) * 0.9996;
  144. var a = x / v;
  145. var a1 = Math.Sin(2 * lat);
  146. var a2 = a1 * Math.Pow((Math.Cos(lat)), 2);
  147. var j2 = lat + (a1 / 2.0);
  148. var j4 = ((3 * j2) + a2) / 4.0;
  149. var j6 = ((5 * j4) + Math.Pow(a2 * (Math.Cos(lat)), 2)) / 3.0;
  150. var alfa = (3.0 / 4.0) * e2cuadrada;
  151. var beta = (5.0 / 3.0) * Math.Pow(alfa, 2);
  152. var gama = (35.0 / 27.0) * Math.Pow(alfa, 3);
  153. var bm = 0.9996 * c * (lat - alfa * j2 + beta * j4 - gama * j6);
  154. var b = (y - bm) / v;
  155. var epsi = ((e2cuadrada * Math.Pow(a, 2)) / 2.0) * Math.Pow((Math.Cos(lat)), 2);
  156. var eps = a * (1 - (epsi / 3.0));
  157. var nab = (b * (1 - epsi)) + lat;
  158. var senoheps = (Math.Exp(eps) - Math.Exp(-eps)) / 2.0;
  159. var delt = Math.Atan(senoheps / (Math.Cos(nab)));
  160. var tao = Math.Atan(Math.Cos(delt) * Math.Tan(nab));
  161.  
  162. longitude = ((delt * (180.0 / Math.PI)) + s) + diflon;
  163. latitude = ((lat + (1 + e2cuadrada * Math.Pow(Math.Cos(lat), 2) - (3.0 / 2.0) * e2cuadrada * Math.Sin(lat) * Math.Cos(lat) * (tao - lat)) * (tao - lat)) * (180.0 / Math.PI)) + diflat;
  164. }
  165.  
  166. private void button_Click(object sender, RoutedEventArgs e)
  167. {
  168. string path = "C:/Users/e3106-2014/Desktop/Zad2/GMap/Geographic.xml";
  169.  
  170. NetworkModel networkModel = new NetworkModel();
  171. networkModel = Deserialize(path);
  172.  
  173. GMapProvider.WebProxy = WebRequest.GetSystemWebProxy();
  174. GMapProvider.WebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;
  175.  
  176. gmap.MapProvider = GMap.NET.MapProviders.GoogleMapProvider.Instance;
  177. GMap.NET.GMaps.Instance.Mode = GMap.NET.AccessMode.ServerOnly;
  178. gmap.SetPositionByKeywords("Novi Sad, Serbia");
  179. gmap.DragButton = System.Windows.Forms.MouseButtons.Left;
  180. gmap.ShowCenter = false;
  181.  
  182. double latitude;
  183. double longitude;
  184.  
  185.  
  186. /* lines */
  187. GMapOverlay linesOver = new GMapOverlay("lines");
  188. foreach (var item in networkModel.Lines)
  189. {
  190.  
  191. List<PointLatLng> points = new List<PointLatLng>();
  192. foreach (var item1 in item.Vertices)
  193. {
  194. ToLatLon((double)item1.X, (double)item1.Y, 34, out latitude, out longitude);
  195. points.Add(new PointLatLng(latitude, longitude));
  196. }
  197. GMapRoute route = new GMapRoute(points, item.Name);
  198. route.Stroke = new System.Drawing.Pen(System.Drawing.Color.RoyalBlue, 2);
  199. linesOver.Routes.Add(route);
  200. }
  201. gmap.Overlays.Add(linesOver);
  202.  
  203. GMapOverlay switchesOver = new GMapOverlay("switches");
  204. /* switches */
  205. foreach (var item in networkModel.Switches)
  206. {
  207. ToLatLon((double)item.X, (double)item.Y, 34, out latitude, out longitude);
  208.  
  209. GMapMarker marker = new GMarkerGoogle(
  210. new PointLatLng(latitude, longitude),
  211. GMarkerGoogleType.red_small);
  212. marker.ToolTipText = "Switch: " + item.Name;
  213. switchesOver.Markers.Add(marker);
  214.  
  215. }
  216. gmap.Overlays.Add(switchesOver);
  217.  
  218. GMapOverlay nodeOver = new GMapOverlay("nodes");
  219. /* nodes */
  220. foreach (var item in networkModel.Nodes)
  221. {
  222. ToLatLon((double)item.X, (double)item.Y, 34, out latitude, out longitude);
  223.  
  224. GMapMarker marker = new GMarkerGoogle(
  225. new PointLatLng(latitude, longitude),
  226. GMarkerGoogleType.green_small);
  227. marker.ToolTipText = "Node: " + item.Name;
  228. nodeOver.Markers.Add(marker);
  229. }
  230. gmap.Overlays.Add(nodeOver);
  231.  
  232.  
  233.  
  234.  
  235.  
  236. /* substations*/
  237. GMapOverlay substationsOver = new GMapOverlay("substations");
  238. foreach (var item in networkModel.Substations)
  239. {
  240. ToLatLon((double)item.X, (double)item.Y, 34, out latitude, out longitude);
  241.  
  242. GMapMarker marker = new GMarkerGoogle(
  243. new PointLatLng(latitude, longitude),
  244. GMarkerGoogleType.blue_pushpin);
  245. marker.ToolTipText = "Substation: " + item.Name;
  246.  
  247. substationsOver.Markers.Add(marker);
  248. }
  249. gmap.Overlays.Add(substationsOver);
  250.  
  251. }
  252. }
  253. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement