gpt4 book ai didi

javascript - 确定坐标是否在边界框内

转载 作者:行者123 更新时间:2023-11-30 13:50:04 25 4
gpt4 key购买 nike

我需要创建一个函数,给定 abc 返回一个 bool 值,指示是否 c 位于 ab 内。

所有变量都具有以下类型:

type Coordinate = {
lat: number;
lon: number;
};

我提出了一个解决方案,最初我认为是正确的,但在使用 Google map 进行测试后,我发现它是错误的。

功能:

function inBoundingBox(
bottomLeft: Coordinate,
topRight: Coordinate,
point: Coordinate
) {
let isLongInRange: boolean;
if (topRight.lon < bottomLeft.lon) {
isLongInRange = point.lon >= bottomLeft.lon || point.lon <= topRight.lon;
} else {
isLongInRange = point.lon >= bottomLeft.lon && point.lon <= topRight.lon;
}
return (
point.lat >= bottomLeft.lat && point.lat <= topRight.lat && isLongInRange
);
}

一个应该有效的示例:

const topRight: Coordinate = {
lat: -23.5273,
lon: -46.833881
};

const bottomLeft: Coordinate = {
lat: -23.537519,
lon: -46.840019
};

const point = {
lat: -23.52785,
lon: -46.840545
};

const result = inBoundingBox(bottomLeft, topRight, point);
console.log(result) // false, where should be true.

直观的表示是 here .

我需要帮助来找出代码到底错在哪里,以及如何修复它。

我也尝试使用Leaflet看是否有效,但结果是一样的:

function leafletContains(bottomLeft, topRight, pos) {
var bounds = new L.LatLngBounds(
new L.LatLng(bottomLeft.lat, bottomLeft.lon),
new L.LatLng(topRight.lat, topRight.lon)
);
return bounds.contains(new L.LatLng(pos.lat, pos.lon));
}

leafLetContains({ lat: -23.537519, lon: -46.840019 }, { lat: -23.5273, lon: -46.833881 }, { lat: -23.527811, lon: -46.840201 }) // false, where should be true.

最佳答案

边界框测试必须检查框的四个边。

球体表面的盒子不是矩形,因此很难使用 x,y 坐标。但使用“极”坐标(纬度、经度)就很容易了:

我不是 JavaScript 编码员,所以请原谅我在这段代码中的错误:

function inBoundingBox(
bottomLeft: Coordinate,
topRight: Coordinate,
point: Coordinate
) {
let isLongInRange: boolean;
let isLatiInRange: boolean;
isLongInRange = point.lon >= bottomLeft.lon && point.lon <= topRight.lon;
isLatiInRange = point.lat >= bottomLeft.lat && point.lat <= topRight.lat;
return ( isLongInRange && isLatiInRange );
}

假设bottomLeft.lon < topRight.lonbottomLeft.lat < topRight.lat

关于javascript - 确定坐标是否在边界框内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58437591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com