Google 谷歌地图(高德地图)瓦片下载/缓存,使用Python实现、自定义上传地图瓦片资源(四)

第一期 Google 谷歌地图(高德地图)瓦片下载/缓存,使用Python实现(一)_谷歌瓦片地图-CSDN博客

第二期 Google 谷歌地图(高德地图)瓦片下载/缓存,使用Python实现(二)_谷歌瓦片失效-CSDN博客

第三期 Google 谷歌地图(高德地图)瓦片下载/缓存,使用Python实现、arcgis.js(三)-CSDN博客

1、导入自定义瓦片资源包

用户导入自己已经下载好的瓦片资源包。

可以手动上传的瓦片资源(也可以选择上传到已经上传的文件包下,其实就是合并资源包,与之前的资源包放再同一个目录下),可以手动删除已经上传过的瓦片资源,

界面展示一个list列表,用户可以选择使用哪一个资源包

1.1 界面展示

选择自己已经上传的瓦片地图类型
自定义地图1

上传自己下载好的瓦片压缩包
自定义地图2

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/

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
使用Python爬取高德地图的XYZ瓦片,可以使用以下步骤进行操作: 1. 导入必要的库和模块,包括`requests`用于发送HTTP请求,`Pillow`用于处理图像数据。 2. 构建请求URL。高德地图的XYZ瓦片URL格式为:`http://wprd03.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}`,其中`{x}`表示瓦片的x坐标,`{y}`表示y坐标,`{z}`表示缩放级别。 3. 使用循环遍历需要下载瓦片的x和y坐标,并发送GET请求获取瓦片数据。可以根据具体情况设定循环范围和缩放级别。 4. 将获取到的瓦片数据保存为图片文件。可以使用`Pillow`库的`Image`模块将数据解码为图片,然后保存到本地文件夹中。 下面是一个简单的Python代码示例: ```python import requests from PIL import Image # 构建请求URL url_template = "http://wprd03.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}" # 设置需要下载瓦片的范围和缩放级别 min_x = 0 max_x = 10 min_y = 0 max_y = 10 zoom_level = 10 # 循环遍历需要下载瓦片 for x in range(min_x, max_x+1): for y in range(min_y, max_y+1): # 构建请求URL url = url_template.format(x=x, y=y, z=zoom_level) # 发送GET请求获取瓦片数据 response = requests.get(url) # 将获取到的瓦片数据保存为图片文件 file_name = f"tile_{zoom_level}_{x}_{y}.png" with open(file_name, "wb") as f: f.write(response.content) print("瓦片下载完成。") ``` 上述代码将会下载高德地图的XYZ瓦片,保存为相应的图片文件,图片文件的命名格式为`tile_{缩放级别}_{x坐标}_{y坐标}.png`。根据实际需求,可以调整代码中的循环范围、URL模板、保存文件的路径等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值