百度地图接口

http://lbsyun.baidu.com/index.php?title=static 使用文档

做个简单查询软件
setStyleSheet中的背景图片必须是png格式
1 封装通过输入汉字获取经纬度,通过经纬度获取图片

import requests
import json
import random

class BaiduMap(object):

    def __init__(self,ak,height=200,width=300,zoom=11):
        self.ak = ak
        self.height = height
        self.width = width
        self.zoom = zoom
        self.addr = str(round(100*random.random(),3))

    # 获取地址的url
    def getUrl(self,addr):
        self.addr = addr
        if len(addr) < 1:
            return None

        return 'http://api.map.baidu.com/geocoding/v3/?address={inputAddress}&output=json&ak={myAk}'.format(
                    inputAddress=addr, myAk=self.ak)


    # 通过地址url获取经纬度
    def getPosition(self,addr):
        '''返回经纬度信息'''
        res = requests.get(self.getUrl(addr))
        json_data = json.loads(res.text)
        # print(json_data)
        if json_data['status'] == 0:
            lat = json_data['result']['location']['lat']  # 纬度
            lng = json_data['result']['location']['lng']  # 经度
        else:
            print("Error output!")
            return json_data['status']
        return lat, lng

    # 获取经纬度url
    def getImageUrl(self,position):
        '''
            调用地图API获取待查询地址专属url
            最高查询次数30w/天,最大并发量160/秒
            '''
        return 'http://api.map.baidu.com/staticimage/v2?ak={myAk}&center={position}&width={width}&height={height}&zoom={zoom}&scale=1&markers={position}'.format(
            position=position, myAk=self.ak,width=self.width,height=self.height,zoom=self.zoom)

    # 依旧经纬度url获取静态图
    def drawImage(self,position):
        response = requests.get(self.getImageUrl(position))
        # 获取的文本实际上是图片的二进制文本
        img = response.content
        # 将他拷贝到本地文件 w 写  b 二进制  wb代表写入二进制文本
        with open( './baiduImage/{addr}.png'.format(addr=self.addr),'wb' ) as f:
            f.write(img)

2 UI

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'baidumap.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QApplication,  QMainWindow, QMessageBox
import sys
from baiduditu import *

