skg123 发表于 2013-1-21 22:48:14

提取文字插入点坐标【测量坐标格式】

本帖最后由 skg123 于 2013-1-21 23:37 编辑

本程序提取文字的插入点坐标输出到文本
适应于 地图上只有文字 非 CASS格式的高程点
如下图

(defun c:TQWZZB()
   (princ "\n选择所需输出的点(point):")
   (setq ss (ssget ));;选取坐标点
   (setq n (sslength ss ));计算坐标点数量
      (setq ff (open (getfiled "文件保存为" "f:/" "dat" 1) "w"));保存路径
   (setq i 0)
   (repeat n
(setq spt (ssname ss i ))
    (setq ept (entget spt))
    (if (= (cdr (assoc 0 ept)) "TEXT")
   (progn
                                    (setq lxyz (cdr (assoc 10ept)))
       (setq sx (rtos (nth 1 lxyz)));将坐标值实数转换成字符
       (setq sy (rtos (nth 0 lxyz)))
       (setq sz (rtos (nth 2 lxyz)))
                                        (setq i1 (+ i 1));计算点序号
                                        (setq sn (rtos i1 2 0));将序号实数转换成字符
       (setq sxyz (strcat sn",,"sy ","sx","sz))
       (write-line sxyz ff)
    )
    )
    (setq i (+ i 1))
   );repeat
)
(prompt "*只适合TEXT点 << 命令:TQWZZB >> *输出格式(点号,, Y,X,Z)**")
(prin1)

yefei812678 发表于 2024-2-23 16:38:01


不错
不错
不错

xiabin68 发表于 2013-1-21 23:43:19

不错,,,,,,,,

gzxl 发表于 2013-1-22 06:10:30

不不错,,,,,,,,,,,,,,,,

skg123 发表于 2013-1-22 08:20:54

本帖最后由 skg123 于 2013-10-26 09:01 编辑



某地形图 高程点如附件中所示,现在要提取高程点坐标值 几千个点,高程非CASS高程。文本的高程为 零 ,有个高程点在文本出入点的位置,带高程值。
操作步骤,首先删除所有高程点的文字,主要只删除文字,保留 “ 点”然后运行程序 框选所有高程点就可以了。
方案2:删除无关的线,数据,然后运行程序,框选全部,把坐标提取
有兴趣的朋友自己去体会(defun c:TQZB()
(princ "\n选择所需输出的点或文字:")
(setq ss (ssget ));;选取坐标点
(setq n (sslength ss ));计算坐标点数量
(setq ff (open (getfiled "文件保存为" "f:/" "dat" 1) "w"));保存路径
(setq i 0)
(repeat n
(setq spt (ssname ss i ))
(setq ept (entget spt))
(if (= (cdr (assoc 0 ept)) )
(progn
(setq lxyz (cdr (assoc 10 ept)))
(setq sx (rtos (nth 1 lxyz)));将坐标值实数转换成字符
(setq sy (rtos (nth 0 lxyz)))
(setq sz (rtos (nth 2 lxyz)))
(setq i1 (+ i 1));计算点序号
(setq sn (rtos i1 2 0));将序号实数转换成字符
(setq sxyz (strcat sn",," sy "," sx "," sz))
(write-line sxyz ff)
)
)
(setq i (+ i 1))
);repeat
)
(prompt "*提取地图中的高程点坐标值 << 命令:TQZB >> *输出格式(点号,, Y,X,Z)**")
(prin1)(defun c:TQZB()
(princ "\n选择所需输出的点或文字:")
(setq ss (ssget ));;选取坐标点
(setq n (sslength ss ));计算坐标点数量
(setq ff (open (getfiled "文件保存为" "f:/" "dat" 1) "w"));保存路径
(setq i 0)
(repeat n
(setq spt (ssname ss i ))
(setq ept (entget spt))
(if (= (cdr (assoc 0 ept)) )
(progn
(setq lxyz (cdr (assoc 10 ept)))
(setq sx (rtos (nth 1 lxyz)));将坐标值实数转换成字符
(setq sy (rtos (nth 0 lxyz)))
(setq sz (rtos (nth 2 lxyz)))
(setq i1 (+ i 1));计算点序号
(setq sn (rtos i1 2 0));将序号实数转换成字符
(setq sxyz (strcat sn",," sy "," sx "," sz))
(princ"\n")
(prinC sxyz);命令行显示坐标值

(write-line sxyz ff)

)
)
(setq i (+ i 1))
);repeat
(close ff);关闭文件
)

