Я извлекаю данные из базы данных MySQL с помощью AJAX/jQuery, а затем выполняю некоторые вычисления (расстояние между координатами) на стороне клиента. Я обнаружил, что это довольно уместно в браузере и хотелось бы сделать это на стороне сервера.Расчет расстояния с PHP для нескольких точек
Моих возвращаемых данных JSON выглядят следующим образом:
{
"result": [
["148", "osmand", "2", "2016-03-26 13:48:04", "2016-03-26 13:48:01", "2016-03-26 13:48:01", "1", "-39.094856", "46.166472", "1432.7", "0", "0", "20 Maretha street", "{\"battery\":\"0\",\"ip\":\"105.5.117.20\"}"],
["149", "osmand", "2", "2016-03-26 13:48:24", "2016-03-26 13:48:22", "2016-03-26 13:48:22", "1", "-39.099305", "46.162392", "1435.26", "0", "0", "7 Ernst street", "{\"battery\":\"0\",\"ip\":\"105.5.117.20\"}"],
["150", "osmand", "2", "2016-03-26 13:48:45", "2016-03-26 13:48:43", "2016-03-26 13:48:43", "1", "-39.099305", "46.162392", "1435.62", "0", "0", "7 Ernst street", "{\"battery\":\"0\",\"ip\":\"105.5.117.20\"}"],
],
"errors": false
}
Седьмое и восьмое значение координата. В настоящее время я вычисляю расстояние, вычерчивая координаты, а затем вытягивая полилинию, а затем вычисляя расстояние от полилинии в листовке.
Я однако нашел некоторые примеры PHP код, который вычисляет расстояние между двумя точками:
class test {
public function GetDistance($lat1, $lng1, $lat2, $lng2) {
$radLat1 = $lat1*3.1415926535898/180.0;
$radLat2 = $lat2*3.1415926535898/180.0;
$a = $radLat1 - $radLat2;
$b = ($lng1*3.1415926535898/180.0) - ($lng2*3.1415926535898/180.0);
$s = 2 * asin(sqrt(pow(sin($a/2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b/2), 2)));
$s = $s * 6378.137; // EARTH_RADIUS;
$s = round($s * 1000,3);
return $s;
}
}
например, использование
$obj=new test();
$dis=$obj->GetDistance($lat1,$lon1,$lat2,$lon2);
Мой PHP код в настоящее время выглядит следующим образом:
<?php
$inputvalues = $_POST;
$errors = false;
$result = false;
include_once 'database.php';
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
foreach ($inputvalues as $key => $value) {
if(isset($value) && !empty($value)) {
$inputvalues[$key] = $mysqli->real_escape_string($value);
} else {
$errors[$key] = 'The field '.$key.' is empty';
}
}
if(!$errors) {
$addresult = "
SELECT * FROM positions WHERE `fixtime` BETWEEN '" . $inputvalues['start'] . "' AND '" . $inputvalues['end'] . "' AND deviceid='" . $inputvalues['deviceid'] . "'
";
if($result = $mysqli->query($addresult)) {
while($row = $result->fetch_all())
{
$returnResult = $row;
}
}
}
mysqli_close($mysqli);
echo json_encode(['result' => $returnResult, 'errors' => $errors]);
exit;
?>
Как это реализовать в m y код? Я не знаю, как получить координаты из результата mysql, выполнить расчет для каждой координаты, а затем вывести его через JSON.
Извините, если это основной или широкий вопрос, я очень новичок в PHP, и я все еще участвую.
Вы хотите рассчитать расстояние между каждой точкой до любой другой точки? Это будет очень дорого, независимо от того, где вы это делаете - на клиенте или на сервере. (в зависимости от количества точек, конечно). Расстояние от одной точки (например, ваше текущее местоположение) до списка точек - это другое дело, из которого вы после? – Eihwaz
Это для навигации? Общий радиус земли не даст вам правильного результата, если это так. В идеале создайте матрицу расстояний mxn с помощью API Goolge, https://developers.google.com/maps/documentation/distance-matrix/ – Shailesh
От точки A до точки B до точки C и т. Д. Для возвращаемых результатов. –