Как считать координаты с файла dxf?

Тема в разделе "Исходные данные", создана пользователем Максимум, 3 апр 2009.

  1. Суть:есть зем участок с координатами. Иду с ним в лесхоз района чтоб согласовать границы, а мне там говорят что у них все по другому и дают диск с файлом dxf, а я не бум-бум; так вот мне нужно из этого файла их координаты чтоб сравнить со своими и подсчитать площадь и т.д.

    Могу переслать файл тому кто сможет разобратьсь. Сам пробовал через интернет что нибудь скачать - не могу разобраться?
     
  2. Александр Устинов

    Александр Устинов Форумчанин

    Разобраться в чем?
    Вы не знаете, что с файлом делать или как координаты снять?
     
  3. Вячеслав К.

    Вячеслав К. Форумчанин

    если снянь координаты точек контура скиньте файл на мыло. И в каком формате нужно?
    ksz2003@yandex.ru
     
  4. Qvinto

    Qvinto Форумчанин

    Ну так выложите файл здесь. И Вам дадут обстоятельный ответ. Утрёте нос лесникам.
    А у Вас как?
     
  5. На моей схеме формат точек -вот одна из них Х=6102314.24 У-3166931.03
    это чеховский р-н Еще раз что что необходимо:координаты точек(на схеме
    линия границы с лесом,мой участок как бы внутри) и если можно посчитать
    площадь . надеюсь,что получиться.
    (Добавление)
    я небольшой спец в инете,поэтому мне проще переслать на эл адрес
     

    Вложения:

    • granica.tar.gz
      Размер файла:
      633 байт
      Просмотров:
      139
  6. Вячеслав К.

    Вячеслав К. Форумчанин

    отправил по почте, смотрите.
     
  7. огромное спасибо,буду разбираться
     
  8. SergKo

    SergKo Форумчанин

    Команда: _list найдено: 1

    LWPOLYLINE Слой: "0"
    Пространство: Пространство модели
    Цвет: ПОСЛОЮ Тип линий: "Continuous"
    Метка = 4a
    Замкнутая
    Постоянная ширина 0.0000
    площадь 153891.6123
    периметр 1506.0625

    в точке X=13384003.7926 Y=6115943.6428 Z= 0.0000
    в точке X=13384079.1147 Y=6116111.4741 Z= 0.0000
    в точке X=13384194.7795 Y=6116220.2867 Z= 0.0000
    в точке X=13384388.2478 Y=6116134.6428 Z= 0.0000
    в точке X=13384434.5199 Y=6115858.3298 Z= 0.0000
    в точке X=13384326.0338 Y=6115697.9602 Z= 0.0000
    в точке X=13384259.7972 Y=6115645.1537 Z= 0.0000
    (Добавление)
    Ну, автогад, разумеется, X и Y поменял местами, но главное, что координаты совсем не те
    Я полагаю, в лесхозе своя система координат, а у вас (в документе на землю - угадал?) другая.
     

    Вложения:

    • granica.jpg
      granica.jpg
      Размер файла:
      124,9 КБ
      Просмотров:
      2.163
  9. еще раз огромное спасибо стал разбираться что то координаты сильно не совпадают с моими(мои коорд на фото см прикреп файле)кто ж дурит лесхоз или мои геодезисты
     

    Вложения:

    • уч-к.JPG
      уч-к.JPG
      Размер файла:
      188,2 КБ
      Просмотров:
      2.083
  10. вот покрупнее
     

    Вложения:

    • коорд.JPG
      коорд.JPG
      Размер файла:
      191,9 КБ
      Просмотров:
      2.039
  11. Qvinto

    Qvinto Форумчанин

    Как альтернатива, есть неплохой лисп,
    COORN


    Код:
    ; 
    ;;|=============== Команда COORN ===============================================
    
    EN:
       Export of coordinates of the specified points, the chosen objects: points, blocks, polylines, splines in a text file, Excel.
       Text file — txt, or csv. A rounding off of coordinates according to current adjustments of a command _UNITS (LUPREC !!!)
    RUS:
    Экспорт координат указанных точек, выбранных объектов: точек, блоков, полилиний, сплайнов в текстовый файл, ексел с простановкой номеров
    Текстовый файл — либо txt, либо csv.
    Номера точек отрисовываются текстом на текущем слое, текущим стилем, текущей высотой
    Округление координат в соответствии с текущими настройками команды _UNITS (переменная LUPREC !!!)
    
    |;
    
    (defun c:COORN (/ cFile curPt filPath objSet oFlag oldMode ptLst sFlag lw isRus Npt)
    (defun group-by-num (lst num / ls ret)(if (= (rem (length lst) num ) 0)(progn (setq ls nil)
      (repeat (/ (length lst) num)(repeat num (setq ls(cons (car lst) ls)lst (cdr lst)))
      (setq ret (append ret (list (reverse ls))) ls nil)))) ret)
    (defun PtCollect(SelSet)(mapcar 'cdr (mapcar '(lambda(x)(assoc 10 x))(mapcar 'entget
    (vl-remove-if 'listp(mapcar 'cadr(ssnamex SelSet))))))); end of PtCollect
    (defun PLCollect(SelSet / ret)
    (foreach lw (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp(mapcar 'cadr(ssnamex SelSet))))
      (cond ((wcmatch (vla-get-ObjectName lw) "*Polyline")
      (setq ret (append ret (group-by-num (vlax-get lw 'Coordinates)
      (if (=(vla-get-ObjectName lw) "AcDbPolyline") 2 3)))))
           ((=(vla-get-ObjectName lw) "AcDbSpline")(setq ret (append ret (group-by-num
             (vlax-safearray->list(vlax-variant-value (vla-get-controlpoints lw)))  3))))
          (t nil))) ret)
      (vl-load-com)(setq isRus(= (getvar "SysCodePage") "ANSI_1251"))(if(not ptcol:mode)(setq ptcol:mode "Pick"))
      (initget "Указать Точка Блоки Полилиния Pick pOints Blocks poLyline _Pick pOints Blocks poLyline Pick pOints Blocks poLyline")
    (setq oldMode ptcol:mode ptcol:mode
    (getkword (if IsRus (strcat "\nВыберите режим [Указать/Точка/Блоки/Полилиния или сплайн] <"
    (cadr (assoc ptcol:mode '(("Pick" "Указать")("pOints" "Указать")("Blocks" "Блоки")("poLyline" "Полилиния")))) ">: ")
            (strcat "\nSpecify mode [Pick/pOints/Blocks/poLyline or spline] <"ptcol:mode">: "))) ptLst nil)
    (if(null ptcol:mode)(setq ptcol:mode oldMode))
    (cond ((= "Pick" ptcol:mode)(setq curPt T)
           (while curPt (setq curPt(getpoint (if IsRus
             "\nУкажите точку или Enter завершения > " "\nPick point or Enter to continue > ")))
      (if curPt (setq ptLst(append ptLst(list (trans curPt 1 0))))))); end condition #1
          ((= "pOints" ptcol:mode)(if (not(setq objSet(ssget "_I" '((0 . "POINT")))))(progn
             (if IsRus (princ "\nВыберите точки и нажмите Enter ")(princ "\nSelect points and press Enter "))
       (setq objSet(ssget '((0 . "POINT"))))))(if objSet (setq ptLst(PtCollect objSet)))); end condition #2
          ((= "Blocks" ptcol:mode)(if (not(setq objSet(ssget "_I" '((0 . "INSERT")))))(progn
            (if IsRus(princ "\nВыберите блоки и нажмите Enter ")(princ "\nSelect blocks and press Enter "))
         (setq objSet(ssget '((0 . "INSERT"))))))(if objSet (setq ptLst(PtCollect objSet)))); end condition #3
          ((= "poLyline" ptcol:mode)(if (not(setq objSet(ssget "_I" '((0 . "*POLYLINE,SPLINE")))))(progn
            (if IsRus(princ "\nВыберите полилинии и нажмите Enter  ")(princ "\nSelect polyline and press Enter "))
         (setq objSet(ssget '((0 . "*POLYLINE,SPLINE"))))))(if objSet (setq ptLst(PLCollect objSet)))); end condition #4
    ); end cond
    (if ptLst (progn (princ "\n+++++++ Coordinates list +++++++\n")(setq ptLst (mapcar '(lambda(x)(trans x 0 1)) ptLst))
    (mapcar '(lambda(x)(princ(strcat "\n"(rtos(car x))","(rtos(cadr x))
    (if(= 3(length x))(strcat ","(rtos(nth 2 x))) "")))) ptLst); end mapcar
    (princ "\n\n+++++++++ End of list +++++++++")
    (setq Npt (getint (if IsRus "\nНачальный номер точки <Не маркировать> : " "\nStart number of points <Don't mark> : " )))
    (initget "Файл Excel Не Text Excel Not _Text Excel Not Text Excel Not")
    (setq sFlag (getkword (if IsRus "\nСохранить координаты в [Файл/Excel/Не сохранять] <Файл> : "
    "\nSave coordinates to [Text file/Excel/Not save] <Text> : ")))
    (if(null sFlag)(setq sFlag "Text"))(setq oFlag Npt)(if (numberp Npt)
    (foreach ln ptlst
      (text-draw                 ;_Отрисовка текста
        (itoa Npt)               ;_Номер точки
        (polar ln (/ pi 4) 1.)   ;_Координаты на 1 ед по углом 45 градусов
        (getvar "TEXTSIZE")      ;_ Текущей высотой текста
        0                        ;_Угол поворота
        nil
        )
      (setq Npt (1+ Npt))))
    (setq Npt oFlag)
    (setq ptLst (mapcar '(lambda(x)(mapcar 'rtos x)) ptlst))
    (cond ((and (= "Text" sFlag)(setq filPath
           (getfiled (if IsRus "Сохранение координат в текстовый файл" "Save Coordinates to Text File") "Coordinates.txt" "txt;csv" 33)))
           (setq cFile(open filPath "w"))(foreach ln ptLst (write-line (strcat (if (numberp Npt)(strcat (itoa Npt) ",") "")(car ln)","(cadr ln)
             (if(= 3(length ln))(strcat ","(nth 2 ln)))) cFile)(if (numberp Npt)(setq Npt (1+ Npt))))(close cFile)(initget "Yes No")
           (setq oFlag(getkword (if IsRus "\nОткрыть файл? [Yes/No] <No> : " "\nOpen text file? [Yes/No] <No> : " )))
           (if(= oFlag "Yes")(startapp "notepad.exe" filPath))); end condition #1
         ((= "Excel" sFlag)(if (numberp Npt)(progn
          (setq ptlst (mapcar '(lambda(x)(cons (1- (setq Npt (1+ Npt))) x)) ptlst))
          (xls ptlst '("N" "X" "Y" "Z") nil "COORN"))
          (xls ptLst nil nil "COOR"))); end condition #2
         (t nil)))) (princ)); end of c:COOR
    ;|================== XLS ========================================
    *  published http://www.autocad.ru/cgi-bin/f1/board.cgi?t=31371zf
                   http://www.autocad.ru/cgi-bin/f1/board.cgi?t=31596eW
    * Purpose: Export of the list of data Data-list in Excell
    *             It is exported to a new leaf of the current book.
                  If the book is not present, it is created
    * Arguments:
                  Data-list — The list of lists of data (LIST)
                                ((Value1 Value2 ... VlalueN)(Value1 Value2 ... VlalueN)...)
                                Each list of a kind (Value1 Value2... VlalueN) enters the name in
                                a separate line in corresponding columns (Value1-A Value2-B and .т.д.)
                      header —  The list (LIST) headings or nil a kind (" Signature A " " Signature B "...)
                                If header nil, is accepted ("X" "Y" "Z")
                     Colhide —  The list of alphabetic names of columns to hide or nil — to not hide ("A" "C" "D") — to hide columns A, C, D
                     Name_list — The name of a new leaf of the active book or nil — is not present
    * Return: nil
    * Usage
    (xls '((1.1 1.2 1.3 1.4)(2.1 2.2 2.3 2.4)(3.1 3.2 3.3 3.4)) '("Col1" "Col2" "Col3"  "Col4") '("B") "test")   |;
    
    
    ;|================== XLS ========================================
    * Опубликовано http://www.autocad.ru/cgi-bin/f1/board.cgi?t=19833nl&page=2
                   http://www.autocad.ru/cgi-bin/f1/board.cgi?t=31371zf
                   http://www.autocad.ru/cgi-bin/f1/board.cgi?t=31596eW
    * Автор: Владимир Азарко aka VVA
    * Назначение: Печать списка данных Data-list в Excell
    *             Для вывода создается новая книга
                  Вывод осуществляется в первом листе
    * Аргументы:
                  Data-list — список списков данных (LIST) вида
                                ((Value1 Value2 ... VlalueN)(Value1 Value2 ... VlalueN)...)
                                Каждый список вида (Value1 Value2 ... VlalueN) записывается
                                в отдельную строку в соответствующие столбцы (Value1-A Value2-B и .т.д.)
                      header —  список (LIST) заголовков или nil вида ("Подпись A" "Подпись B" ...)
                                Если header nil, принимается ("X" "Y" "Z")
                     Colhide —  список буквенных названий стоблцов для скрытия или nil — не скрывать
                                ("A" "C" "D") — скрыть столбцы A, C, D
                     Name_list — имя нового листа активной книги или nil — новая книга
    * Возврат: nil
    * TIPS!!! : При передачи функции xls числовых вещественных данных нет необходимости проверять текущий системный
                разделитель целой и дробной части ("HKEY_CURRENT_USER\\Control Panel\\International" "sDecimal")
                Функцией на время вывода отключается использование в Excele системного разделителя, разделителем
                целой и дробной части устанавливается точка. После завершения ф-ции все восстанавливается.
    Пример вызова
    (xls '((1.1 1.2 1.3 1.4)(2.1 2.2 2.3 2.4)(3.1 3.2 3.3 3.4)) '("Столбец1" "Столбец2" "Столбец3" "Столбец4") '("B"))|;
    (vl-load-com)
    (defun xls ( Data-list header Colhide Name_list / *aplexcel* *books-colection* Currsep
    *excell-cells* *new-book* *sheet#1* *sheet-collection* col iz_listo row cell cols)
    (defun Letter (N / Res TMP)(setq Res "")(while (> N 0)(setq TMP (rem N 26)
      TMP (if (zerop TMP)(setq N (1- N) TMP 26) TMP)
      Res (strcat (chr (+ 64 TMP)) Res)  N   (/ N 26))) Res)
    (if (null Name_list)(setq Name_list ""))
      (setq  *AplExcel*     (vlax-get-or-create-object "Excel.Application"))
      (if (setq *New-Book*  (vlax-get-property *AplExcel* "ActiveWorkbook"))
        (setq *Books-Colection*  (vlax-get-property *AplExcel* "Workbooks")
              *Sheet-Collection* (vlax-get-property *New-Book* "Sheets")
                   *Sheet#1*     (vlax-invoke-method *Sheet-Collection* "Add"))
    (setq *Books-Colection*  (vlax-get-property *AplExcel* "Workbooks")
                  *New-Book*     (vlax-invoke-method *Books-Colection* "Add")
              *Sheet-Collection* (vlax-get-property *New-Book* "Sheets")
                   *Sheet#1*     (vlax-get-property *Sheet-Collection* "Item" 1)))
    (setq *excell-cells*     (vlax-get-property *Sheet#1* "Cells"))
    (setq Name_list (if (= Name_list "")
                      (vl-filename-base(getvar "DWGNAME"))
                      (strcat (vl-filename-base(getvar "DWGNAME")) "&" Name_list))
       col 0 cols nil)
    (if (> (strlen Name_list) 26)
    (setq Name_list (strcat (substr Name_list 1 10) "..." (substr Name_list (- (strlen Name_list) 13) 14))))
    (vlax-for sh *Sheet-Collection* (setq cols (cons (strcase(vlax-get-property sh 'Name)) cols)))
    (setq row Name_list)
    (while (member (strcase row) cols)(setq row (strcat Name_list " (" (itoa(setq col (1+ col)))")")))
    (setq Name_list row)
    (vlax-put-property *Sheet#1* 'Name Name_list)
    (setq Currsep (vlax-get-property *AplExcel* "UseSystemSeparators"))
    (vlax-put-property *AplExcel* "UseSystemSeparators" :vlax-false) ;_не использовать системные установки
    (vlax-put-property *AplExcel* "DecimalSeparator" ".")            ;_разделитель дробной и целой части
    (vlax-put-property *AplExcel* "ThousandsSeparator" " ")          ;_разделитель тысячей
    (vla-put-visible *AplExcel* :vlax-true)(setq row 1 col 1)
    (if (null header)(setq header '("X" "Y" "Z")))
    (repeat (length header)(vlax-put-property *excell-cells* "Item" row col
    (vl-princ-to-string (nth (1- col) header)))(setq col (1+ col)))(setq  row 2 col 1)
    (repeat (length Data-list)(setq iz_listo (car Data-list))(repeat (length iz_listo)
    (vlax-put-property *excell-cells* "Item" row col (vl-princ-to-string (car iz_listo)))
    (setq iz_listo (cdr iz_listo) col (1+ col)))(setq Data-list (cdr Data-list))(setq col 1 row (1+ row)))
    (setq col (1+(length header)) row (1+ row))
    (setq cell (vlax-variant-value (vlax-invoke-method *Sheet#1* "Evaluate"
        (strcat "A1:" (letter col)(itoa row))))) ;_ end of setq
    (setq cols (vlax-get-property cell  'Columns))
    (vlax-invoke-method cols 'Autofit)
    (vlax-release-object cols)(vlax-release-object cell)
    (foreach item ColHide (if (numberp item)(setq item (letter item)))
    (setq cell (vlax-variant-value (vlax-invoke-method *Sheet#1* "Evaluate"
        (strcat item "1:" item "1"))))
    (setq cols (vlax-get-property cell  'Columns))
    (vlax-put-property cols 'hidden 1)
    (vlax-release-object cols)(vlax-release-object cell))
    (vlax-put-property *AplExcel* "UseSystemSeparators" Currsep)
    (mapcar 'vlax-release-object (list *excell-cells* *Sheet#1* *Sheet-Collection* *New-Book* *Books-Colection*
    *AplExcel*))(setq *AplExcel* nil)(gc)(gc)(princ))
    ;;;Отрисовка текста
    ;;; txt — текст
    ;;; pnt — точка отрисовки в ПСК
    ;;; heigtht — высота
    ;;; rotation — угол поворота
    ;;;justification — или nil
    ;;;Возвращает имя примитива
    (defun text-draw (txt pnt height rotation justification)
       (if (null pnt)(command "_.-TEXT" "" txt)
       (if (= (cdr (assoc 40 (tblsearch "STYLE" (getvar "TEXTSTYLE"))))
        0.0
           ) ;_ end of =
         (progn
         ;; нулевая высота текста
           (if justification
       (command "_.-TEXT" "_J" justification "_none" pnt height rotation txt)
       (command "_.-TEXT" "_none" pnt height rotation txt)
           ) ;_ end of if
         ) ;_ end of progn
         (progn
           ;; фиксированнная высота
           (if justification
       (command "_.-TEXT" "_J" justification "_none" pnt rotation txt)
       (command "_.-TEXT" "_none" pnt rotation txt)
           ) ;_ end of if
         ) ;_ end of progn
       ) ;_ end of if
         )
      (entlast)
    )
    [​IMG]
     

    Вложения:

    • COORN.tar.gz
      Размер файла:
      4,8 КБ
      Просмотров:
      223
  12. может быть, но в лесхозе мне показали бумагу с наложенными схемами,они конечно не совпадают но несильно и бумагу с наложенными схемами на руки не дают .говорят радуйся что хоть ,что файл дали вот я и мучаюсь как свести концы с концами или это их ошибка?
     
  13. rasta

    rasta Форумчанин

    К сожалению не видел ваших лесхозовских координат,но как правило у них условная система координат и данные они выдают в промерах и румбах между квартальными столбами. А поскольку спорить с лесным фондом себе дороже, то лучше подлезть под их данные,взяв за основу пару(или несколько(если повезет)) совпадающих по промерам и направлениям квартальных столбов(координат) и пошаманить.
     
  14. Команда: _list найдено: 1

    LWPOLYLINE Слой: "0"
    Пространство: Пространство модели
    Цвет: ПОСЛОЮ Тип линий: "Continuous"
    Метка = 4a
    Замкнутая
    Постоянная ширина 0.0000
    площадь 153891.6123
    периметр 1506.0625

    в точке X=13384003.7926 Y=6115943.6428 Z= 0.0000
    в точке X=13384079.1147 Y=6116111.4741 Z= 0.0000
    в точке X=13384194.7795 Y=6116220.2867 Z= 0.0000
    в точке X=13384388.2478 Y=6116134.6428 Z= 0.0000
    в точке X=13384434.5199 Y=6115858.3298 Z= 0.0000
    в точке X=13384326.0338 Y=6115697.9602 Z= 0.0000
    в точке X=13384259.7972 Y=6115645.1537 Z= 0.0000
    (Добавление)
    Ну, автогад, разумеется, X и Y поменял местами, но главное, что координаты совсем не те

    ВОТ они и сам файл выше есть УВАЖАЕМЫЙ rasta гляньте пажалуйста
     
  15. SergKo

    SergKo Форумчанин

    Акт согласования границ - чьего участка? вашего? пусть лесники разбираются - что у них за координаты и что за dxf... По значениям ваши координаты похожи на правильные...

    "Земли лесхоза" - понятие растяжимое, но леса около точки 1 (вашей) что-то как-то не наблюдается... ::cool24.gif::
    Если, конечно, я угадал с земельными координатами... Участок тут?
     

    Вложения:

  16. Андрей Р.

    Андрей Р. Форумчанин

    По настойчивей... ::smile24.gif::

    Введите например 19...
    И вот что получается:
    (Добавление)
    Есть опыт в согласование документов у лесников...
    Как обычно делаем мы: Снимаем копию с их планшета, у себя готовим планчик где на их планшет наносим свой участок. После чего едем к ним и показываем это чудо, возможно приходится выехать на место и показать участок живьем, после чего они обычно согласовывают, если конечно нет претензий к границам.
     

    Вложения:

    • 1.jpg
      1.jpg
      Размер файла:
      130,9 КБ
      Просмотров:
      923
  17. точка1 это начало дороги котороя идет по колхозному полю а уч-к сер-вос в лесу см прикрепл фото

    цитата: Как обычно делаем мы: Снимаем копию с их планшета, у себя готовим планчик где на их планшет наносим свой участок. После чего едем к ним и показываем это чудо, возможно приходится выехать на место и показать участок живьем, после чего они обычно согласовывают, если конечно нет претензий к границам. Я ТАК И ХОЧУ СДЕЛАТЬ поэтому и решил сам заняться с ВАШЕЙ помощью а то этот чеховский МУП взбрыкивает,но лесниковский файл dxf не могу сопоставить со своим актом например коорд точки13 и 26
    (Добавление)
    так,как же перевести координаты лесников в нужную систему в которой сделан акт чтоб привязать его к дороге и соседнему колхозу???
     

    Вложения:

    • уч-к.JPG
      уч-к.JPG
      Размер файла:
      188,2 КБ
      Просмотров:
      882
  18. rasta

    rasta Форумчанин

    Как видно на прикрепленном рисунке конфигурация и площадь участков более менее совпадают(с учетом того что это лес). Да и по площади попадает в допуск. Но если вы хотите оставить лесхозовскую геометрию но в своей системе координат ,то за отправную точку возмите №13.Далее пересчитайте по дир.углам и промерам лесхозовский контур. Тогда точно ни каких проблем с лесниками не будет.
    P.S. Можно совместить линию13-26 и "лесхозовскую" линию,чтобы не вылезти за кадастровый квартал,чуть-чуть изменив геометрию контура.
     

    Вложения:

    • 1.JPG
      1.JPG
      Размер файла:
      35,5 КБ
      Просмотров:
      897
  19. Ohr

    Ohr Форумчанин

    Извиняюсь за офф. Но на лиспе 1 код а в красивой картинке под ним совсем друой. Кстати и команда другая. Нельзя ли код выложить по которому прикрепленное изображение делалось. А то самому мне такой сложновато написать будет а картинка понравилась.
     
  20. Qvinto

    Qvinto Форумчанин

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