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

如何重构lat/lng坐标数组以提取各区块的闭合坐标集合

行线坐标数组转闭合区块坐标数组实现方案

假设你有一个嵌套坐标数组,结构为4条行线×7个坐标点,每条行线对应场地的横向线条,需要将其拆分为独立的闭合区块坐标集合,每个区块包含四个角点并以起点收尾闭合。

核心逻辑

4条行线可划分出3行横向区块,7个点可划分出6列纵向区块,最终得到 3×6=18 个独立区块。每个区块的四个角点按以下规则提取:

  • 左上角:第i行第j个坐标
  • 右上角:第i行第j+1个坐标
  • 右下角:第i+1行第j+1个坐标
  • 左下角:第i+1行第j个坐标

提取后按顺序排列,最后重复起点坐标完成闭合。

代码实现(JavaScript)

// 示例输入:4行7列的经纬度坐标数组
const rowCoordinates = [
  [{lat: 1, lng: 1}, {lat:1, lng:2}, {lat:1, lng:3}, {lat:1, lng:4}, {lat:1, lng:5}, {lat:1, lng:6}, {lat:1, lng:7}],
  [{lat: 2, lng: 1}, {lat:2, lng:2}, {lat:2, lng:3}, {lat:2, lng:4}, {lat:2, lng:5}, {lat:2, lng:6}, {lat:2, lng:7}],
  [{lat: 3, lng: 1}, {lat:3, lng:2}, {lat:3, lng:3}, {lat:3, lng:4}, {lat:3, lng:5}, {lat:3, lng:6}, {lat:3, lng:7}],
  [{lat: 4, lng: 1}, {lat:4, lng:2}, {lat:4, lng:3}, {lat:4, lng:4}, {lat:4, lng:5}, {lat:4, lng:6}, {lat:4, lng:7}]
];

function convertToBlockCoordinates(rows) {
  const blocks = [];
  const rowCount = rows.length;
  const colCount = rows[0].length;

  // 遍历所有区块的顶部行索引
  for (let i = 0; i < rowCount - 1; i++) {
    // 遍历所有区块的左列索引
    for (let j = 0; j < colCount - 1; j++) {
      const topLeft = rows[i][j];
      const topRight = rows[i][j+1];
      const bottomRight = rows[i+1][j+1];
      const bottomLeft = rows[i+1][j];
      // 构建顺时针闭合的区块坐标数组
      const block = [topLeft, topRight, bottomRight, bottomLeft, topLeft];
      blocks.push(block);
    }
  }

  return blocks;
}

// 执行转换并输出结果
const blockCoordinates = convertToBlockCoordinates(rowCoordinates);
console.log(blockCoordinates);

注意事项

  • 坐标排列顺序可根据需求调整(比如改为逆时针),只要保证四个角点能形成闭合的多边形即可
  • 若输入的行线为纵向线条,只需调换遍历的行、列维度即可适配
  • 需确保输入的每行坐标数量一致,否则建议在函数开头添加参数校验逻辑

内容的提问来源于stack exchange,提问作者Deep Kakkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:30:50