Программирование в геодезии

Тема в разделе "Общие вопросы", создана пользователем Alexyz, 11 май 2009.

  1. Alexyz

    Alexyz Форумчанин

    Создал тему для всех кто увлекается программированием, ну и не только.
    И хотел бы сразу спросить может есть у кого готовые библеотеки для экспорта-импорта dxf,
    аналог примера - "2D / 3D DXF Import .NET 1". Говорю сразу - не собираюсь использовать в коммерч. целях или в распространении.
     
    igor kruchkovskiy нравится это.
  2. Sanechko

    Sanechko Форумчанин

    Сайт www.opendesign.com скачал с нее программку everydwg.exe полностью бесплатная и слышал вроде они, каждый год уточняют спецификацию dwg, чтоб все корректно конвертировалось.
    Как минус, нельзя предпросмотр осуществлять ::-ph34r.gif::
    Как плюс, под wine в linux'e работает ::tell::
     
  3. Alexyz

    Alexyz Форумчанин

    спасибо, но немного не то.
    Объясню чуть подробнее:
    Работаю в Visual Studio 2008, программа (мой проект) ведет гео расчет и строит (рисует) результат в элементе управления PictureBox. Так вот дабы не писать класс (в связи с трудоемкостью и большими времязатратами) по экспорту из PictureBox в файл формата dxf, хотелось бы позаимствовать у кого-нибудь Библиотеку экспорта.
     
  4. Sanechko

    Sanechko Форумчанин

    Создание своего приложение конечно беспокоит душу каждого геодезиста, которое может делать все ::laugh24.gif:: Что если сделать маленькое приложение на базе открытой программки QGIS, интерфейс у нее русский есть, приложения можно писать на питоне, и поддержка будет, если все толково сделать. Меня этот вопрос давно волновал.

    Quantum GIS - это гис приложение, под win и linux.
     
  5. Alexyz

    Alexyz Форумчанин

    Поздно уже переучиваться с детства на Basic сижу. он на платформе .net работает?
     
  6. Sanechko

    Sanechko Форумчанин

    http://www.qgis.org/en/download/sources.html, сам только выкачал смотрел. Интерфейс QT, плагины питон, ядро на cpp. Наверное нет там поддержки .net . Open source его не особо жалует, это же привязка к платформе.
     
  7. Alexyz

    Alexyz Форумчанин

    спс за ссылку.
    (Добавление)
    но вопрос еще актуальный.
     
  8. Alexyz

    Alexyz Форумчанин

    Реализовал процедуру расчета площади и периметра полигона:
    Код:
     ' Расчет площади
            Public Sub Ploshcad(ByVal X As Array, ByVal Y As Array, ByRef S As Double)
            Dim Xi As Double = 0
            Dim XItog As Double = 0
            Dim Yi As Double = 0
            Dim YItog As Double = 0
            Dim XCount As Int32 = X.Length
            Dim YCount As Int32 = Y.Length
            Dim Index As Int32 = 0
            Dim Index2 As Int32 = 0
            Dim P2X As Double = 0
            Dim P2XItog As Double = 0
            Dim P2Y As Double = 0
            Dim P2YItog As Double = 0
            ' Расчитываем разность координат X
            For i As Int32 = 0 To YCount - 1
                ' Расчитываем Контроль
                Index = i
                Index2 = i
                If Index = 0 Then Index = YCount
                If Index2 = YCount - 1 Then Index2 = -1
                Xi = Y(Index - 1) - Y(Index2 + 1)
                P2X = X(i) * Xi
                XItog += Xi
                P2XItog += P2X
            Next i
            ' Расчитываем разность координат Y
            For i As Int32 = 0 To XCount - 1
                ' Расчитываем Контроль
                Index = i
                Index2 = i
                If Index = 0 Then Index = XCount
                If Index2 = XCount - 1 Then Index2 = -1
                Yi = X(Index - 1) - X(Index2 + 1)
                P2Y = Y(i) * Yi
                YItog += Yi
                P2YItog += P2Y
            Next i
            If P2XItog < 0 Then P2XItog = P2XItog * (-1)
            If P2YItog < 0 Then P2YItog = P2YItog * (-1)
            ' Мой метод расчета площади
            S = (P2XItog + P2YItog) / 4
        End Sub
        Public Sub Perimetr(ByVal X As Array, ByVal Y As Array, ByRef P As Double)
            Dim XCount As Int32 = X.Length
            Dim Distanc As Double = 0
            Dim dX As Double = 0
            Dim dY As Double = 0
            Dim Index As Int32 = 0
            Dim Index2 As Int32 = 0
            For i As Int32 = 0 To XCount - 1
                Index = i
                Index2 = i
                If Index2 = XCount - 1 Then Index2 = -1
                dX = X(Index) - X(Index2 + 1)
                dY = Y(Index) - Y(Index2 + 1)
                Distanc = Math.Sqrt(dX ^ 2 + dY ^ 2)
                P += Distanc
            Next
        End Sub
    труда особого не составило.
    Сейчас мучаюсь с интерполированием горизонталей.
    Подскажите люди добрые, формулу для массива отметок: X(i), Y(i), Z(i).
     
  9. Максим

    Максим Форумчанин

    P2XItog плохо читается, лучше: P2Xitog.
    (Добавление)
    И комментариев надо значительно больше. Желательно в начале описывать общую идею алгоритма.
     
  10. Alexyz

    Alexyz Форумчанин

    это "сырой" код. Потом сборку dll сделаю все за комментирую.
     
  11. Максим

    Максим Форумчанин

    Желательно отказываться от ByRef'ов в пользу использования Function'ов, которые явно возвращают вычисленное значение.
     
  12. Alexyz

    Alexyz Форумчанин

    учту...
     
  13. Максим

    Максим Форумчанин

    Я бы Yi назвал dXi, ибо по смыслу вы вычисляете разницу (дельту) Х. Не понятно, зачем введены переменные YItog и XItog, они не используются. Наверное, они служат для отладки? В чем преимущество вашего метода вычисления площади? Я бы вычислял её 1 раз, этого вполне достаточно. Вместо проверки отрицательности площади я бы просто вычислил её абсолютную величину.
     
  14. Alexyz

    Alexyz Форумчанин

    да, надо убрать, ничем не отличается, хочу посмотреть как S будет себя "вести". а XItog, для контроля общей суммы нужна была..
     
  15. Максим

    Максим Форумчанин

    С интерполированием задача не такая тривиальная. Между двумя точками съемки может проходить от нуля до нескольких горизонталей.
     
  16. Alexyz

    Alexyz Форумчанин

    меня более интерполирование интересует уже есть в голове картина приблизительная:
    1. Получаем массив X,Y.Z
    2. Организовываем линейную триангуляцию
    3. Линейные базисы используем для нахождения координаты X,Y горизонтали (метод логарифмической линейки)
    4. по заданному шагу горизонтали строим "поллинии"
    5. Сглаживаем полилинии.
    Ну и возможность изменение расположение треугольников триангуляции забыл.
    со 2-м пунктом пока проблемы..
    Может этот метод вообще не целесообразно использовать?
    (Добавление)
    от нуля до бесконечности точнее сказать.
     
  17. BearDyugin

    BearDyugin Модератор Форумчанин

    Посмотри тут, правда там Lisp, если совсем не поймёшь алгоритм попробую разобраться и подсказать.
     
  18. Alexyz

    Alexyz Форумчанин

    с Lips дело никогда не имел, посмотрел но код смотрел. Язык из семейства языков С, я изучаю сейчас C#, но в C# обязательное объявление переменных, а в Lips мозг сломать можно пока прочтешь и раздерешь код. Совсем не ясны функции (или команды): caddr, cdr, car, caar, и многое др. :(
     
  19. Alexyz

    Alexyz Форумчанин

    Ознакомился с визуальным процессом интерполирования в стороннем программном продукте. Картинка для наглядности:
    [​IMG]
    как видно горизонталь проходит как Сплайн, разве она не должна проходить через эти точки:
    [​IMG]
    и просто сглаживаться?
     
  20. Максим

    Максим Форумчанин

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