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

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

Войти

Необходимо рассчитать координаты точек окружности для того, чтобы вывести в последствии на карту

Тема в разделе "MapInfo", создана пользователем leemaster, 6 фев 2017.

  1. Артем Скурихин

    Форумчанин

    Регистрация:
    24 фев 2010
    Сообщения:
    942
    Симпатии:
    1.273
    Адрес:
    Минск. Республика Беларусь
    Натянул я на себя образ той Аленки... Каюсь, виноват. Обещаю быть сдержаннее. За последние пару часов просмотрел предложенные форумчанами готовые коды - наверное, должны работать...
    В моих поверхностных алгоритмах черезчур много конструкций типа "if.. then... else" накапливается...
     
    #21
  2. leemaster

    Регистрация:
    6 фев 2017
    Сообщения:
    10
    Симпатии:
    0
    Делал так. Но где-то ошибка.
    http://gis-lab.info/qa/sphere-geodesic-direct-problem.html

    procedure TForm1.btn2Click(Sender: TObject);
    var
    x,y,z, lat,lon,dist,azi,u,v, lat1, lon1 : Extended;
    procedure SphereToCart(shir, dolg : extended);
    begin
    x:= cos(shir) * cos(dolg);
    y:= cos(shir) * sin(dolg);
    z:= sin(shir);
    end;
    procedure CartToSphere(xx, yy, zz : extended);
    begin
    lat1 := RadToDeg(ArcTan2(zz, sqrt(xx * xx + yy * yy)));
    lon1:= RadToDeg(ArcTan2(yy, xx));
    mmo1.Lines.Add('широта '+Floattostr(lat1));
    mmo1.Lines.Add('долгота '+Floattostr(lon1));
    mmo1.Lines.Add('');
    end;
    function Rotate1(xx, yy, aa : Extended) : Extended;
    var
    c,s : Extended;
    begin
    c := cos(aa);
    s := sin(aa);
    Result:= xx * c + yy * s;
    // v:= -xx * s + yy * c;
    end;
    function Rotate2(xx, yy, aa : Extended) : Extended;
    var
    c,s : Extended;
    begin
    c := cos(aa);
    s := sin(aa);
    Result:= -xx * s + yy * c;
    // u:= xx * c + yy * s;
    end;
    begin
    lat := DegToRad(0);
    lon := DegToRad(0);
    dist:= 3000000;
    azi := DegToRad(0);
    SphereToCart(pi/2-dist, pi-azi);
    z:= Rotate1(z, x, lat-pi/2);
    x:= Rotate2(z, x, lat-pi/2);
    x:= Rotate1(x, y, -lon);
    y:= Rotate2(x, y, -lon);
    CartToSphere(x, y, z);
    end;
    end.
    При заданных условиях
    результат :
    //широта -45
    //долгота 180
     
    #22
  3. stout

    Форумчанин

    Регистрация:
    5 янв 2008
    Сообщения:
    4.172
    Симпатии:
    11.936
    Адрес:
    Златоглавая и Белокаменная
    В каких единицах?
    Судя по тексту
    Код:
    SphereToCart(pi/2-dist, pi-azi);
    , должно быть в радианах.
    Посмотрите проект
     

    Вложения:

    #23
    leemaster нравится это.
  4. leemaster

    Регистрация:
    6 фев 2017
    Сообщения:
    10
    Симпатии:
    0
    В метрах. За проект спасибо, изучу.
    ...
    Не могли бы Вы объяснить эти параметры (понимаю, что характеризуют эллипсоид):
    edtSemiMajorAxis.Text := '6378137.0';
    edtInvFlattening.Text := '298.257223563';
    Спасибо.
     
    #24
    Последнее редактирование: 10 фев 2017
  5. trir

    Форумчанин

    Регистрация:
    25 ноя 2014
    Сообщения:
    3.253
    Симпатии:
    931
    Адрес:
    gnomtrir@mail.ru
    WGS 84
     
    #25
    leemaster нравится это.
  6. stout

    Форумчанин

    Регистрация:
    5 янв 2008
    Сообщения:
    4.172
    Симпатии:
    11.936
    Адрес:
    Златоглавая и Белокаменная
    А должно быть в угловой мере (в радианах). На это указывает хотя бы выражение pi/2-dist.
    В сфероидической геодезии много задач может решаться на сфере, надо только определённым образом перейти от геодезических координат на эллипсоиде (широта, долгота) к сферическим. Математика на сфере намного проще чем на эллипсоиде.
    Большую полуось определил для того, чтобы можно было дописать конформное отображение эллипсоида на сферу по Гауссу. В приведённом примере она пока не используется.
    Иногда и англицкая википедия врёт.::sad24.gif:: В частности, неверно утверждение "last revised in 2004".
     
    #26
    leemaster нравится это.
  7. leemaster

    Регистрация:
    6 фев 2017
    Сообщения:
    10
    Симпатии:
    0
    Еще раз хочу выразить глубокую благодарность всем откликнувшимся на мой вопрос.
    Особо - stout, trir, MaksNik.
    Все получилось. Результат при радиусе 2500 км на картинке.
     

    Вложения:

    • Image2.jpg
      Image2.jpg
      Размер файла:
      272 КБ
      Просмотров:
      15
    #27
    Последнее редактирование модератором: 11 фев 2017
  8. leemaster

    Регистрация:
    6 фев 2017
    Сообщения:
    10
    Симпатии:
    0
    Уважаемые специалисты!
    С расчетом прямой геодезической задачи с Вашей помощью разобрался. Направьте, пожалуйста, только не очень далеко:), по вопросу:
    необходимо отрисовать эллипс (длины полуосей известны), при этом угол поворота может быть произвольный. Спасибо.
     
    #28
  9. stout

    Форумчанин

    Регистрация:
    5 янв 2008
    Сообщения:
    4.172
    Симпатии:
    11.936
    Адрес:
    Златоглавая и Белокаменная
    Параметрическое уравнение эллипса Уравнения в параметрической форме. Находите координаты в локальной системе, а потом умножаете на матрицу поворота.
     
    #29
    leemaster нравится это.

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

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