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

新手求助:遍历Fusion Layer匹配名称高亮多边形的JS实现

解决Fusion Tables多边形匹配高亮的问题

嘿,刚接触JavaScript和Web开发就能折腾Fusion Tables,已经超棒啦!我来帮你搞定这个“匹配名称高亮多边形”的需求~

核心思路

你需要做的是:遍历你的JavaScript对象数组,把每个元素的名称和Fusion Layer里多边形的名称做对比,匹配成功的就修改它的样式来高亮,同时控制最多高亮5个。

完整代码示例(结合你的片段优化)

假设你的Fusion Layer已经初始化好了,并且表中有name(多边形名称)和ROWID(行唯一标识)字段,我们可以这样写:

function fillcolour(match) {
  var limit = 0; // 限制最多高亮5个
  const fusionTableId = "你的Fusion Tables表ID"; // 替换成你的实际表ID
  // 把匹配名称转成集合,提升批量匹配的速度
  const targetNames = new Set(match.map(item => item.name.trim().toLowerCase()));

  // 查询Fusion Tables中的名称与行ID数据
  fusionLayer.query({
    select: "name, ROWID",
    from: fusionTableId
  }, function(response) {
    // 遍历返回的每一行数据
    response.rows.forEach(function(row) {
      const polygonName = row[0].trim().toLowerCase();
      const rowId = row[1];

      // 检查名称是否匹配,且未达到限制
      if (targetNames.has(polygonName) && limit < 5) {
        // 针对匹配的多边形设置高亮样式
        fusionLayer.setStyle({
          filter: `ROWID = ${rowId}`, // 精准筛选当前行的多边形
          polygonOptions: {
            fillColor: "#FF5733", // 亮橙色高亮,可按需替换颜色
            fillOpacity: 0.6,
            strokeColor: "#000000",
            strokeWeight: 2
          }
        });
        limit++;
        // 达到限制就终止循环,避免不必要的计算
        if (limit >= 5) return;
      }
    });
  });
}

关键细节说明

  • 提升匹配效率:把match数组转成Set(targetNames),用has()判断匹配比循环遍历快很多,尤其当你的响应数组有126个元素时,这点能明显优化性能。
  • 避免匹配误差:统一把名称转成小写并去除首尾空格,解决因大小写、空格差异导致的匹配失败问题。
  • 精准定位多边形:用ROWID来筛选单个多边形,避免一次性修改所有样式,确保高亮目标准确。
  • 样式自定义:polygonOptions里的颜色、透明度、边框都可以根据需求调整,比如把fillColor换成#00FF00就是绿色高亮。

额外注意事项

  • 确保你已经正确加载了Google Maps API和Fusion Tables API,并且表的权限设置为“公开可访问”,否则会无法获取数据。
  • 如果你的match数组里的元素结构不是{name: "xxx"},记得把item.name改成你实际的属性名,比如item.regionName。

内容的提问来源于stack exchange,提问作者Tom Moon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:49:17