Получите расстояние от 10 км

У меня есть таблица мест, в которой есть столбец широты, долготы, в котором указано его местоположение. Я хочу получить местоположения из таблицы мест и получить места, которые находятся рядом с текущим местоположением пользователя.

Текущее местоположение будет дано в качестве параметров функции.

Для этого 1-го я попытался получить все значения широты и долготы из таблицы площадок, создав их массив.

Затем я попытался рассчитать расстояние для каждого места в массиве мест. Но он дает ошибку для массива $ расстояний, который я создал.

Я новичок в php, так что понятия не имею, как это сделать.

Я хочу вернуть местоположения, которые находятся в 10 км от текущего местоположения пользователя.

функция поиска:

public function searchVendors($fields)
{

try {

$lat1 = $fields -> lat1;
$lat2 = $fields -> lon1;

$con = DB::getConnection();

$query = "SELECT `lattitude`,`longitude` FROM venues";

$rs = mysqli_query($con,$query) or die (json_encode(array("result"=>-1, "message"=>mysql_error())));
$n = mysqli_num_rows($rs);

$venues = array();

if ( $n > 0 ) {

while ( $row = mysqli_fetch_assoc($rs)) {
$venues[] = $row;
}

$distances = array();

foreach($venues as $venue) {

$distance = (((acos(sin((".$latitude."*pi()/180)) * sin((`Latitude`*pi()/180))+
cos((".$latitude."*pi()/180)) * cos((`Latitude`*pi()/180)) *
cos(((".$longitude."- `Longitude`)*pi()/180))))*180/pi())*60*1.1515*1.609344)

$distances[] = $distance;

}

$result = array("result"=>1, "message"=>"success", "distances" => $distances);
return json_encode($result);

} else {
$result = array("result"=>-1, "message"=>"Event list is empty");
return json_encode($result);
}
} catch(DBConnectionException $e) {
$result = array("result"=>-1, "message"=> $e -> getMessage());
return json_encode($result);
}
return null;
}

getVendors php:

<?php
header("Content-type: application/json");

if ( $_SERVER['REQUEST_METHOD']=='POST') {
include_once ("../include/Vendor.php");
try {

$con = DB::getConnection();

$raw = file_get_contents("php://input");
$data = json_decode($raw, true);

$v = new Vendor();
$response = $v -> searchVendors($data);

json_encode($response);

if ( $response == null ) {
$response = json_encode(array("result" => -2, "message" => "Empty result"));
echo $response;
} else {
echo $response;
}
} catch(Exception $e) {
$result = array("result" => -1, "message" => $e -> getMessage());
echo json_encode($result);
}
}

?>

Редактировать: функция поиска

 public function searchVendors($fields)
{try{

$lat1 = $fields -> lat1;
$lat2 = $fields -> lon1;

$con = DB::getConnection();

$query = "SELECT `lattitude`,`longitude` FROM venues";

$rs = mysqli_query($con,$query) or die (json_encode(array("result"=>-1, "message"=>mysql_error())));
$n = mysqli_num_rows($rs);

$venues = array();

if ( $n > 0 ) {

while ( $row = mysqli_fetch_assoc($rs)) {
$venues[] = $row;
}

$distances = array();

foreach($venues as $venue)
{
$distance = (((acos(sin((".$latitude."*pi()/180)) * sin((`Latitude`*pi()/180))+
cos((".$latitude."*pi()/180)) * cos((`Latitude`*pi()/180)) *
cos(((".$longitude."- `Longitude`)*pi()/180))))*180/pi())*60*1.1515*1.609344);

if($distance < 10)
{

$distances[] = $distance;
}

}

$result = array("result"=>1, "message"=>"success", "distances" => $distances);

return json_encode($result);

} else {
$result = array("result"=>-1, "message"=>"Event list is empty");
return json_encode($result);
}
} catch(DBConnectionException $e) {
$result = array("result"=>-1, "message"=> $e -> getMessage());
return json_encode($result);
}
return null;
}

получить вывод, как это:

   {
"result": 1,
"message": "success",
"distances": [
0,
0,
0,
0,
0,
0,
0,
0
]
}

Как мне этого добиться? Что я должен изменить в своем коде? Может кто-нибудь помочь, пожалуйста? Спасибо..

0

Решение

Вы можете определить расстояние и порядок в самой инструкции MySQL. Вам нужно будет определить широту / долготу по текущему адресу, указанному пользователем при поиске, а затем использовать следующий код:

SELECT *,
( 3959 * acos( cos( radians($latitude) ) * cos( radians( lattitude ) )
* cos( radians(longitude) - radians($longitude)) + sin(radians($latitude))
* sin( radians(lattitude)))) AS distance
FROM venues
ORDER BY distance;
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]