Ich hole Daten aus einer MySQL-Datenbank mit AJAX/jQuery und dann einige Berechnungen (Abstand zwischen den Koordinaten) auf der Client-Seite. Ich habe festgestellt, dass dies im Browser ziemlich anstrengend ist und möchte dies eher auf der Serverseite tun.Berechnung der Entfernung mit PHP für mehrere Punkte
Meine zurück JSON-Daten wie folgt aussieht:
{
"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
}
Die siebte und achte Werte die Koordinaten sind. Ich berechne gerade den Abstand, indem ich die Koordinaten zeichne und dann eine Polylinie zeichne und dann den Abstand der Polylinie in der Broschüre berechne.
Ich fand jedoch einige Beispiel-PHP-Code, der Abstand zwischen zwei Punkten berechnet:
<?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;
?>
:
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;
}
}
Verwendungsbeispiel
$obj=new test();
$dis=$obj->GetDistance($lat1,$lon1,$lat2,$lon2);
derzeit Mein PHP-Code wie folgt aussieht
Wie kann ich das in m umsetzen? y-Code? Ich weiß nicht, wie man die Koordinaten aus dem mysql-Ergebnis erhält, mache die Berechnung für jede Koordinate und gebe sie dann über JSON aus.
Tut mir leid, wenn dies eine grundlegende oder breite Frage ist, ich bin sehr neu in PHP und ich lerne immer noch.
Sie meinen, die Entfernung zwischen jedem Punkt zu jedem anderen Punkt zu berechnen? Dies ist sehr kostspielig, egal wo Sie dies tun - auf dem Client oder auf dem Server. (abhängig von der Anzahl der Punkte, natürlich) Eine Entfernung von einem einzelnen Punkt (z. B. Ihrem aktuellen Standort) zu einer Liste von Punkten ist eine andere Frage, nach welcher Sie suchen? – Eihwaz
Ist dies für die Navigation? Der generische Erdradius gibt Ihnen in diesem Fall kein korrektes Ergebnis. Idealerweise erstellen Sie eine mxn-Entfernungsmatrix mithilfe der Google API, https://developers.google.com/maps/documentation/distance-matrix/ – Shailesh
Von Punkt A nach Punkt B nach Punkt C usw. für die zurückgegebenen Ergebnisse. –