gpt4 book ai didi

mysql - 从 latitudeDelta 和 longitudeDelta 获取以米/公里为单位的半径

转载 作者:行者123 更新时间:2023-12-02 00:06:02 24 4
gpt4 key购买 nike

我根据 2 点 latitudelongitude 之间的设定距离从后端 (laravel) 请求数据,例如。 Lat= 78.3232 and Long = 65.3234 and distance = 30 miles/kilometers ,获取 30 英里以内的行。

我遇到的问题是distance

我正在使用 react-native-maps 并且放大/缩小是基于 latitudeDeltalongitudeDelta 而我没有知道如何在用户放大/缩小时计算它们的半径/距离发送到后端并根据点和半径/距离获取数据

目前,我在客户端有这个功能。确定当用户更改区域时何时获取新数据。但它有一个硬编码的问题 distance (5.0 KM)

const _onRegionChangeComplete = (onCompletedregion: Region) => {
if (initialRegion) {
const KMDistance = helper.distance(
initialRegion?.latitude,
initialRegion?.longitude,
onCompletedregion.latitude,
onCompletedregion.longitude,
"K"
);

if (KMDistance > 5.0) {
props.getNearByReports({ // request backend if distance difference more than 5 kilometers
latitude: onCompletedregion.latitude,
longitude: onCompletedregion.longitude
});
}
}
};

helper.distance//获取初始点与用户更改区域后的距离差

function distance(
lat1: number,
lon1: number,
lat2: number,
lon2: number,
unit: string
) {
var radlat1 = (Math.PI * lat1) / 180;
var radlat2 = (Math.PI * lat2) / 180;
var theta = lon1 - lon2;
var radtheta = (Math.PI * theta) / 180;
var dist =
Math.sin(radlat1) * Math.sin(radlat2) +
Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
dist = Math.acos(dist);
dist = (dist * 180) / Math.PI;
dist = dist * 60 * 1.1515;
if (unit == "K") {
dist = dist * 1.609344;
}
if (unit == "M") {
dist = dist * 0.8684;
}
return dist;
}

distance 值在后端和前端(不应该)硬编码,因为当用户放大/缩小时,半径/距离也应该改变。我无法计算 latitudeDeltalongitudeDelta

的距离

//后端查询代码(简化)

SELECT
id, (
6371 * acos (
cos ( radians(78.3232) )
* cos( radians( lat ) )
* cos( radians( lng ) - radians(65.3234) )
+ sin ( radians(78.3232) )
* sin( radians( lat ) )
)
) AS distance
FROM markers
HAVING distance < 5 // hard-coded distance
ORDER BY distance
LIMIT 0 , 20;

最佳答案

latitudeDelta 是屏幕上可见的度数1 度 始终等于大约。 69 英里,因此您可以使用此 diameter = latitudeDelta * 69 计算当前可见区域的直径(以英里为单位)。这是假设屏幕处于纵向模式,因此 latitudeDelta 是较大的值。如果不是,请改用 longitudeDelta。希望我正确理解了您的问题,这很有帮助。

关于mysql - 从 latitudeDelta 和 longitudeDelta 获取以米/公里为单位的半径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60584887/

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