/** * @param $coord * @return string */ public function get_circle_cords($coord) { $out = ""; $angularDistance = $coord->radius / 6378137; $center_lat = deg2rad($coord->lat); $center_lon = deg2rad($coord->lon); for ($i = 0; $i <= 360; $i++) { $bearing = deg2rad($i); $lat = Asin(Sin($center_lat) * Cos($angularDistance) + Cos($center_lat) * Sin($angularDistance) * Cos($bearing)); $dlon = Atan2(Sin($bearing) * Sin($angularDistance) * Cos($center_lat), Cos($angularDistance) - Sin($center_lat) * Sin($lat)); $lon = fmod($center_lon + $dlon + M_PI, 2 * M_PI) - M_PI; $latOut = rad2deg($lat); $lonOut = rad2deg($lon); $out .= $lonOut . ',' . $latOut . ',' . 0 . ' '; } return $out; }
function getArcCords($cords, $start, $end, $dir, $prev_lat = 0, $prev_lon = 0) { $start = modulo($start, 360); $end = modulo($end, 360); $out = ""; $out2 = ""; $angularDistance = $cords[2] / 6371000; $count = 0; if ($dir < 0) { $total_angle = -($end - $start); } else { $total_angle = $end - $start; } $total_angle = modulo($total_angle, 360); if ($total_angle == 0) { $total_angle = 360; } for ($i = $start; $count <= 48; $i += $dir * $total_angle / 48) { //$out.= "$i"; $bearing = deg2rad($i); $lat = Asin(Sin($cords[0]) * Cos($angularDistance) + Cos($cords[0]) * Sin($angularDistance) * Cos($bearing)); $dlon = Atan2(Sin($bearing) * Sin($angularDistance) * Cos($cords[0]), Cos($angularDistance) - Sin($cords[0]) * Sin($lat)); $lon = fmod($cords[1] + $dlon + M_PI, 2 * M_PI) - M_PI; $latOut = rad2deg($lat); $lonOut = rad2deg($lon); $out .= encode($latOut - $prev_lat) . encode($lonOut - $prev_lon); $out2 .= "{$lonOut},{$latOut},0 "; $prev_lat = $latOut; $prev_lon = $lonOut; $count++; } return array($out, $out2); }
function getArcCords($cords, $start, $end, $dir, $prev_lat = 0, $prev_lon = 0) { $out = ""; $out2 = array(); $angularDistance = $cords[2] / geometry::EARTH_RADIUS; $count = 0; if ($dir < 0) { $totat_angle = $end - $start; } else { if ($start > $end) { $end += 360; $totat_angle = -($start - $end); } else { $totat_angle = -($start - $end) - 360; } } for ($i = $start; $count <= 48; $i += $totat_angle / 48) { //$out.= "$i"; $bearing = deg2rad($i); $lat = Asin(Sin($cords[0]) * Cos($angularDistance) + Cos($cords[0]) * Sin($angularDistance) * Cos($bearing)); $dlon = Atan2(Sin($bearing) * Sin($angularDistance) * Cos($cords[0]), Cos($angularDistance) - Sin($cords[0]) * Sin($lat)); $lon = fmod($cords[1] + $dlon + M_PI, 2 * M_PI) - M_PI; $latOut = rad2deg($lat); $lonOut = rad2deg($lon); $out .= encode($latOut - $prev_lat) . encode($lonOut - $prev_lon); $out2[] = array($lonOut, $latOut); $prev_lat = $latOut; $prev_lon = $lonOut; $count++; } return array($out, $out2); }