Member 10652631 Ответов: 2

Как преобразовать lat long в indian grid reference с помощью C# .new


Привет
Я-Шайлендра Вьяс, который хочет преобразовать lat long в indian grid reference (GR) для индийской зоны 1A и зоны 0.
Пример: для Индии зона 1А
lat = 77.79669 и
длинный = 31.53081
я знаю, что Гр будет
X=3671296 , Y=08497759

тот же другой пример:для Индии зона 1А
lat = 78.60744 и
длинный = 32.06581
и за это гр будет
X=3741976 , Y=0916068

но я не знаю формулу и какой параметр будет использоваться.
так что, пожалуйста, помогите мне.

Спасибо.

Что я уже пробовал:

double Lts = Convert.ToDouble(Lts11);
            double Los = Convert.ToDouble(Los11);
            double inverse_flattening = 300.8017255;
            double num5 = 6377276.345;
            double scale_factor = 1.0;
            double central_meridian = 68.0;
            double latt_of_origin = 32.50;
            double num10 = 2743285.8;//False Easting
            double num11 = 914395.5;//False northing
            double flattening = 1 / inverse_flattening;
            double num8 = 0.40648718;//1st st. parallel
            double num9 = 0.50073496;//2nd st. parallel
            double num7 = central_meridian * Math.PI / 180.0;
            double a2 = latt_of_origin * Math.PI / 180.0;
            double num6 = Math.Sqrt((2.0 * flattening) - (flattening * flattening));
           
            double a1 = Lts * Math.PI / 180.0;
            double num4 = Los * Math.PI / 180.0;
            double a3 = Math.Cos(num8) / Math.Sqrt(1.0 - num6 * num6 * Math.Sin(num8) * Math.Sin(num8));
            double a4 = Math.Cos(num9) / Math.Sqrt(1.0 - num6 * num6 * Math.Sin(num9) * Math.Sin(num9));
            double num12 = 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);
            double y = (Math.Log(a3) - Math.Log(a4)) / (Math.Log(num12) - Math.Log(a5));
            double num13 = a3 / (y * Math.Pow(num12, y));
            double num14 = num5 * num13 * Math.Pow(x1, y);
            double num15 = num5 * num13 * Math.Pow(x2, y);
            double num16 = y * (num4 - num7);
            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);

2 Ответов

Рейтинг:
0

OriginalGriff

Если вы не знаете, как что-то сделать, начните с Google: конвертировать широта долгота индийская координатной сетки (гр) Для Индии зоны 1А, в зоне 0 - поиск в Google [^] (Вы, несомненно, заметите, что строка поиска была взята из вашего собственного вопроса - так почему же вы не попробовали ее?)

Множество ссылок, все объясняющих, как сделать именно то, что вы хотите...

Google-ваш друг: будьте любезны и часто навещайте его. Он может ответить на вопросы гораздо быстрее, чем разместить их здесь ...
В будущем, пожалуйста, постарайтесь провести хотя бы фундаментальные исследования самостоятельно, а не тратить впустую свое или наше время.


Member 10652631

Спасибо за ответ
После поиска на многих сайтах я опубликовал этот запрос, потому что
я ничего не получаю
double num8 = 0.40648718;//1-я параллель st.
double num9 = 0.50073496;//2-я параллель ул.
точное значение этой переменной 2 на любом сайте.
и когда я изменил эти два значения в своем коде, то они отражают большие изменения в окончательном ответе и правильный ответ не получается.
так что если вы найдете точное значение, то, пожалуйста, предоставьте мне.