Добро пожаловать!

Войдите или зарегистрируйтесь сейчас!

Войти

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

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

  1. ЮС

    Форумчанин

    Регистрация:
    28 фев 2010
    Сообщения:
    4.564
    Симпатии:
    5.059
    Вы неправы в обоих случаях. И какое горизонтальное проложение хотите получить?
    Всё дело в том, что наша Земля не плоская, отвесные линии не параллельны и, следовательно, задачу нельзя решать как с прямоугольным треугольником по Пифагору.
     
    #41
  2. Deleted member 51242

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

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

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

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

    Форумчанин

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

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

    Форумчанин

    Регистрация:
    5 янв 2008
    Сообщения:
    4.172
    Симпатии:
    11.936
    Адрес:
    Златоглавая и Белокаменная
    Оффтоп

    Всё с точность до наоборот.
    Вот абсолютно точные формулы для масштаба проекции Гаусса-Крюгера и сближения меридианов.
    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
     

    Вложения:

    #45
  6. ВЯЗ

    Форумчанин

    Регистрация:
    17 май 2012
    Сообщения:
    821
    Симпатии:
    684
    Адрес:
    Любимый Иркутск - середина земли.
    Ха! Конечно здесь банальная опечатка: приведена формулка для поправки за наклон, а по смыслу то должен быть коэффициент, т.е. только косинус. Вдвойне досадно, что дважды повторил эту ошибку. Признаю.

    Должно быть
    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-мь верст до небес лесом да огородами.

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

    Форумчанин

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

    Форумчанин

    Регистрация:
    17 май 2012
    Сообщения:
    821
    Симпатии:
    684
    Адрес:
    Любимый Иркутск - середина земли.
    ЮС, по смыслу это значение длины линии на средней высоте пары пунктов.

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

    Форумчанин

    Регистрация:
    5 янв 2008
    Сообщения:
    4.172
    Симпатии:
    11.936
    Адрес:
    Златоглавая и Белокаменная
    Оффтоп

    там обычный текстовый файл с расширением 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()
     
    #49
  10. manikala

    Форумчанин

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

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

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

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

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

    Форумчанин

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

    Форумчанин

    Регистрация:
    7 апр 2010
    Сообщения:
    226
    Симпатии:
    65
    В данной постановке задачи - это сравнение точности приборов.
    В этой теме, расстояние из координат СК42, нужно найти на местности.
     
    #52
  13. ЮС

    Форумчанин

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

    Форумчанин

    Регистрация:
    7 апр 2010
    Сообщения:
    226
    Симпатии:
    65
     
    #54
  15. В.Шуфотинский

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

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

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

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

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

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

    Форумчанин

    Регистрация:
    28 фев 2010
    Сообщения:
    4.564
    Симпатии:
    5.059
    Теперь понятно. Ну, так ведь вы сами нашли простое и правильное решение:
    Вот только вряд ли данную прямую можно называть хордой, поскольку она никак не связана ни с дугой, ни с окружностью. Это просто прямая, соединяющая две точки в пространстве.
    8.jpg
     
    #58
  19. stout

    Форумчанин

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

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

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

    Регистрация:
    10 дек 2008
    Сообщения:
    17.293
    Симпатии:
    4.952
    Ну, это с точки зрения "Геометрии" для 7 класса. Геодезия ведь только в теории касается каких-то сфер, а на практике...
     
    #60

Поделиться этой страницей

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