/// <summary> /// Расчет растояния между родительской точкой и точкой назначения /// </summary> /// <param name="dest_node">Координаты родителя</param> /// <param name="dest_node">Координаты назначения</param> /// <returns>Возвращает длину в метрах</returns> public static double calculationCost(GrafNodeParam_nav source_node, GrafNodeParam_nav dest_node) { double return_value; double sin_delt_Longitude = Math.Sin(dest_node.coord_Longitude_radian - source_node.coord_Longitude_radian); double cos_delt_Longitude = Math.Cos(dest_node.coord_Longitude_radian - source_node.coord_Longitude_radian); double y = Math.Sqrt(Math.Pow(dest_node.cos_coord_Latitude_radian * sin_delt_Longitude, 2) + Math.Pow(source_node.cos_coord_Latitude_radian * dest_node.sin_coord_Latitude_radian - source_node.sin_coord_Latitude_radian * dest_node.cos_coord_Latitude_radian * cos_delt_Longitude, 2)); double x = source_node.sin_coord_Latitude_radian * dest_node.sin_coord_Latitude_radian + source_node.cos_coord_Latitude_radian * dest_node.cos_coord_Latitude_radian * cos_delt_Longitude; return_value = Math.Atan2(y, x) * 6372795; return(return_value); }
/// <summary> /// Конструктор для создания путей /// </summary> /// <param name="data">Строка данных</param> /// <param name="data_separator">Разделитель данных</param> /// <param name="massive_element_separator">Разделитель элементов в массиве</param> public Path_nav(string data, char data_separator = '/', char massive_element_separator = ';') { string[] pars_data = data.Split(data_separator); string[] nodes = pars_data[1].Split(massive_element_separator); string[] nodes_distans = pars_data[2].Split(massive_element_separator); for (int i = 0; i < nodes.Length; i++) { long id = Convert.ToInt64(nodes[i]); double dist = Convert.ToDouble(nodes_distans[i]); if (!path.ContainsKey(id)) { path.Add(id, dist); } else { if (dist < path[id]) { path[id] = dist; } } } string[] pars_params = pars_data[pars_data.Length - 1].Split(massive_element_separator); param = new GrafNodeParam_nav(Convert.ToDouble(pars_params[0]), Convert.ToDouble(pars_params[1]), Convert.ToDouble(pars_params[2])); }