提取文字插入点坐标【测量坐标格式】
本帖最后由 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)
不错
不错
不错 不错,,,,,,,, 不不错,,,,,,,,,,,,,,,, 本帖最后由 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)
楼主厉害很强大,我一直用cass的数据交换功能,转入excel,宏,ok了 本帖最后由 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)**") 我的是vba写的. 看来这个问题大家都碰到了,我也自己写了个 我也得自己写一个了,又遇到这个问题了 好东西。。。。。。。。。。。。。。
页:
[1]
2