第一期 Google 谷歌地图(高德地图)瓦片下载/缓存,使用Python实现(一)_谷歌瓦片地图-CSDN博客
第二期 Google 谷歌地图(高德地图)瓦片下载/缓存,使用Python实现(二)_谷歌瓦片失效-CSDN博客
第三期 Google 谷歌地图(高德地图)瓦片下载/缓存,使用Python实现、arcgis.js(三)-CSDN博客
1、导入自定义瓦片资源包
用户导入自己已经下载好的瓦片资源包。
可以手动上传的瓦片资源(也可以选择上传到已经上传的文件包下,其实就是合并资源包,与之前的资源包放再同一个目录下),可以手动删除已经上传过的瓦片资源,
界面展示一个list列表,用户可以选择使用哪一个资源包
1.1 界面展示
选择自己已经上传的瓦片地图类型
上传自己下载好的瓦片压缩包
2、程序流程图
3、核心代码
@mapTile.route("/mapImg/upload", methods=["POST"])
def upload():
res = {
"code": 500,
"data": "",
"msg": ""
}
# 是不是一个file,是否包含mapFile文件字段
if 'mapFile' not in request.files:
flash('No file part')
res["code"] = 400
res["msg"] = "请上传的文件"
return res
mapFile = request.files['mapFile']
# If the user does not select a file, the browser submits an
# empty file without a filename.
if mapFile.filename == '':
flash('No selected file')
res["code"] = 400
res["msg"] = "请上传的文件"
return res
# 检查是否为压缩包
if mapFile and MyFileUtils.allowed_file(mapFile.filename, setting.global_zipTypes):
# 检查文件大小200MB
if mapFile.content_length > setting.global_file_max_length:
res["code"] = 413
res["msg"] = "文件不能超过200MB"
return res
# 解决中文名称文件上传问题
filename = MyFileUtils.secure_filename(mapFile.filename)
# filename = secure_filename(mapFile.filename)
zipPath = os.path.join(setting.global_UPLOAD_CUSTOM_MAP_FOLDER, filename).__str__()
zipPathAbs = os.path.abspath(zipPath)
# mapFile.save(os.path.join(setting.global_UPLOAD_CUSTOM_MAP_FOLDER, filename))
# 保存上传的压缩文件
mapFile.save(zipPathAbs)
isExistImgFile, firstImgFilePath = MyFileUtils.checkMapZipFileIncludeImg(zipPathAbs)
delParentPath = "" # 需要删除的父文件夹
strPath = ""
if isExistImgFile:
firstImgFilePaths = firstImgFilePath.split("/")
if len(firstImgFilePaths) == 3:
firstImgFilePaths.insert(0, filename.split(".")[0])
else: # 4层,说明有多余的层数,我们需要删除
delParentPath = firstImgFilePaths[0]
# 获得合并瓦片类型
uploadMapType = request.form.get("uploadMapType")
# 新增加自定义地图类型
if uploadMapType == '':
if firstImgFilePaths[0] in setting.global_customMapTypes:
# 已经存在这个文件夹,这个时候要重命名了
indexTemp = 2
while firstImgFilePaths[0] + "(" + str(indexTemp) + ")" in setting.global_customMapTypes:
indexTemp = indexTemp + 1
firstImgFilePaths[0] = firstImgFilePaths[0] + "(" + str(indexTemp) + ")"
# 解压
strPath = MyFileUtils.mapFileUnZip2(zipPathAbs, firstImgFilePaths[0])
# 添加到瓦片类型列表中
setting.global_customMapTypes.append(firstImgFilePaths[0])
# 合并到已有数据类型
else:
if uploadMapType in setting.global_customMapTypes:
mergePath = os.path.join(setting.global_UPLOAD_CUSTOM_MAP_FOLDER, uploadMapType).__str__()
mergePathAbs = os.path.abspath(mergePath)
# 解压
strPath = MyFileUtils.mapFileUnZip(zipPathAbs, firstImgFilePaths[0], mergePathAbs)
else:
res["code"] = 400
res["msg"] = "请上传正确的瓦片资源压缩包"
return res
if len(delParentPath) != 0:
# 删除多余的层数
MyFileUtils.childFoldersUpParentPath(strPath + "\\" + delParentPath, True, True)
res["code"] = 200
res["msg"] = "上传成功"
return res
else:
# 错误
res["code"] = 400
res["msg"] = "请上传正确的瓦片资源压缩包"
return res
return res
完整代码:
GitHub:
Crazy-GrowUp/flask-mapimg at v1.1.0 (github.com)
https://github.com/Crazy-GrowUp/flask-mapimg/tree/v1.1.0
Gitee:
flask-mapimg: 可自动缓存地图瓦片,保证项目下次加载更迅速 后端使用python flask 前端地图使用 arcgis.js - Gitee.com
https://gitee.com/jack_of_disco/flask-mapimg/tree/v1.1.0/