ГОСТ Р 51794-2008: Преобразование геодезических координат в плоские прямоугольные и обратно

Тема в разделе "Исходные данные", создана пользователем Andrey_NM, 14 ноя 2012.

  1. SergKo

    SergKo Форумчанин

    Диапазон карты (в стандартной "генштабовской"/ГУГКовской) разграфке задается в тех же геодезических широте/долготе. Не нужно вообще ничего никуда переводить. Или переводить точку из плоской Г.-К. в широту-долготу. Но для перевода надо знать номер зоны (18/19 - первые цифры координаты Y, в сообщении #1; 5 в #12) или, если Y 6-значный, т.е. без номера зоны, осевой меридиан зоны.
     
  2. Andrey_NM

    Andrey_NM Форумчанин

    Перечитал сотый раз и не понял что там наоборот?

    Мне не нужен "ЛЮБОЙ геодезический калькулятор", мне нужно сделать это в программе. Для этого я использую формулы ГОСТ или они не подходят?

    Примеры элементарных решений можно привести?
     
  3. Andrey_NM

    Andrey_NM Форумчанин

    У меня не генштабовские карты. И диапазон задан в плоской СК-42. Вроде бы я это упомянул в первом сообщении.
     
  4. В.Шуфотинский

    В.Шуфотинский Модератор Команда форума

    Давайте начнём с самого главного геодезического вопроса: с какой точностью Вам надо определить
    ?
     
  5. Andrey_NM

    Andrey_NM Форумчанин

    50 метров.
     
  6. В.Шуфотинский

    В.Шуфотинский Модератор Команда форума

    Вот с этого и надо было начинать тему.

    Как Вы получили это:
    и это:
    ?
     
  7. Andrey_NM

    Andrey_NM Форумчанин

    Формулы ГОСТ. Я ж писал.
     
  8. В.Шуфотинский

    В.Шуфотинский Модератор Команда форума

    Не формулы интересуют, а кто Вам дал
    Не может быть Y=18998736. Это уже 19 зона. Интересуют и сами вычисления. В этом ошибка. Ищите, пока не получите из
    что-то близкое к x=6354760 и y=637640 или y=19637640.
     
  9. SergKo

    SergKo Форумчанин

    Ну, в общем-то, вполне (как мы и видим в теме) может... Современные ычислительные мощности вполне позволяют реализовать алгоритмы не приближенных, а гораздо более точных вычислений.

    http://agpmeridian.ru/image_content/publications/msk.pdf и там ссылка на источник: 5. Герасимов А.П. Местные системы координат // Геопрофи. — 2009. — № 4. — С. 32–34.
    Так что, ширина зоны в теории может быть значительно более стандартных шести градусов. Уж с точностью "не хуже 50 м" можно просто говорить о равенстве. Но прямо и обратно следует, все-же, считать с одним и тем же осевым меридианом.
    Однако, как-то странно это - зачем тогда вообще разные зоны? Или это таки просто ошибка была в расчетах, приведенных в первом сообщении. Хотелось бы увидеть комментарии инициатора темы.
     
  10. Andrey_MN похоже Вы немного слукавили. Вы пишете, что не использовали какой-либо геодезический калькулятор, а непосредственно мол вычислил по ГОСТу (а это не так уж просто сделать, подставляя значения в формулы вручную).
    Зачем было так упорно заводить сома за корягу? Вы просто взяли геодезический калькулятор Photomod, выбрали опцию ГОСТ 51794-2008 и вписали туда свои значения. Я попробовал сделать то же самое и получил точно такой же результат, до последней циферки. При вычислении "прямо" - первый результат, "обратно" - второй (вычисления заняли всего секунду, а уж сколько потратили вы, "вычисляя вручную", даже боюсь предположить). Вот только взяли вы исходные координаты почему-то в параметрах соседней зоны. Калькулятор пересчитал Вам координаты в "свою" зону, как положено.
    Написали бы правду сразу, может быть и вопрос быстрее прояснился.
     
  11. Andrey_NM

    Andrey_NM Форумчанин

    Я не пойму, вы всех идиотами считаете заранее?
    Формулы и ГОСТа, реализованые на JavaScript, то же самое есть в виде функции на SQL:
    Код:
    /*
    X
    ^
    |
    |
    |
    |
    |
    +------------> Y
    */
    function XYtoBL(X, Y) {
        var n = Math.floor(Y * Math.pow(10, -6));
        var b = X / 6367558.4968;
        var B0 = b + Math.sin(2*b) * (0.00252588685-0.0000149186*Math.pow(Math.sin(b),2)+0.00000011904*Math.pow(Math.sin(b),4));
        var z0 = (Y - (10*n + 5)*Math.pow(10, 5)) / (6378245*Math.cos(B0));
        var dB = -Math.pow(z0,2)*Math.sin(2*B0)*(0.251684631-0.003369263*Math.pow(Math.sin(B0),2)+0.000011276*Math.pow(Math.sin(B0),4)
            -Math.pow(z0,2)*(0.10500614-0.04559916*Math.pow(Math.sin(B0),2)+0.00228901*Math.pow(Math.sin(B0),4)-0.00002987*Math.pow(Math.sin(B0),6)
            -Math.pow(z0,2)*(0.042858  -0.025318  *Math.pow(Math.sin(B0),2)+0.01434600*Math.pow(Math.sin(B0),4)-0.00126400*Math.pow(Math.sin(B0),6)
            -Math.pow(z0,2)*(0.01672  -0.0063    *Math.pow(Math.sin(B0),2)+0.01188000*Math.pow(Math.sin(B0),4)-0.00328000*Math.pow(Math.sin(B0),6)))));
        var l = z0*(1-0.0033467108*Math.pow(Math.sin(B0),2)-0.0000056002*Math.pow(Math.sin(B0),4)-0.0000000187*Math.pow(Math.sin(B0),6)
            -Math.pow(z0,2)*(0.16778975+0.16273586*Math.pow(Math.sin(B0),2)-0.0005249*Math.pow(Math.sin(B0),4)-0.00000846*Math.pow(Math.sin(B0),6)
            -Math.pow(z0,2)*(0.0420025 +0.1487407 *Math.pow(Math.sin(B0),2)+0.005942 *Math.pow(Math.sin(B0),4)-0.000015  *Math.pow(Math.sin(B0),6)
            -Math.pow(z0,2)*(0.01225  +0.09477  *Math.pow(Math.sin(B0),2)+0.03282  *Math.pow(Math.sin(B0),4)+0.00034  *Math.pow(Math.sin(B0),6)
            -Math.pow(z0,2)*(0.0038    +0.0524    *Math.pow(Math.sin(B0),2)+0.0482  *Math.pow(Math.sin(B0),4)+0.0032    *Math.pow(Math.sin(B0),6))))));
        var res = new Coordinates((B0 + dB)*180/Math.PI, (6 * (n - 0.5) / 57.29577951 + l)*180/Math.PI);
        return res;
    }
    /*
    B (latitude)
    ^
    |
    |
    |
    |
    |
    +------------> L (longitude)
    */
    function BLtoXY(B, L) {
        var B = B * (Math.PI/180);
        var n = Math.floor((6+L)/6);
        var l = (L - (3+6*(n-1)))/57.29577951;
        var x = 6367558.4968*B-Math.sin(2*B)*(16002.8900+66.9607*Math.pow(Math.sin(B),2)+0.3515*Math.pow(Math.sin(B),4)
            -Math.pow(l,2)*(1594561.25+5336.535*Math.pow(Math.sin(B),2)+26.790*Math.pow(Math.sin(B),4)+0.149 *Math.pow(Math.sin(B),6)
            +Math.pow(l,2)*(672483.4  -811219.9*Math.pow(Math.sin(B),2)+5420.0*Math.pow(Math.sin(B),4)-10.6  *Math.pow(Math.sin(B),6)
            +Math.pow(l,2)*(278194    -830174  *Math.pow(Math.sin(B),2)+572437*Math.pow(Math.sin(B),4)-16010 *Math.pow(Math.sin(B),6)
            +Math.pow(l,2)*(109500    -574700  *Math.pow(Math.sin(B),2)+863700*Math.pow(Math.sin(B),4)-398600*Math.pow(Math.sin(B),6))))));
        var y = (5+10*n)*Math.pow(10,5)+
            l*Math.cos(B) *(6378245+21346.1415  *Math.pow(Math.sin(B),2)+107.159*Math.pow(Math.sin(B),4)+0.5977*Math.pow(Math.sin(B),6)
            +Math.pow(l,2)*(1070204.16-2136826.66*Math.pow(Math.sin(B),2)+17.98  *Math.pow(Math.sin(B),4)-11.99 *Math.pow(Math.sin(B),6)
            +Math.pow(l,2)*(270806    -1523417  *Math.pow(Math.sin(B),2)+1327645*Math.pow(Math.sin(B),4)-21701 *Math.pow(Math.sin(B),6)
            +Math.pow(l,2)*(79690    -866190    *Math.pow(Math.sin(B),2)+1730360*Math.pow(Math.sin(B),4)-945460*Math.pow(Math.sin(B),6)))));
        var res = new Coordinates(x, y);
        return res;
    }
    
    Дают одинаковый результат с PHOTOMOD геокалькулятором. Его я использовал для проверки своей реализации.
     
  12. В.Шуфотинский

    В.Шуфотинский Модератор Команда форума

    Так, что же было для Вас изначально (выбрано из каталога или придумано самостоятельно):
    или
    ?
     
  13. Andrey_NM

    Andrey_NM Форумчанин

    Пример координат в первом сообщении никак не связан с примером в 12 сообщении.
    В первом я хотел показать перевод (X, Y) -> (B, L) -> (X, Y).
    А во втором - попадание точки в диапазон координат после перевода (B, L) -> (X, Y).
     
  14. Andrey_NM

    Andrey_NM Форумчанин

    Еще раз. Задача сформулирована в сообщении 12: http://geodesist.ru/forum/threads/ГОСТ-Р-51794-2008-Преобразование-геодезических-координат-в-плоские-прямоугольные-и-обратно.14232/#post-189735
    Есть каталог карт. Вот пример:
    Код:
    project_name    map_type    Xmin    Xmax    Ymin        Ymax
    burjat_1    clutter    5494759    6382959    18001236    18998736
    burjat_2    clutter    5708988    6406188    20067479    20535879
    chita_1    clutter    5399026    6548426    19988298    20927998
    irkutsk_1    clutter    5612595    7204995    17998477    19000677
    irkutsk_2    clutter    5844787    6460887    17228563    17538163
    irkutsk_3    clutter    6226568    6773368    20090971    20674371
    piter      clutter    6446000    6863300    6149400    6698300
    
    Ну и десятки тысяч точек с координатами:
    Код:
    51.19833    113.72888
    50.74863    113.44369
    63.53897    53.7215
    63.539    53.72138
    ...
    Для каждой точки нужно проверить, попадает ли она в покрытие какой-либо карты.
    Дальнейший алгоритм уже не относится к проблемной для меня области.
     
  15. В.Шуфотинский

    В.Шуфотинский Модератор Команда форума

    Понимаете, для ВСЕХ, кто принимает участие в обсуждении этой темы, абсолютно понятно, почему у Вас так получается (здесь, всё-таки, собрались геодезисты), но для того, чтобы это поняли Вы, надо только одно: ответить на мой вопрос
     
  16. SergKo

    SergKo Форумчанин

    Оффтоп
    такой грех за многими программерами водится - не отвечать на задаваемые вопросы и не подтверждать получение (и понимание) ответа... ::smoke1::
     
  17. Andrey_NM

    Andrey_NM Форумчанин

    Здесь есть ответ на вопрос?
     
  18. Andrey_NM

    Andrey_NM Форумчанин

    Оффтоп
    За геодезистами, я так понял, тоже грехов не мало ::biggrin24.gif::
     
  19. stout

    stout Форумчанин

    Есть сомнения, что вы на самом деле привели не пример каталога карт, а некую обобщённую выборку из каталога. Причем тот, кто делал эту выборку, плохо разбирается в предметной области. Иначе бы не было такого, что для проекта "irkutsk_1" точка (Xmax,Ymin) была бы на самом деле западнее (Xmax, Ymax) где-то на 430 км.::blink.gif::
     
  20. Andrey_NM

    Andrey_NM Форумчанин

    Это почему же она не должна быть западнее, позвольте спросить?
    Код:
    X
    ^
    |  |      |
    |<-Xmax-------
    |  |      |
    |  |      |
    |<-Xmin-------
    +-------------> Y Запад <---> Восток
      ^      ^
      |      |
    Ymin    Ymax
     
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление