AJAX/jQueryを使用してMySQLデータベースからデータを取得し、クライアント側でいくつかの計算(座標間の距離)を行っています。私はこれがかなりブラウザに課税され、むしろサーバー側でこれをやりたいと思っています。複数の点で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
}
7番目と8番目の値は座標です。私は現在、座標をプロットしてポリラインを描き、ポリラインのリーフレット内の距離を計算することによって距離を計算しています。
しかし私は、2点間の距離を算出し、いくつかのサンプル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;
?>
:私の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);
を
これをmに実装するにはyコード?私は、mysqlの結果から座標を取得する方法を知りません、それぞれの座標の計算を行い、JSON経由で出力します。
申し訳ありませんが、これは基本的な質問や広範な質問、私は非常にPHPに新しいと私はまだ学んでいます。
あなたは、各点と他の点との間の距離を計算することを意味しますか?これは、クライアントまたはサーバー上で、これを行っている場所にかかわらず、非常にコストがかかります。 (ポイント数にもよりますが)シングルポイント(現在の場所など)からポイントのリストまでの距離は、別の問題です。 – Eihwaz
これはナビゲーション用ですか?もしそうなら、一般的な地球半径はあなたに正しい結果を与えません。 Goolge API https://developers.google.com/maps/documentation/distance-matrix/ – Shailesh
を使用して、距離のmxn行列を作成することが理想的です。返された結果の点Aから点Bから点Cまで。 –