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

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

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

    Артем Скурихин Форумчанин

    Натянул я на себя образ той Аленки... Каюсь, виноват. Обещаю быть сдержаннее. За последние пару часов просмотрел предложенные форумчанами готовые коды - наверное, должны работать...
    В моих поверхностных алгоритмах черезчур много конструкций типа "if.. then... else" накапливается...
     
  2. Делал так. Но где-то ошибка.
    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
     
  3. stout

    stout Форумчанин

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

    Вложения:

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

    trir Форумчанин

    WGS 84
     
    leemaster нравится это.
  6. stout

    stout Форумчанин

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

    Вложения:

    • Image2.jpg
      Image2.jpg
      Размер файла:
      272 КБ
      Просмотров:
      15
    Последнее редактирование модератором: 11 фев 2017
  8. Уважаемые специалисты!
    С расчетом прямой геодезической задачи с Вашей помощью разобрался. Направьте, пожалуйста, только не очень далеко:), по вопросу:
    необходимо отрисовать эллипс (длины полуосей известны), при этом угол поворота может быть произвольный. Спасибо.
     
  9. stout

    stout Форумчанин

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