将经纬度坐标划分为子坐标(较小的正方形)?
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
我有一个矩形的 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());