Как определить расстояние на местности по координатам в проекции Гаусса-Крюгера

Тема в разделе "Геодезия как наука", создана пользователем Deleted member 51242, 24 янв 2020.

  1. ЮС

    ЮС Форумчанин

    Вы неправы в обоих случаях. И какое горизонтальное проложение хотите получить?
    Всё дело в том, что наша Земля не плоская, отвесные линии не параллельны и, следовательно, задачу нельзя решать как с прямоугольным треугольником по Пифагору.
     
  2. Deleted member 51242

    Deleted member 51242 Только чтение

    Уважаемые сенсеи, так мой расчет по геоцентрическим координатам в данном случае корректен или нет? причем здесь тахеометр со своими поправками.
     
    Последнее редактирование модератором: 27 янв 2020
  3. Deleted member 51242

    Deleted member 51242 Только чтение

    Всем спасибо вопрос закрыт. Воспользовался Кредо-дат. со всеми поправками получилось расстояние 9998.145 - совпадает с геоцентрическим расчетом
     
    Последнее редактирование модератором: 27 янв 2020
  4. manikala

    manikala Форумчанин

    Здесь действительно, я не прав)))
    Должно быть Sгор=корень(Sнак2 - dh2)
    --- Сообщения объединены, 27 янв 2020, Оригинальное время сообщения: 27 янв 2020 ---

    А что можно? Идеи есть?
    И какая ошибка будет на 10 000 м?
     
  5. stout

    stout Форумчанин

    Оффтоп

    Всё с точность до наоборот.
    Вот абсолютно точные формулы для масштаба проекции Гаусса-Крюгера и сближения меридианов.
    scale_conv.png
    βс – комплексная параметрическая (приведённая) широта, β – просто параметрическая (приведённая) широта.
    Во вложении код на Python.
    LatLon2NE(lat, lon) – вычисление прямоугольных координат, масштаба и сближения меридианов по широте и удалению от осевого меридиана.
    Вот её точность
    NE_LatLon2NE_max=51.png
    NE2LatLon(N, E)– вычисление геодезической широты, удаления от осевого меридиана, масштаба и сближения меридианов.
    LatLon_NE2LatLon_max=51.png
    NE2LatLonMod(N, E) – тоже самое, но чуть поточнее.
    LatLon+_NE2LatLon_max=51.png
    Текст привел для иллюстрации того, что масштаб и сближение меридианов появляются как "побочный" продукт при преобразовании координат.
    А это для сравнения формулы из ГОСТ
    NE_GOST.png
     

    Вложения:

  6. ВЯЗ

    ВЯЗ Форумчанин

    Ха! Конечно здесь банальная опечатка: приведена формулка для поправки за наклон, а по смыслу то должен быть коэффициент, т.е. только косинус. Вдвойне досадно, что дважды повторил эту ошибку. Признаю.

    Должно быть
    f1=(cos v), где v- угол наклона. Или через разность высот пунктов f1=h^2/2(Sнакл.)^2-h^4/8(Sнакл)^4

    Немного успокаивает тот факт, что в данном примере наклон учитывать не надо.

    Ладно, дал повод позлорадствовать. Однако, manikala, я так понимаю, что вашей части формул, чтобы завершить возникшую дискуссию и проверить решение, мне не дождаться?
    --- Сообщения объединены, 27 янв 2020, Оригинальное время сообщения: 27 янв 2020 ---
    Хочу поставить точку и проверить вычисления geo-prog своим способом.
    f3=1+Sx^2/24*R^2+. для нашей задачи этих двух членов будет достаточно. Причем для линии 10км этот коэффициент можно спокойно брать равным 1.
    f4=1+ym^2/2*R^2+...здесь уm - средняя ордината линии и я не различаю средний радиус кривизны в азимуте со средним радиусом кривизны.

    Теперь вычисления:
    При Sп=10000м. H=100м ym=128км
    Sнакл=Sп/f4/f3/f2=9998.139м. Geo-prog удовлетворился величиной 9998.145. Точность моих расчетов не хуже 5мм. Поэтому можно удовлетвориться.
    f2=1
    f3=1-0,1/6371.1=0.9999843
    f4=1.0002018

    При Н=0
    Sнакл=Sп/1/1/1.0002018=9997.982м. Очень хорошо.

    Вот теперь заметим, что мои вычисления в 7-мь раз проще, чем вычисления с преобразованием координат, где 7-мь верст до небес лесом да огородами.

    Хау. Я все сказал.
     
  7. ЮС

    ЮС Форумчанин

    Я вас огорчу - это тоже ошибочная формула. Годится лишь для грубых расчётов при небольших расстояниях и превышениях.
    Как уже было сказано:
    Ещё раз повторю свой вопрос:
     
  8. ВЯЗ

    ВЯЗ Форумчанин

    ЮС, по смыслу это значение длины линии на средней высоте пары пунктов.

    Stout, попробовал выгрузить и распаковать ваш файл. Началось такое абракадабрирование...Там нет сюрприза?
     
  9. stout

    stout Форумчанин

    Оффтоп

    там обычный текстовый файл с расширением py
    Код:
    # -*- coding: utf-8 -*-
    """
    Created on Mon Jan 27 01:51:52 2020
     
    @author: stout
    """
    import time
    from mpmath import *
    mp.dps = 32
    tol = 10*mp.eps()
    half_pi = pi/2
    ro = 180*60*60/pi
     
    a = mpf('6378137')
    recip_flattening = mpf('298.257223563')
    f = 1/recip_flattening
    ee = f*(2 - f)
    n = f/(2 - f)
    e = sqrt(ee)
    TM_k0 = mpf('0.9996')
    Ra = TM_k0*a
    eps2 = ee/(1-ee) # the square of the second eccentricity
    eps  = sqrt(eps2)
     
    print('f = ', f)
    print('e = ',e, end = '\n')
    print('n = ', n) 
     
    def Geodetic2Param(lat):
        sin_lat = sin(lat)
        return lat - atan(sin_lat*cos(lat)/(recip_flattening - sin_lat*sin_lat))
     
    def Geodetic2Isometric(lat):
        sin_lat = sin(lat)
        return atanh(sin_lat) - e*atanh(e*sin_lat)
     
    def Param2Isometricβ:
        return asinh(tan(beta)/(1 - f)) - e*asinh(e*sin(beta)/(1-f))
     
    eps4 = eps2*eps2
    eps6 = eps2*eps4
    eps8 = eps4*eps4
    eps10 = eps6*eps4
    g_0 = +1 + eps2
    g_2 = -g_0*eps4/6;
    g_4 = +g_0*(eps8*13/120 + eps6/5);
    g_6 = -g_0*(eps10*71/210 + eps8*19/63);
    g_8 = +g_0*eps10*23/45;
    def BowringIsometric2TanLat(q):
        t = tanh(q)
        tt = t*t
        sinh_t = t/sqrt(1 - tt)
        return ((((g_8*tt + g_6)*tt + g_4)*tt + g_2)*tt + g_0)*sinh_t
     
    f_b = (1 + n*n/8)**2/(1 + n)
    c_b = (1 - n*n*9/16)
    d_b = 33*n/20
    def MerArc2Param(MerArc):
        theta = MerArc/(Ra*f_b)
        x = 1 - d_b*cos(2*theta)
        y = d_b*sin(2*theta)
        rr = x*x + y*y
        alfa = atan(y/x)
        return theta + 5/4*c_b*pow(rr,4/33)*sin(8/33*alfa)
     
    g1_b = (1 - n*n*3/8)
    g_b = g1_b*9
    h_b = 3*n/4
    def Param2MerArcβ:
        two_beta = beta + beta
        sin_2beta = sin(two_beta)
        cos_2beta = cos(two_beta) 
        x = 1 - h_b*cos_2beta
        y = h_b*sin_2beta
        rr = x*x + y*y
        alfa = atan(y/x)
        return Ra*f_b*(beta - g1_b*cbrt(rr)*sin(2*alfa/3)) 
     
    def LatLon2NE(lat, lon):
        lat = radians(lat)
        lon = radians(lon)
        beta =  Geodetic2Param(lat)
        q_c = mpc(real = Geodetic2Isometric(lat), imag = lon)
        tan_beta_c = (1 - f)*BowringIsometric2TanLat(q_c) # approximate
        cos_beta_c = 1/sqrt(1 + tan_beta_c*tan_beta_c)
        beta_c = atan(tan_beta_c)
        NE = Param2MerArc(beta_c) # approximate
        scale = TM_k0*fabs(cos_beta_c)/cosβ
        gamma = -arg(cos_beta_c)
        return NE.real, NE.imag, scale, degrees(gamma)    
     
    def NE2LatLon(N, E):
        NE = mpc(real = N, imag = E)
        beta_c = MerArc2Param(NE) # approximate
        cos_beta_c = cos(beta_c)
        q_c = Param2Isometric(beta_c)
        tan_lat = BowringIsometric2TanLat(q_c.real) # approximate
        lat = atan(tan_lat)
        beta =  Geodetic2Param(lat)
        scale = TM_k0*fabs(cos_beta_c)/cosβ
        gamma = -arg(cos_beta_c)    
        return degrees(lat), degrees(q_c.imag), scale, degrees(gamma)
     
    def NE2LatLonMod(N, E):
        NE = mpc(real = N, imag = E)
        beta_c = MerArc2Param(NE) # approximate
        F = Param2MerArc(beta_c) - NE
        cos_beta_c = cos(beta_c)
        dF = Ra*sqrt(1 - ee*cos_beta_c*cos_beta_c)
        db = F/dF
        beta_c -= db
        cos_beta_c = cos(beta_c)
        q_c = Param2Isometric(beta_c)
        tan_lat = BowringIsometric2TanLat(q_c.real) # approximate    
        tt = tan_lat*tan_lat
        ss = tt/(1 + tt)
        s = sqrt(ss)    
        f = asinh(tan_lat) - e*atanh(e*s) - q_c.real
        inv_df = (1 - ee*ss)*sqrt(1 - ss)/(1 - ee)
        lat = atan(tan_lat) - f*inv_df    
        beta =  Geodetic2Param(lat)
        scale = TM_k0*fabs(cos_beta_c)/cosβ
        gamma = -arg(cos_beta_c)    
        return degrees(lat), degrees(q_c.imag), scale, degrees(gamma)
     
    def LogAbsAcc(approx_value, exact_value, base):
            return-log(fabs(exact_value - approx_value) + tol, base)        
     
    max_dlon = mpf('51')
    file = open('TMExact_prec=120.txt')
    base = 10 # base of logarithm
    dt =  '_base='+str(base)+'_'+time.strftime('%Y-%m-%d-%H-%M',time.gmtime())+'.txt' 
    dt ='_maxLon='+str(max_dlon)+dt
    fout_ne = open('BowringLatLon2NE_abs'+dt,'w')
    fout_ne.write(f"{dt}")
    fout_ll = open('BowringNE2LatLon_abs'+dt,'w')
    fout_ll.write(f"{dt}")
     
    while True:
        line = file.readline()
        if len(line) == 0: 
           break
        s = line.split()
        Lat = mpf(s[0])   
        Lon = mpf(s[1])
        if (Lon > max_dlon):
           continue
        Etrue = mpf(s[2])
        Ntrue = mpf(s[3])
        gamma = mpf(s[4])
        scale = mpf(s[5])
        
        N, E, s, g = LatLon2NE(Lat, Lon)    
        fout_ne.write(f"\n{float(Lat):7.3f}  {float(Lon):7.3f}")
        dn = float(LogAbsAcc(N, Ntrue, base))            
        de = float(LogAbsAcc(E, Etrue, base))
        fout_ne.write(f"{dn:12.3e} {de:12.3e}")
        ds = float(LogAbsAcc(s, scale, base))            
        dg = float(LogAbsAcc(g*ro, gamma*ro, base))
        fout_ne.write(f"{ds:12.3e} {dg:12.3e}")        
        
        B, l, s, g = NE2LatLon(Ntrue, Etrue)
        fout_ll.write(f"\n{float(Lat):7.3f}  {float(Lon):7.3f}")
        db = float(LogAbsAcc(B*ro, Lat*ro, base))            
        dl = float(LogAbsAcc(l*ro, Lon*ro, base))
        fout_ll.write(f"{db:12.3e} {dl:12.3e}")  
        ds = float(LogAbsAcc(s, scale, base))            
        dg = float(LogAbsAcc(g*ro, gamma*ro, base))
        fout_ll.write(f"{ds:12.3e} {dg:12.3e}")  
        
        B, l, s, g = NE2LatLonMod(Ntrue, Etrue)
        db = float(LogAbsAcc(B*ro, Lat*ro, base))            
        dl = float(LogAbsAcc(l*ro, Lon*ro, base))
        fout_ll.write(f"{db:12.3e} {dl:12.3e}")  
        ds = float(LogAbsAcc(s, scale, base))            
        dg = float(LogAbsAcc(g*ro, gamma*ro, base))
        fout_ll.write(f"{ds:12.3e} {dg:12.3e}")     
     
    file.close()  
    fout_ne.close()
    fout_ll.close()
     
  10. manikala

    manikala Форумчанин

    Ну, да(((
    Другое дело здесь!
    Идеальный прямоугольный треугольник!
    Что так избирательно мои утверждения отвергают? Посчитайте разницу и посмотрим стоит шум поднимать.

    Главное, имея координаты в плоской СК, самый простой способ вычислить расстояние на местности перевычислить координаты в пространственную и получим то что нужно.
    Обработать расстояния вручную, или писать для этого программку, меня например напрягает.

    ВЯЗ, посчитал и получил неожиданный для меня результат. Я считал что будут сантиметры. Значит запас точности в формулах заложили на века! Или случайность. Можно поэкспериментировать.
    И вопрос!

    По какой формуле получено? Я вижу f3=1-H/(R+H) Где ошибка в вычислениях или в твоей формуле?
    Сравним еще для высоты 1000 м.

    Без имени.png
     
  11. ЮС

    ЮС Форумчанин

    Смысл, он у всех разный.
    А если по ГОСТ 22268-76, то:
    1.jpg , где:
    2.jpg .
    Говоря о горизонтальном проложении, необходимо указывать высоту поверхности относимости этой самой горизонтальной плоскости.
    Например, у тахеометров всех (или почти всех) фирм горизонтальное проложение вычисляется на высоте станции, а не на средней высоте пары пунктов.
    --- Сообщения объединены, 28 янв 2020, Оригинальное время сообщения: 28 янв 2020 ---
    Если действительно цель сравнения ГНСС с тахеометром, то всё решается гораздо проще.
    Не нужно заморачиваться с формулами редуцирования, а просто сравнить наклонные дальности.
     
    В.Шуфотинский и stout нравится это.
  12. manikala

    manikala Форумчанин

    В данной постановке задачи - это сравнение точности приборов.
    В этой теме, расстояние из координат СК42, нужно найти на местности.
     
  13. ЮС

    ЮС Форумчанин

    Найти на местности расстояние из координат не получится. Ну, не пишут у нас на местности такую информацию.
    Расстояние между пунктами можно вычислить или измерить.
    Что конкретно вы подразумеваете под "расстоянием на местности"?
    Постарайтесь сформулируйте задачу так, чтоб она исключала различные толкования, и только тогда можете получить правильный ответ.
     
  14. manikala

    manikala Форумчанин

     
  15. В.Шуфотинский

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

    manikala, уважаемый geo-prog считает для себя вопрос закрытым:
    Но если бы всё было так же просто, как это сделано в Кредо-дат, т.е. для небольших линий, то я бы давно перенёс эту тему в "Песочницу", и она уже давно бы ушла в "подвал". Но вопрос не такой простой, как кажется топографам. Геодезия довольно бурно движется от плоскости (планшетов) к геоцентрическим формам представления работ, но многие, по-прежнему, будут работать с пунктами, координаты которых в картографических проекциях. Вот здесь и напрямую встанет вопрос о длинах линий "на местности". Потому-то, скорее всего, и спросили Вас:
    В принципе, и Вы можете "спрыгнуть" с обсуждения. Насильно мил не будешь...
     
  16. Deleted member 51242

    Deleted member 51242 Только чтение

    Я имел в виду длину прямого отрезка на местности (не на проекции т.е.), соединяющего 2 пункта, расположенных не далее 10км др от друга.
     
  17. В.Шуфотинский

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

    Это, как мы уже выяснили выше, хорда. С хордами проблем вообще никаких нет. Решаете обратную геодезическую задачу в пространстве и будет Вам счастье.
     
  18. ЮС

    ЮС Форумчанин

    Теперь понятно. Ну, так ведь вы сами нашли простое и правильное решение:
    Вот только вряд ли данную прямую можно называть хордой, поскольку она никак не связана ни с дугой, ни с окружностью. Это просто прямая, соединяющая две точки в пространстве.
    8.jpg
     
  19. stout

    stout Форумчанин

    В космической геодезии прямую, соединяющую два пункта, принято называть хордой.
    Большаков В.Д_Левчук Г.П и др Справочник геодезиста В 2-х книгах Книга 1 М Недра 1985
    стр. 316
    хорда.jpg
    В таком же смысле этот термин употребляется в книге http://www.geokniga.org/books/5127
    Изотов osnovy-sputnikovoy-geodezii.jpg

    Хочу подчеркнуть, что это всего лишь договорённость относительно термина.
     
    ЮС нравится это.
  20. В.Шуфотинский

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

    Ну, это с точки зрения "Геометрии" для 7 класса. Геодезия ведь только в теории касается каких-то сфер, а на практике...
     
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление