You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过编程批量修改maps.google.com已创建地图的图层名称?

核心原因说明

你当前脚本报错且无法生效有两个核心问题:

  1. 你在Drive中读取的是Google我的地图专属格式文件,不属于普通二进制/文本文件,DriveApp原生接口不支持直接读取其内容,所以触发getBlob相关报错
  2. 即使是标准KMZ文件,本质也是ZIP压缩包,直接调用getDataAsString()只能拿到乱码,无法匹配到XML标签内容做替换

可行解决方案

方案一:批量导出本地处理后回传(实现门槛更低)

  • 全选Drive中存储的67份我的地图文件,右键选择下载,平台会自动将所有地图导出为KMZ格式并打包下载到本地
  • 本地编写简单脚本批量处理所有KMZ文件:
    1. 逐个解压KMZ压缩包,获取根目录下的doc.kml文本文件
    2. 对kml文件执行全局字符串替换,完成所有待修改图层名的更新
    3. 将修改后的kml文件重新压缩为KMZ格式,保证kml文件在压缩包根目录
  • 将处理完成的KMZ文件批量上传回Drive,打开验证图层名修改正确后,可删除或归档原文件即可

方案二:通过My Maps API在Apps Script中批量修改(无需本地操作)

首先需要提前开启Google My Maps API,给你的Apps Script项目绑定对应权限,再运行如下脚本即可批量处理:

function batchUpdateMapLayerNames() {
  // 替换为存储67份地图的Google Drive文件夹ID
  const mapFolder = DriveApp.getFolderById("替换为你的文件夹ID");
  const mapFiles = mapFolder.getFilesByMimeType("application/vnd.google-apps.map");
  // 配置待替换的图层名映射,可添加多组替换规则
  const layerNameReplaceRules = {
    "2021 Proposed PA House": "2021 FDPA Proposed PA House"
  };

  while (mapFiles.hasNext()) {
    const currentMap = mapFiles.next();
    const currentMapId = currentMap.getId();
    // 获取当前地图的所有图层
    const mapLayers = Maps.MapsLayers.list(currentMapId).layers;
    mapLayers.forEach(layer => {
      if (layerNameReplaceRules.hasOwnProperty(layer.name)) {
        const updatedLayerInfo = {
          name: layerNameReplaceRules[layer.name]
        };
        // 调用接口仅更新图层名字段
        Maps.MapsLayers.patch(updatedLayerInfo, currentMapId, layer.id, {
          updateMask: "name"
        });
      }
    })
  }
}

注意:运行脚本前需要在Apps Script编辑器中添加My Maps API服务,运行时按提示完成权限授权即可。

内容的提问来源于stack exchange,提问作者Frank Wilder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:36:04