gpt4 book ai didi

javascript - 从我的地理位置计算最近的地方

转载 作者:行者123 更新时间:2023-11-29 05:37:42 25 4
gpt4 key购买 nike

我在 mysql 数据库中有一系列的地方,其中每个地方都有字段:纬度、经度和地址。我会根据通过地理定位获得的实际位置计算最近的地方。我会使用这里的函数:Google Map - find markers但是我怎样才能从 db 中获取所有值并放入 javascript 数组中呢?

最佳答案

选项 1:通过切换到支持 GeoIP 的数据库在数据库上进行计算。

选项 2:在数据库上进行计算:如果您使用的是 MySQL,那么以下存储过程应该会有所帮助

CREATE FUNCTION distance (latA double, lonA double, latB double, LonB double)
RETURNS double DETERMINISTIC
BEGIN
SET @RlatA = radians(latA);
SET @RlonA = radians(lonA);
SET @RlatB = radians(latB);
SET @RlonB = radians(LonB);
SET @deltaLat = @RlatA - @RlatB;
SET @deltaLon = @RlonA - @RlonB;
SET @d = SIN(@deltaLat/2) * SIN(@deltaLat/2) +
COS(@RlatA) * COS(@RlatB) * SIN(@deltaLon/2)*SIN(@deltaLon/2);
RETURN 2 * ASIN(SQRT(@d)) * 6371.01;
END//

选项 3:如果您的数据库中有纬度和经度索引,您可以通过使用您选择的脚本语言(minLat、maxLat、minLong 和 maxLong)计算出一个初始边界框来减少需要计算的计算次数,并限制基于该行到条目子集的行(WHERE latitude BETWEEN AND maxLat AND longitude BETWEEN AND maxLong)。然后MySQL只需要对该行的子集执行距离计算。

如果您正在使用 SQL 语句或存储过程来计算距离,那么 SQL 仍然必须查看数据库中的每条记录,并计算数据库中每条记录的距离,然后才能决定是否返回该行或丢弃它。由于计算执行起来相对较慢,如果您可以减少需要计算的行集,消除明显落在所需距离之外的行,那会更好,这样我们就只执行昂贵的计算较少的行数。

使用边界框就像先在 map 上绘制一个正方形,其左、右、上、下边缘与中心点的距离适当。然后我们的圆将在该框内绘制,圆上的最北端、最东端、最南端和最西端接触框的边界。有些行会落在该框之外,因此 SQL 甚至不会费心尝试计算这些行的距离。它只计算落在边界框内的那些行的距离,以查看它们是否也落在圆圈内。

关于javascript - 从我的地理位置计算最近的地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9349573/

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