Как преобразовать широту в индийскую сетку ⇐ C#
-
Гость
Как преобразовать широту в индийскую сетку
Я хочу преобразовать широту в индийскую координатную сетку (GR) для зоны 1A и зоны 0 Индии.
Пример: для зоны 1A Индии
лат = 77,79669 и
длинный = 31,53081
Я знаю, что гр будет X=3671296, Y=08497759
тот же другой пример: для зоны 1A Индии
лат = 78,60744 и
длинный = 32,06581
и для этого гр будет X=3741976, Y=0916068
но я не знаю формулу и какой параметр будет использоваться, чтобы получить этот GR.
Я использовал следующий код, но ответ не совпал.
double Lts = Convert.ToDouble(lat); двойной Лос = Convert.ToDouble(длинный); двойное обратное_сглаживание = 300,8017255; двойной номер5 = 6377276,345; двойной масштаб_коэффициент = 1,0; двойной центральный_меридиан = 68,0; двойной latt_of_origin = 32,50; double num10 = 2743285.8;//Ложное восточное положение double num11 = 914395.5;//Ложное северное смещение двойное сглаживание = 1/inverse_flattening; двойной номер8 = 0,40648718;//1-й ст. параллельный двойной номер9 = 0,50073496;//2-й ст. параллельный двойной номер7 = центральный_меридиан * Math.PI/180,0; двойной a2 = latt_of_origin * Math.PI/180.0; double num6 = Math.Sqrt((2.0 * сглаживание) - (сведение * сглаживание)); двойной a1 = Lts * Math.PI/180,0; двойной номер4 = Los*Math.PI/180,0; double a3 = Math.Cos(num8) / Math.Sqrt(1.0 - num6 * num6 * Math.Sin(num8) * Math.Sin(num8)); двойной a4 = Math.Cos(num9) / Math.Sqrt(1.0 - num6 * num6 * Math.Sin(num9) * Math.Sin(num9)); двойное число12 = Math.Tan(Math.PI / 4.0 - num8 / 2.0) / Math.Pow((1.0 - num6 * Math.Sin(num8)) / (1.0 + num6 * Math.Sin(num8)), num6 / 2.0); double a5 = Math.Tan(Math.PI / 4.0 - num9 / 2.0) / Math.Pow((1.0 - num6 * Math.Sin(num9)) / (1.0 + num6 * Math.Sin(num9)), num6 / 2.0); double x1 = Math.Tan(Math.PI / 4.0 - a1 / 2.0) / Math.Pow((1.0 - num6 * Math.Sin(a1)) / (1.0 + num6 * Math.Sin(a1)), num6 / 2.0); double x2 = Math.Tan(Math.PI / 4.0 - a2 / 2.0) / Math.Pow((1.0 - num6 * Math.Sin(a2)) / (1.0 + num6 * Math.Sin(a2)), num6 / 2.0); двойной y = (Math.Log(a3) - Math.Log(a4)) / (Math.Log(num12) - Math.Log(a5)); двойной номер13 = a3 / (y * Math.Pow(num12, y)); двойной номер14 = номер5 * номер13 * Math.Pow(x1, y); двойной номер15 = номер5 * номер13 * Math.Pow(x2, y); двойной номер16 = у*(число4 - число7); Int64 temp_gr_x = Convert.ToInt64(num10 + (num14 * Math.Sin(num16))); Int64 temp_gr_y = Convert.ToInt64(num11 + num15 - (num14 * Math.Cos(num16))); temp_gr_x = Convert.ToInt64(temp_gr_x * Scale_factor); temp_gr_y = Convert.ToInt64(temp_gr_y * Scale_factor);
Я хочу преобразовать широту в индийскую координатную сетку (GR) для зоны 1A и зоны 0 Индии.
Пример: для зоны 1A Индии
лат = 77,79669 и
длинный = 31,53081
Я знаю, что гр будет X=3671296, Y=08497759
тот же другой пример: для зоны 1A Индии
лат = 78,60744 и
длинный = 32,06581
и для этого гр будет X=3741976, Y=0916068
но я не знаю формулу и какой параметр будет использоваться, чтобы получить этот GR.
Я использовал следующий код, но ответ не совпал.
double Lts = Convert.ToDouble(lat); двойной Лос = Convert.ToDouble(длинный); двойное обратное_сглаживание = 300,8017255; двойной номер5 = 6377276,345; двойной масштаб_коэффициент = 1,0; двойной центральный_меридиан = 68,0; двойной latt_of_origin = 32,50; double num10 = 2743285.8;//Ложное восточное положение double num11 = 914395.5;//Ложное северное смещение двойное сглаживание = 1/inverse_flattening; двойной номер8 = 0,40648718;//1-й ст. параллельный двойной номер9 = 0,50073496;//2-й ст. параллельный двойной номер7 = центральный_меридиан * Math.PI/180,0; двойной a2 = latt_of_origin * Math.PI/180.0; double num6 = Math.Sqrt((2.0 * сглаживание) - (сведение * сглаживание)); двойной a1 = Lts * Math.PI/180,0; двойной номер4 = Los*Math.PI/180,0; double a3 = Math.Cos(num8) / Math.Sqrt(1.0 - num6 * num6 * Math.Sin(num8) * Math.Sin(num8)); двойной a4 = Math.Cos(num9) / Math.Sqrt(1.0 - num6 * num6 * Math.Sin(num9) * Math.Sin(num9)); двойное число12 = Math.Tan(Math.PI / 4.0 - num8 / 2.0) / Math.Pow((1.0 - num6 * Math.Sin(num8)) / (1.0 + num6 * Math.Sin(num8)), num6 / 2.0); double a5 = Math.Tan(Math.PI / 4.0 - num9 / 2.0) / Math.Pow((1.0 - num6 * Math.Sin(num9)) / (1.0 + num6 * Math.Sin(num9)), num6 / 2.0); double x1 = Math.Tan(Math.PI / 4.0 - a1 / 2.0) / Math.Pow((1.0 - num6 * Math.Sin(a1)) / (1.0 + num6 * Math.Sin(a1)), num6 / 2.0); double x2 = Math.Tan(Math.PI / 4.0 - a2 / 2.0) / Math.Pow((1.0 - num6 * Math.Sin(a2)) / (1.0 + num6 * Math.Sin(a2)), num6 / 2.0); двойной y = (Math.Log(a3) - Math.Log(a4)) / (Math.Log(num12) - Math.Log(a5)); двойной номер13 = a3 / (y * Math.Pow(num12, y)); двойной номер14 = номер5 * номер13 * Math.Pow(x1, y); двойной номер15 = номер5 * номер13 * Math.Pow(x2, y); двойной номер16 = у*(число4 - число7); Int64 temp_gr_x = Convert.ToInt64(num10 + (num14 * Math.Sin(num16))); Int64 temp_gr_y = Convert.ToInt64(num11 + num15 - (num14 * Math.Cos(num16))); temp_gr_x = Convert.ToInt64(temp_gr_x * Scale_factor); temp_gr_y = Convert.ToInt64(temp_gr_y * Scale_factor);
Мобильная версия