百度地图标注数据量不大,希望直接读取excle生成标注;同时会有修改、编辑的需求。
项目分析- 项目的没有难点,只有复杂度。如果是将标注信息固定在json或js文件中,即可实现;但是对于非编程人员,进行修改或者编辑的时候,友好性太差。
- 读取exlce的优势在于,非编程人员可以直观的修改和编辑标注信息。完成该操作后,通过python读取excle转化为json或js文件。
- 可以将代码封装成exe应用程序,方便使用;
import xlrd
import os
import json
from http.server import HTTPServer, SimpleHTTPRequestHandler
import webbrowser
读取excel数据并将其转为js文件
# 读取excel数据并将其转为js文件
filename = r'data/lockdata.xls'
# 判断文件是否存在
file_data = os.path.exists(filename)
if not file_data:
print("系统默认data.xls表格文件不存在.")
else:
print("系统获取到文件,处理中...")
data = xlrd.open_workbook(filename) # 文件名以及路径,如果路径或者文件名有中文给前面加一个r不转义。
# 获取你要sheet的名称
sheet_name = data.sheet_names()
# 根据sheet索引或者名称获取sheet内容
sheet = data.sheet_by_index(0)
# 获取整行和整列的值(列表)
rows = sheet.row_values(1) # 获取第2行内容
# 自定义数组
tables = []
data = {}
for rown in range(sheet.nrows):
array = {'name': sheet.cell_value(rown, 0), 'lng': sheet.cell_value(rown, 1), 'lat': sheet.cell_value(rown, 2)}
tables.append(array)
# print(tables)
# 删除标题头
del tables[0]
data = tables
# 转为JSON
res = json.dumps(data, ensure_ascii=False)
# print(res)
# 生成对应的JS数据文件
content = 'var data ={}'.format(res)
# 写入文件
with open(r'js/poidata.js', 'w', encoding="utf-8") as f:
f.write(content)
print("经纬度数据转换完成..")
创建http server
# 创建http server
class GetHttpServer(SimpleHTTPRequestHandler):
protocol_version = "HTTP/1.0"
server_version = "PSHS/0.1"
sys_version = "Python/3.9.x"
target = "./" # 监听目录,配置项
def do_get(self):
SimpleHTTPRequestHandler.do_GET(self)
def do_post(self):
print("postmsg recv, path error")
data = self.rfile.read(int(self.headers["content-length"]))
data = json.loads(data)
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
rspstr = "recv ok, data = "
rspstr += json.dumps(data, ensure_ascii=False)
self.wfile.write(rspstr.encode("utf-8"))
def http_server():
ip = "localhost" # 监听IP,配置项
port = 8800 # 监听端口,配置项
index_url = "http://%s:%d/index.html" % (ip, port) # 监听主页url,配置项
server = HTTPServer((ip, port), GetHttpServer)
try:
# 弹出窗口
webbrowser.open(index_url)
# 输出信息
print("服务器监听地址: ", index_url)
server.serve_forever()
except KeyboardInterrupt:
server.socket.close()
# 执行服务器脚本
http_server()
源代码:https://download.csdn.net/download/weixin_41290949/29086018
lockdatav Done!