python_将gga转换成kml文件

将gga文件转换成kml文件,通过地图识别软件(如奥维地图)打开kml文件,本程序兼容以"$GPGGA"或者"$GNGGA"开头的gga文件。
import os

from PyQt5.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QLineEdit, QPushButton, QFileDialog


class MyDialog(QDialog):
    def __init__(self, parent=None):
        super(MyDialog, self).__init__(parent)
        self.setWindowTitle('gga文件转换成kml文件')
        self.setGeometry(100, 100, 400, 300)

        # 创建垂直布局管理器
        layout = QVBoxLayout()

        # 创建文件选择框
        label3 = QLabel('请点击浏览按钮,选择gga文件;\n再点击执行按钮,生成kml文件;\n然后通过地图识别软件(如奥维地图)打开kml文件;\n本程序兼容以"$GPGGA"或者"$GNGGA"开头的gga文件。', self)
        layout.addWidget(label3)
        self.file_input1 = QPushButton('浏览...', self)
        layout.addWidget(self.file_input1)
        self.file_input1.clicked.connect(self.open_file_dialog1)

        # 添加确认执行按钮
        self.ok_button = QPushButton('执行', self)
        self.ok_button.clicked.connect(self.execute)
        layout.addWidget(self.ok_button)

        # 将布局设置为主窗口的布局
        self.setLayout(layout)

    def open_file_dialog1(self):
        file_dialog = QFileDialog(self)
        file_dialog.setFileMode(QFileDialog.ExistingFiles)
        if file_dialog.exec_():
            file_paths = file_dialog.selectedFiles()
            merged_filename = ""
            if len(file_paths) > 1:
                # 获取第一个文件的目录和文件名,用于创建合并后的文件名
                directory = os.path.dirname(file_paths[0])
                filename = os.path.splitext(os.path.basename(file_paths[0]))[0]
                merged_filename = os.path.join(directory, f'{filename}_merged').replace('\\', '/')
                with open(merged_filename, 'w') as merged_file:
                    for path in file_paths:
                        with open(path, 'r') as file:
                            merged_file.write(file.read())
                            merged_file.write('\n')  # 在每个文件之间添加换行符
            elif len(file_paths) == 1:
                merged_filename = file_paths
            else:
                print('Please select files.')

            if merged_filename:
                self.file_input1.setText(''.join(merged_filename))

    def execute(self):
        # 执行操作,可以在这里处理输入框和文件选择框的内容
        file_path_s = self.file_input1.text()

        # 获取文件目录
        file_path = os.path.dirname(file_path_s)
        # 获取文件名(包含后缀)
        file_name_with_extension = os.path.basename(file_path_s)
        # 获取文件后缀
        file_extension = os.path.splitext(file_name_with_extension)[1]
        # 去除文件后缀得到不带后缀的文件名
        file_name_without_extension = file_name_with_extension.replace(file_extension, "")
        # 生成新的kml文件名称
        file_name_without_extension_new = file_name_without_extension + '.kml'
        file_path_d = os.path.join(file_path, file_name_without_extension_new)
        # print(file_path_d)

        # with open(file_path_s, 'r') as file:
        #     lines = file.readlines()
        #     print(lines)

        # 创建一个新的文件来写入处理后的数据
        with open(file_path_s, 'r') as file, open(file_path_d, 'w') as new_file:
            lines = file.readlines()
            # kml文件起始部分
            start_line = '<?xml version="1.0" encoding="utf-8"?><kml xmlns="http://www.opengis.net/kml/2.2"><Document><Placemark><name>' + file_name_without_extension + '</name><LineString><extrude>1</extrude><tessellate>1</tessellate><coordinates>'
            new_file.write(start_line)
            # 遍历原始文件的每一行
            for line in lines:
                # 使用,分割每一行的内容
                parts = line.split(',')
                # 兼容"$GPGGA"和"$GNGGA"
                if len(parts) > 10 and parts[0] == "$GPGGA" or parts[0] == "$GNGGA":
                    latitude = float(parts[2][:2]) + float(parts[2][2:]) / 60
                    longitude = float(parts[4][:3]) + float(parts[4][3:]) / 60
                    # print(latitude, longitude)
                    new_line = ','.join([str(longitude), str(latitude), str(parts[9])])
                    # 将处理后的行写入新文件,并在每行末尾添加空格符
                    new_file.write(new_line + ' ')
            # kml文件结束部分
            end_line = '</coordinates></LineString></Placemark></Document></kml>'
            new_file.write(' ' + end_line)


if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)
    dialog = MyDialog()
    dialog.exec_()

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值