Python+pyqt5写的坐标转换工具

查看 54|回复 3
作者:Allenxu520   
后端使用Python,界面使用的是pyqt5
坐标转换工具,GPS、高德、百度坐标互转,已打包exe程序,可自行取用(未适配win7)
下载地址:网盘被和谐了,需要的留言,我看到了给你发
[Python] 纯文本查看 复制代码class GPS(Ui_gps, QWidget):
    def __init__(self, parent=None):
        super().__init__(parent=parent)
        self.setupUi(self)
        # 更改objectName名称
        self.setObjectName("GPS")
        # 将PushButton1-6与坐标转换函数关联
        functions = [wgs84_to_gcj02, wgs84_to_bd09, gcj02_to_bd09, gcj02_to_wgs84, bd09_to_wgs84, bd09_to_gcj02]
        for i in range(6):
            button = getattr(self, f"zuobiao_{i + 1}")
            button.clicked.connect(lambda _, func=functions[i]: self.do_convert(func))
        # 点击导出
        self.zuobiao_7.clicked.connect(self.export_table_data)
        # 选择导入文件
        self.pushButton_2.clicked.connect(self.selectFile)
        # 执行导入程序
        self.pushButton.clicked.connect(self.update_coordinates)
        self.conn = None
        self.cur = None
        self.worker = None  # 初始化worker线程
    """=============================如下坐标转换==================================="""
    def do_convert(self, convert_func):
        # 获取用户选择的文件路径
        filePath, _ = QFileDialog.getOpenFileName(self, "选择文件")
        if filePath:
            # 获取文件扩展名
            ext = os.path.splitext(filePath)[1]
            # 判断是否为Excel文件
            if ext in [".xlsx", ".xls"]:
                # 读取 Excel 文件
                df = pd.read_excel(filePath)
                # 处理数据
                rows = []
                for i, row in df.iterrows():
                    lng, lat = row['经度'], row['纬度']
                    result_lng, result_lat = convert_func(lng, lat)
                    rows.append([i + 2, lng, lat, result_lng, result_lat])
                # 在 tableWidget 中显示转换结果
                self.tableWidget.setRowCount(len(rows))
                self.tableWidget.setColumnCount(5)
                for i, row in enumerate(rows):
                    for j, value in enumerate(row):
                        item = QTableWidgetItem(str(value))
                        if j == 0:
                            item.setFlags(item.flags() & (~Qt.ItemIsEnabled))
                        self.tableWidget.setItem(i, j, item)
            else:
                # 否则弹出警告窗口,并清空QLineEdit
                QMessageBox.warning(self, "友情提示:", "请选择正确的Excel文件!")
    def export_table_data(self):
        # 检查 TableWidget 是否为空
        if self.tableWidget.rowCount() == 0:
            QtWidgets.QMessageBox.warning(self, '无数据导出', '请先进行坐标转换!')
        else:
            # 弹出提示窗口
            self.progress_dialog = QMessageBox(self)
            self.progress_dialog.setWindowTitle('正在导出')
            self.progress_dialog.setText('正在导出,请稍后...')
            self.progress_dialog.show()
            try:
                # 创建一个空的 DataFrame 对象
                data_frame = pd.DataFrame(columns=[self.tableWidget.horizontalHeaderItem(j).text() for j in
                                                   range(self.tableWidget.columnCount())])
                # 将每一行的数据添加到 DataFrame 中
                for i in range(self.tableWidget.rowCount()):
                    row_data = [
                        self.tableWidget.item(i, j).text() if self.tableWidget.item(i, j) is not None else ''
                        for j in range(self.tableWidget.columnCount())]
                    data_frame.loc[len(data_frame)] = row_data
                # 将 DataFrame 导出到 Excel 文件中
                writer = pd.ExcelWriter('坐标转换完成.xlsx', engine='openpyxl')
                data_frame.to_excel(writer, index=False)
                writer.close()
                # 隐藏进度对话框并弹出提示窗口
                self.progress_dialog.hide()
                QMessageBox.information(self, '导出成功', f'文件已保存至 {os.path.abspath("坐标转换完成.xlsx")}')
            except Exception as e:
                # 隐藏进度对话框并弹出错误窗口
                self.progress_dialog.hide()
                QMessageBox.critical(self, '导出失败', f'导出文件时发生错误:{e}')
    """=============================如下坐标更新==================================="""
    def selectFile(self):
        """
        打开文件对话框以选择需要验证的数据文件。
        """
        # 使用QFileDialog获取文件路径
        filePath, _ = QFileDialog.getOpenFileName(self, "选择文件")
        if filePath:
            # 获取文件扩展名
            ext = os.path.splitext(filePath)[1]
            # 判断是否为Excel文件
            if ext in [".xlsx", ".xls"]:
                # 如果成功选择Excel文件,则将其路径显示在QLineEdit中
                self.lineEdit.setText(filePath)
            else:
                # 否则弹出警告窗口,并清空QLineEdit
                QMessageBox.warning(self, "友情提示:", "请选择正确的Excel文件!")
                self.lineEdit.clear()
        else:
            # 如果没有选择任何文件,则清空QLineEdit
            self.lineEdit.clear()
    def update_coordinates(self):
        conn = gl.get_value("current_connection")
        file_path = self.lineEdit.text()
        # 获取是否使用高德GPS
        use_gaode_gps = self.radioButton.isChecked()
        if file_path and conn:
            if self.worker is not None and self.worker.isRunning():
                QMessageBox.warning(self, "友情提示:", "当前有正在执行的任务,请等待完成后再执行新任务。")
                return
            self.worker = Worker(file_path, conn, use_gaode_gps)
            self.worker.progress_updated.connect(self.progressBar.setValue)
            self.worker.message_updated.connect(self.log_message)
            self.worker.operation_complete.connect(self.final_message)
            self.worker.start()
        else:
            QMessageBox.warning(self, "友情提示:", "请选择文件并确保数据库连接正常后再进行操作!")
    def log_message(self, message):
        self.textEdit.append(message)
        QCoreApplication.processEvents()
    def final_message(self, message):
        QMessageBox.information(self, "操作完成", message)

文件, 坐标

jieshisan   

这个挺好,之前用JAVA写了一个后端,Python学习中
cyantea   

感谢分享
lgz0701   

谢谢分享,发下看看
您需要登录后才可以回帖 登录 | 立即注册

返回顶部