У меня есть таблица мест, где есть столбец широты, долготы, в которой указывается его местоположение. Я хочу получить места из таблицы мест и получить места, которые находятся рядом с текущим местоположением пользователя.Получите расстояние между 10 км.
Текущее местоположение будет дано как параметр функции.
Для этого 1-го я попытался получить всю широту и долготу из таблицы мест, в которых создан массив.
Затем я попытался рассчитать расстояние для каждого места в массиве мест. Но это дает ошибку для массива $ distance, который я создал.
Я новичок в 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);
}
}
?>
Edit: функция поиска
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
]
}
Как я могу это достичь? Что я должен изменить в своем коде? Может ли кто-нибудь помочь? Спасибо ..
Прежде чем попасть в него слишком много, вам не хватает точки с запятой после этого ' $ distance = ... 'statement. Это помогает? –
Я предполагаю, что ошибка, которую вы видите, говорит вам, что PHP не ожидает '$ distanceances' (потому что предыдущий оператор не был прерван). –
Да, это была проблема, но решение о том, что я получаю нулевой массив, вы можете проверить отредактированный код? @ Don'tPanic – Sid