gpt4 book ai didi

php - 地理编码 - 获取位置

转载 作者:行者123 更新时间:2023-11-29 00:49:34 25 4
gpt4 key购买 nike

如果我有一张 table

id, location, latitude, longitude

我会有一个位置代码:例如 (13.779242,100.472915)。

!有 2 个问题:我应该为纬度和经度使用什么字段类型?双倍的?或者空间的东西?但这不是更适合计算距离吗?

无论如何,我想找到位置(或最准确的位置)如果我只做这两个查询,我是不是在想很容易:

Select * from location_table WHERE latitude > 13.779242 AND longitude > 100.472915." LIMIT 1"; // return as row 1
Select * from location_table WHERE latitude < 13.779242 AND longitude < 100.472915." LIMIT 1"; // return as row2

然后做一个比较

$lat_dis_1 = $row1->latitude - 13.779242;
$lat_dis_2 = 13.779242 - $row2->latitude;

if ($lat_dis_1 > $lat_dis_2) {
// row2 was closer
} else {
//row1 closer
}

经度也一样...还是我在这里想得太简单了?

最佳答案

您首先要考虑的是,距离在圆形而不是方形中增加,这意味着仅分别比较经度和纬度可能会导致错误的结果,尤其是在距离较长的情况下。这是一个公式,它解释了如何相对简单地计算两点之间的真实距离的基本思想:http://www.purplemath.com/modules/distform.htm .

还有一个点是当你越过日期变更线时,2 个点在地理上可能相隔几公里,但仅使用这种方法会出现在半个地球之外。

还有一个问题是,与准确性相比,您期望从中获得什么样的性能。如果准确性不是那么重要但速度很重要,那么使用简单的平方比较会更有效。另一种可能性是将这两种技术结合起来。

第一种技术的示例是(未测试 :)):

SELECT SQRT(POW(latitude-[INPUT LATITUDE], 2)+POW(longitude-[INPUT LONGITUDE])) as dist, * FROM location_table ORDER BY dist ASC LIMIT 1

关于php - 地理编码 - 获取位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9149030/

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