如何计算lat长度的距离并选择php中的最短距离

时间:2017-01-05 07:17:15

标签: javascript php mysql database

这里我要计算位置之间的距离,计算后的数据将只显示最小距离。但我很困惑如何根据以下数据制作:

我的wp_posts: data1

这里是我的wp_postmeta:

here

这里是我的代码:

<?php
$latitude = "23.139422";  
$longitude = "-82.382617"; 

mysql_query( 'SELECT ( 3959 * acos( cos( radians( '.$latitude.' ) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians( '.$longitude.' ) ) + sin( radians( '.$latitude.' )) 
    * sin( radians( latitude ) ) ) ) 
     AS distance from wp_posts 
     HAVING distance <= 100 
     ORDER BY distance ASC'
 )

我不知道如何通过id post_id

获取纬度和经度

有人告诉我在我的代码中需要什么,所以它可以像我想要的那样工作吗?谢谢kyu

-

1 个答案:

答案 0 :(得分:1)

这是你从meta获得纬度和经度的方法:

SELECT wp_posts.ID, pm1.meta_value, pm2.meta_value
FROM wp_posts 
    LEFT JOIN wp_postmeta AS pm1 
        ON pm1.post_id = wp_posts.ID
            AND pm1.meta_key = 'latitude'
    LEFT JOIN wp_postmeta AS pm2 
        ON pm2.post_id = wp_posts.ID
            AND pm2.meta_key = 'longitude';

如果我们尝试将此应用于您的SQL语句(假设您的配方正在运行):

SELECT ( 3959 * acos(cos( radians( '.$latitude.' ) ) * cos( radians( pm1.meta_value)) 
    * cos( radians( pm2.meta_value ) - radians( '.$longitude.' ) ) 
    + sin( radians( '.$latitude.' )) 
    * sin( radians( pm1.meta_value) ) ) ) AS distance 
FROM wp_posts 
    LEFT JOIN wp_postmeta AS pm1 
        ON pm1.post_id = wp_posts.ID
            AND pm1.meta_key = 'latitude'
    LEFT JOIN wp_postmeta AS pm2 
        ON pm2.post_id = wp_posts.ID
            AND pm2.meta_key = 'longitude'            
HAVING distance <= 100 
ORDER BY distance ASC;

它可能看起来很复杂,但如果你仔细观察第一个,那就不是了。它应该帮助您了解如何通过使用不同的别名(pm1表示纬度,pm2表示经度)从同一表中检索同一记录的数据,并将其连接两次。

希望它有所帮助。