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}¢er={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_())
效果图