用php发送Android的经纬度,计算从db接收到的地点的距离,并按距离排序



我要实现的函数是从DB中获取数据,并根据从用户接收到的经纬度按距离顺序对用户和商店的位置进行排序。到目前为止,我所做的工作是按索引顺序对商店进行排序,并在屏幕上显示它们,并获取用户的坐标。但是,有一个问题,从用户接收到的坐标被发送到php,并且距离是根据从db接收到的数据计算和排序的。这是我在开始时编写的php代码,它没有引起任何错误,并且成功地按索引顺序对存储进行排序并在屏幕上显示它们。$con = mysqli_connect(");

<?php 
//echo "hello world!";
error_reporting(E_ALL);
ini_set("display_errors", 1);
$con = mysqli_connect(""); 
mysqli_set_charset($con,"utf8"); 

$res = mysqli_query($con, "select * from TABLE"); 

$place = array(); 

while($row = mysqli_fetch_row($res)) { 
array_push($place, array('name'=>$row[1],'latitude'=>$row[2],'longitude'=>$row[3])); } 
echo json_encode(array("place"=>$place),JSON_UNESCAPED_UNICODE); 

mysqli_close($con); 

?>

这是我写的android工作室内的java代码,以获取坐标并将它们发送到php。php地址在每次运行时都被替换为合适的地址。

double user_latitude = gpsTracker.getLatitude();
double user_longitude = gpsTracker.getLongitude();
String storeURL = "phpaddress?user_latitude=" + user_latitude + "&user_longitude=" + user_longitude;

我修改的php代码从php中得到这个并按距离排序,如下所示:

<?php 
//echo "hello world!";
error_reporting(E_ALL);
ini_set("display_errors", 1); 
$con = mysqli_connect("“); // 
mysqli_set_charset($con,"utf8"); 
$user_latitude=$_GET['user_latitude'];
$user_longitude=$_GET['user_longitude'];
$sql = "SELECT (
(6371*acos(cos(radians(" . $user_latitude . "))*cos(radians(latitude))
*cos(radians(longitude)-radians(" . $user_logitude . "))
+sin(radians(" . $user_latitude . "))*sin(radians(latitude))))
AS distance
FROM
TABLE
ORDER BY
distance
DESC";

$res = mysqli_query($con, $sql); 
$place = array(); 

while($row = mysqli_fetch_row($res)) { 
array_push($place, array('name'=>$row[1],'latitude'=>$row[2],'longitude'=>$row[3])); } 
if( (($_SERVER['REQUEST_METHOD'] == 'POST') && isset($_POST['submit'])) || $android )
{

echo json_encode(array("place"=>$place),JSON_UNESCAPED_UNICODE); 


mysqli_close($con); 

?>

我是一个编程初学者,所以代码中有很多没有经验的部分是我在谷歌上搜索并粗略地组合在一起的。我在应用代码时遇到的一个问题是,

SELECT (
(6371*acos(cos(radians(" . $user_latitude . "))*cos(radians(latitude))
*cos(radians(longitude)-radians(" . $user_logitude . "))
+sin(radians(" . $user_latitude . "))*sin(radians(latitude))))
AS distance

在这里,它是纬度变量是否正在接收我设置的数据库的纬度变量。我连接到数据库,但似乎我想要的表的列值被省略了。此外,在我的表的列中没有这样的变量,称为距离的变量,所以我想知道是否应该把像AS距离这样的代码,按距离排序。我并不是要教你这一点知识,我只是想问你,这是否与你无法实现它有关。

MySQL 5.7引入了ST_Distance_Sphere,这是一个本地函数,用于计算地球上两点之间的距离。

你应该访问这篇文章

使用MySQL计算距离

最新更新