测绘:利用python将cass软件导出dat数据批量转换成报部数据txt

一般做测绘地籍的应该会涉及到报部数据的生成,这是一个比较麻烦的事情,在网上搜了搜几乎没有这方面的软件,于是自己用python开发了个小脚本,可以实现批量转换。

注意:只支持由“cass 工程应用-复合线生成数据文件”直接生成的dat文件转化,或者与其格式相同的也行。

说明:有不懂的可以私信,我正在开发一款同样转换功能的便于使用的exe程序,等开发完再贴上来

(代码里路径默认是桌面,带号默认为39度带,可以根据注释自行修改代码)

(属性描述-转换参数都可以统一修改代码,根据自己情况改一遍就行了)

(地块坐标这个由于直接导出来的dat没有,所以最后需要自己在生成的报部数据txt文件中,逐个写入,打开文件后有提示,看一遍就懂了)

我下面直接贴python代码

# -*- coding: utf8 -*-
import os
import sys
path0=r"C:\Users\Administrator\Desktop"# 文件路径  下句是下面包括的子目录
path1=r"C:\Users\Administrator\Desktop"+'\\'
sys.path.append(path1)
 
 
files = os.listdir(path0)
#print('files',files)# 打印当下目录下的文件

txtcount = 0   #记录写完的报部数据txt个数
print("正在写入文件")
for filename in files:
   portion = os.path.splitext(filename)   #分割文件名和扩展名
 
   if portion[1] == ".dat" or portion[1] == ".DAT":  
      newname = portion[0] + ".txt" 
      filenamedir=path1 +filename   #dat文件
      newnamedir=path1+newname      #要建立的txt新文件


      with open(filenamedir) as f:
         lines = f.readlines()      #读取dat所有数据为列表格式
         lines.append(lines[0])     #把读取的数据第一行复制粘贴到最后一行
         lines_len =len(lines)      #表示读取的数据有几行
      with open(newnamedir,'w',encoding='ANSI') as f:
         f.write("[属性描述]\n")
         f.write("格式版本号=1.01版本\n")
         f.write("数据产生单位=公司名称\n")
         f.write("数据产生日期=年-月-日\n")
         f.write("坐标系=2000国家大地坐标系\n")
         f.write("几度分带=3\n")
         f.write("投影类型=高斯克吕格\n")
         f.write("计量单位=米\n")
         f.write("带号=39\n")     #注意:修改此处的话,别忘了底下(替换x,y坐标并在y坐标前加带                                  号39)这儿还有个带号39
         f.write("精度=0.001\n")
         f.write("转换参数=0.0,0.0,0.0,0.0,0.0,0.0,1.0\n")
         f.write("[地块坐标]\n")
         f.write("自己写数据=总点数为:{},格式为界址点数,地块面积,地块编号,地块名称,记录图形属性(点、线、面),图幅号,地块用途,地类编码,@\n".format(lines_len))
      line_count = 0    #记录当前写入的行数,最后知道是不是最后一行
      for line in lines:
         line_count += 1
         with open(newnamedir,'a',encoding='ANSI') as f:
            tmp_a = line.split(",")                #按分隔符,把每一行分割保存成列表
            tmp_b = tmp_a[:-1]                     #去掉最后一列,只保存前面的
            # tmp_b2 = "39"+tmp_b[2]
            # tmp_b3 = tmp_b[3]
            #
            # tmp_b[2] = tmp_b3
            # tmp_b[3] = tmp_b2

            tmp_b[2],tmp_b[3] = '%.03f'%float(tmp_b[3]),'%.03f'%float("39"+tmp_b[2])  #替换x,y坐标并在y坐标前加带号39


            for i in tmp_b:                            #每一行,如果不是最后一个值,则加逗号;如果是最后一个值,则不加
               if i != tmp_b[-1]:
                  f.write(i+',')
               else:
                  f.write(i)

            if line_count != len(lines):               #如果不是最后一行,则加换行符
               f.write('\n')
      txtcount += 1
      print("已写入第{}个报部数据".format(txtcount))
print("已写完全部报部数据")

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值