/** * Матрица смежности * * @param array $poi - Массив точек с координатами * @param int $count - Кол-во POI для матрицы * * @return mixed * @internal param bool|int $count_poi */ function matrix($poi, $count = 21) { for ($i = 0; $count >= $i; $i++) { if (array_key_exists($i, $poi)) { $matrix[$i] = []; // будущий массив for ($v = 0; $count >= $v; $v++) { // Сравниваем id poi, есть true, то задаем 0 if ($poi[$i]['id'] == $poi[$v]['id']) { $matrix[$i][$v] = 0; } else { // Получаем радиант $sqrt = rad($poi[$i]['coordinates'], $poi[$v]['coordinates']); // Если радиант равен нулю, значит это первый граф if ($sqrt == 0) { $matrix[$i][$v] = 0; } else { $matrix[$i][$v] = round($sqrt, 10); } } } } // Добавляем в массив максимальное значение в горизонтальной плоскости // полученное методом сложения array_sum if (isset($matrix[$i])) { $matrix[$i]['max'] = array_sum($matrix[$i]); } } // end for return $matrix; }
$img = "img/cinema.jpg"; } else { if ($q == "bar") { $img = "img/bar.jpg"; } else { if ($q == "restaurant") { $img = "img/restaurant.jpg"; } else { $img = "img/library.jpg"; } } } while ($row = mysqli_fetch_assoc($lieu)) { $dLat = rad($lat - $row['lat_lieu']); $dLng = rad($lng - $row['lng_lieu']); $a = Math . sin(dLat / 2) * Math . sin(dLat / 2) + Math . cos(rad($row['lat_lieu'])) * Math . cos(rad($lat)) * Math . sin(dLong / 2) * Math . sin(dLong / 2); $c = 2 * Math . atan2(Math . sqrt(a), Math . sqrt(1 - a)); $distance = $R * $c; if ($distance < $rad) { echo '<div class="row"> <div class="media col-lg-10 col-lg-offset-1"> <div class="media-left"> <a href="#"> <img class="media-object" src="' . $img . '" alt="..." style="height: 60px;"> </a> </div> <div class="media-body"> <h3 class="media-heading"><a href="resultat3.php?q=' . $q . '&nom=' . $row['nom_lieu'] . '&adr=' . $row['adresse_lieu'] . '">' . $row['nom_lieu'] . '</a></h3> <p>Distance: ' . $distance . ' mètres</p> <p>Adresse:' . $row['adresse_lieu'] . '</p> </div>
function GetDistance($lat1, $lng1, $lat2, $lng2) { $EARTH_RADIUS = 6378.137; $radLat1 = rad($lat1); $radLat2 = rad($lat2); $a = $radLat1 - $radLat2; $b = rad($lng1) - rad($lng2); $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))); $s = $s * $EARTH_RADIUS; $s = round($s * 10000) / 10000; return $s; }
function getDistanceFromLatLonInKm($lat1, $lon1, $lat2, $lon2) { $R = 6371; // Radius of the earth in km $dLat = rad($lat2 - $lat1); // deg2rad below $dLon = rad($lon2 - $lon1); $a = sin($dLat / 2) * sin($dLat / 2) + cos(rad($lat1)) * cos(rad($lat2)) * sin($dLon / 2) * sin($dLon / 2); $c = 2 * atan2(sqrt($a), sqrt(1 - $a)); $d = $R * $c; // Distance in km return $d; }
function distance($A, $B) { $R = 6371; if (count($A) < 2 || count($B) < 2) { return -1; } list($x0, $y0) = rad($A); list($x1, $y1) = rad($B); if (!$x0 || !$y0 || !$x1 || !$y1) { return -1; } $alpha = abs(($y1 + $y0) / 2); $dAlpha = abs($y1 - $y0); $dBeta = abs($x1 - $x0); /* print "****************\n"; print "(".$A['lon'].",".$A['lat'].") - (".$B['lon'].",".$B['lat'].")\n"; print "a: $alpha\n dA: $dAlpha\n dB: $dBeta\n";*/ $res = $R * sqrt($dAlpha * $dAlpha + $dBeta * $dBeta * cos($alpha) * cos($alpha)); // print "Dist: ".$res."\n\n\n"; return $res; }