class Map(QMainWindow):
    def __init__(self):
        super(Map,self).__init__()
        self.setupUi(self)
        # 背景图片格式必须是png
        self.widget_3.setStyleSheet("background-image:url('test.png')")
        self.pushButton.clicked.connect(self.selectMap)

    def selectMap(self):
        if(self.lineEdit.text()!=""):
            self.map = BaiduMap("YcD0bzGpG7oiLyQ69tPiRFeABw3QnnVW", 361, 581, self.comboBox.currentText())
            lat, lng = self.map.getPosition(self.lineEdit.text())
            self.map.drawImage(','.join([str(lng),str(lat)]))
            self.textEdit.setText("地址:{0},经度:{1},维度{2}".format(self.lineEdit.text(),lng,lat))
            self.widget_3.setStyleSheet("background-image:url('./baiduImage/{addr}.png')".format(addr=self.lineEdit.text()))
        else:
            self.textEdit.setText("地址不能为空")

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1221, 809)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.widget = QtWidgets.QWidget(self.centralwidget)
        self.widget.setGeometry(QtCore.QRect(0, 20, 1221, 791))
        self.widget.setStyleSheet("background-color:rgba(41, 123, 255,1);")
        self.widget.setObjectName("widget")
        self.label = QtWidgets.QLabel(self.widget)
        self.label.setGeometry(QtCore.QRect(0, 0, 1221, 31))
        self.label.setStyleSheet("background-color:qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(0, 0,0, 255), stop:1 rgba(255, 255, 255, 255));\n"
"font: 75 16pt \"Aharoni\";color:#fff\n"
"")
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")
        self.widget_2 = QtWidgets.QWidget(self.widget)
        self.widget_2.setGeometry(QtCore.QRect(0, 30, 1221, 381))
        self.widget_2.setStyleSheet("background-color:rgb(170, 170, 255)")
        self.widget_2.setObjectName("widget_2")
        self.widget_3 = QtWidgets.QWidget(self.widget_2)
        self.widget_3.setGeometry(QtCore.QRect(10, 10, 581, 361))
        self.widget_3.setStyleSheet("background-color:#fff")
        self.widget_3.setObjectName("widget_3")
        self.textEdit = QtWidgets.QTextEdit(self.widget_2)
        self.textEdit.setGeometry(QtCore.QRect(600, 10, 611, 361))
        self.textEdit.setStyleSheet("background-color:rgb(255, 255, 255)")
        self.textEdit.setObjectName("textEdit")
        self.label_2 = QtWidgets.QLabel(self.widget)
        self.label_2.setGeometry(QtCore.QRect(0, 410, 1221, 31))
        self.label_2.setStyleSheet("background-color:qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(0, 0,0, 255), stop:1 rgba(255, 255, 255, 255));\n"
"font: 75 16pt \"Aharoni\";color:#fff\n"
"")
        self.label_2.setAlignment(QtCore.Qt.AlignCenter)
        self.label_2.setObjectName("label_2")
        self.lineEdit = QtWidgets.QLineEdit(self.widget)
        self.lineEdit.setGeometry(QtCore.QRect(100, 510, 91, 31))
        self.lineEdit.setStyleSheet("background-color:rgb(255, 255, 255);")
        self.lineEdit.setObjectName("lineEdit")
        self.label_3 = QtWidgets.QLabel(self.widget)
        self.label_3.setGeometry(QtCore.QRect(60, 520, 31, 16))
        self.label_3.setStyleSheet("color:#fff")
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(self.widget)
        self.label_4.setGeometry(QtCore.QRect(60, 590, 31, 16))
        self.label_4.setStyleSheet("color:#fff")
        self.label_4.setObjectName("label_4")
        self.comboBox = QtWidgets.QComboBox(self.widget)
        self.comboBox.setGeometry(QtCore.QRect(100, 581, 91, 31))
        self.comboBox.setStyleSheet("background-color:rgb(255, 255, 255);")
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.pushButton = QtWidgets.QPushButton(self.widget)
        self.pushButton.setGeometry(QtCore.QRect(550, 680, 101, 31))
        self.pushButton.setStyleSheet("background-color:rgb(255, 255, 255)")
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "输出"))
        self.label_2.setText(_translate("MainWindow", "输入"))
        self.label_3.setText(_translate("MainWindow", "地址:"))
        self.label_4.setText(_translate("MainWindow", "精度:"))
        self.comboBox.setItemText(0, _translate("MainWindow", "3"))
        self.comboBox.setItemText(1, _translate("MainWindow", "4"))
        self.comboBox.setItemText(2, _translate("MainWindow", "5"))
        self.comboBox.setItemText(3, _translate("MainWindow", "6"))
        self.comboBox.setItemText(4, _translate("MainWindow", "7"))
        self.comboBox.setItemText(5, _translate("MainWindow", "8"))
        self.comboBox.setItemText(6, _translate("MainWindow", "9"))
        self.comboBox.setItemText(7, _translate("MainWindow", "10"))
        self.comboBox.setItemText(8, _translate("MainWindow", "11"))
        self.comboBox.setItemText(9, _translate("MainWindow", "12"))
        self.comboBox.setItemText(10, _translate("MainWindow", "13"))
        self.comboBox.setItemText(11, _translate("MainWindow", "14"))
        self.comboBox.setItemText(12, _translate("MainWindow", "15"))
        self.comboBox.setItemText(13, _translate("MainWindow", "16"))
        self.comboBox.setItemText(14, _translate("MainWindow", "17"))
        self.comboBox.setItemText(15, _translate("MainWindow", "18"))
        self.pushButton.setText(_translate("MainWindow", "查看"))

    def closeEvent(self, event):
        reply = QMessageBox.question(self, '确认', '确认退出吗?', QMessageBox.Yes | QMessageBox.No)
        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    map = Map()
    map.show()
    sys.exit(app.exec_())

效果图
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值