(prompt "*提取地图中的高程点坐标值 << 命令:TQZB >> *输出格式(点号,, Y,X,Z)**")
(prin1)以下是改进版,可以将桩基的编号读取作为点号;;;;读取桩基的编号文本,将编号作为点号
(defun c:TQWZZB()
   (princ "\n选择所需输出的点(point):")
   (setq ss (ssget ));;选取坐标点
   (setq n (sslength ss ));计算坐标点数量
      (setq ff (open (getfiled "文件保存为" "f:/" "dat" 1) "w"));保存路径
   (setq i 0)
   (repeat n
(setq spt (ssname ss i ))
    (setq ept (entget spt))
    (if (= (cdr (assoc 0 ept)) "TEXT")
   (progn
                                    (setq lxyz (cdr (assoc 10ept)))
setq sx (rtos (nth 1 lxyz)));将坐标值实数转换成字符
(setq sX11 (rtos sx1 2 3))

       (setq sy (rtos (nth 0 lxyz)2 3))
       (setq sz (rtos (nth 2 lxyz)2 3))
                                        (setq i1 (+ i 1));计算点序号
                                        (setq sn (rtos i1 2 0));将序号实数转换成字符
;;获取文本内容(编号)做点号
(setq ent (entget (ssname ss i)))
(setq typeA (cdr (assoc 1 ent)))
;;;;
       (setq sxyz (strcat typeA"," sn ","sy ","sx","sz))
       (write-line sxyz ff)
    )
    )
    (setq i (+ i 1))
   );repeat
)
(prompt "*只适合TEXT点 << 命令:TQWZZB >> *输出格式(点号,, Y,X,Z)**")
(prin1)

dwjb 发表于 2013-1-22 09:29:03

楼主厉害很强大,我一直用cass的数据交换功能,转入excel,宏,ok了

yshf 发表于 2013-1-22 23:03:05

本帖最后由 yshf 于 2013-1-22 23:15 编辑

改为如下,对“地形1.dwg”在不删除其它图元的情况下取得高程点的平面坐标及高程值

(defun c:TQZB()
    (princ "\n选择所需输出的点或文字:")
    (if (setq ss (ssget '((0 . "INSERT") (2 . "DOT-1"))));;选取高程点
      (progn
            (setq n (sslength ss ));计算坐标点数量
            (setq ff (open (getfiled "文件保存为" "f:/" "dat" 1) "w"));保存路径
   ;(setq ff (open (getfiled "文件保存为" "f:/" "csv" 1) "w"));将上一行注释,启用本行,所得文件可用Excel打开
            (setq i 0)
            (repeat n
                (setq ept(entget (ssname ss i))
      lxyz (cdr (assoc 10 ept))
      i    (1+ i)
)
                (princ
      (strcat
          (itoa i)",,"            ;点号
          (rtos (cadr lxyz) 2 3) ",";X坐标值
          (rtos (carlxyz) 2 3) ",";Y坐标值
          (rtos (last lxyz) 2 3) "\n" ;高程值
      )
      ff
)
            );end repeat
   (close ff);关闭文件
         );end progn
    );end if
    (princ)
)
(prompt "*提取地图中的高程点坐标值 << 命令:TQZB >> *输出格式(点号,, Y,X,Z)**")

万里天 发表于 2013-4-15 20:46:29

我的是vba写的.

zyhandw 发表于 2013-4-19 15:15:59

看来这个问题大家都碰到了,我也自己写了个

linshiyin2 发表于 2013-5-9 19:14:04

我也得自己写一个了,又遇到这个问题了

xiaoguben 发表于 2013-6-18 11:26:58

好东西。。。。。。。。。。。。。。
页: [1] 2
查看完整版本: 提取文字插入点坐标【测量坐标格式】