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

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

一般做测绘地籍的应该会涉及到报部数据的生成,这是一个比较麻烦的事情,在网上搜了搜几乎没有这方面的软件,于是自己用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("已写完全部报部数据")

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/787099.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存