将经纬度坐标划分为子坐标(较小的正方形)?

Dividing long and lat coordinates into sub-coordinates(smaller squares)?

我有一个矩形的 2 个长纬度点(左下角和右上角),我想根据我已有的底面积(长和纬度)将这个矩形分成更小的矩形。我已经知道我无法处理以米和千米为单位的经度和纬度,而是 地球表面形状近似值的度数

所取的点是通过带有4326 SRID的传单提取的,原始点也是如此。我需要“小方块”的中心或经纬度坐标。

例如,这是我的基本矩形 24.639567,46.782406 24.641452,46.785413,对于矩形,我想划分 24.584749,46.612782 24.603323,46.653809

首先,让我们把你的两个点变成传单边界对象:

const bounds - L.latLngBounds(point1, point2)

现在让我们选择一个样本间隔,这意味着在边界的宽度和高度上有多少个子矩形。例如,10 的采样大小将给出 100 个子矩形 (10 x 10),但如果您的子矩形不需要与主边界相同的纵横比,您可以选择两个单独的采样间隔(一个用于x 和 y)

const samplingInterval = 10 // easy to change

为了正确插入您的主要边界,我们将抓住它的角,以及经度的宽度和纬度的高度,称为 dLat 和 dLng(对于增量):

const sw = bounds.getSouthWest();
const nw = bounds.getNorthWest();
const ne = bounds.getNorthEast();

const dLat = ne.lat - sw.lat;
const dLng = ne.lng - nw.lng;

现在我们可以构建一个从原始边界外推的新边界数组:

let subBounds = [];

for (let i = 0; i < samplingInterval - 1; i++){
  for (let j = 1; j < samplingInterval; j++){
    const corner1 = [
      sw.lat + (dLat * i) / samplingInterval,
      sw.lng + (dLng * j) / samplingInterval
    ];
    const corner2 = [
      sw.lat + (dLat * (i + 1)) / samplingInterval,
      sw.lng + (dLng * (j + 1)) / samplingInterval
    ];
    subBounds.push(L.latLngBounds(corner1, corner2));
  }
}

现在要获得这些边界的中心,您可以对它们调用 .getCenter()

const centerPoints = subBounds.map(bounds => bounds.getCenter());

Working codesandbox