Нужна помощь в вычислении долготы и широты средней точки с использованием javascript из значений php

В настоящее время я работаю над проектом и запутался. Я запускаю приложение сопоставления, используя API карт google, и мне нужно вычислить среднюю точку между двумя точками, которая составляет 4 общих балла (lat / long), которые хранятся в виде значений php от пользователя.

Формула, которую я использую в настоящее время, требует преобразования моих значений, находящихся в градусах, к радианам. И мне тогда нужно преобразовать их обратно в градусы, чтобы подключить часть отображения google моего кода.

Мне нужно вычислить эту точку, чтобы я мог отображать ее как середину моей карты, чтобы она отображалась аккуратно и по центру.

Вот мой текущий код:

<?php ob_start(); ?> <?php $from = $_POST["from"]; $to = $_POST["to"]; $connection = mysql_connect("localhost", "dlazett", "PASSWORD"); mysql_select_db("dlazett", $connection); $f = mysql_query ("SELECT * FROM capstone WHERE id = '$from' ", $connection); $wfrom = mysql_fetch_array($f); $latf = $wfrom["lat"]; $lonf = $wfrom["lon"]; $t = mysql_query ("SELECT * FROM capstone WHERE id = '$to' ", $connection); $wto = mysql_fetch_array($t); $latt = $wto["lat"]; $lont = $wto["lon"]; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-… <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml"> <head> <title>UT Campus Compass</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name = "viewport" content = "width = device-width"> <meta name="apple-mobile-web-app-capable" content="yes" /> <script src="http://maps.google.com/maps?file=ap… type="text/javascript"></script> <script type="text/javascript"> function midpoint() { var lat2 = (<?php echo "$latf";?>) * (Math.PI/180); var lat1 = (<?php echo "$latt";?>) * (Math.PI/180); var dLon = (<?php echo "$lonf";?>-<?php echo "$lont";?>) * (Math.PI/180); var Bx = Math.cos(lat2) * Math.cos(dLon); var By = Math.cos(lat2) * Math.sin(dLon); var lat3 = Math.atan2(Math.sin(lat1)+Math.sin(lat2)… Math.sqrt( (Math.cos(lat1)+Bx)*(Math.cos(lat1)+Bx) + By*By) ); var lon3 = lon1 + Math.atan2(By, Math.cos(lat1) + Bx); var lat4 = lat3 * (180/Math.PI); var lon4 = lon3 * (180/Math.PI); } function initialize() { if (GBrowserIsCompatible()) { var map = new GMap2(document.getElementById("map_canva… map.setCenter(new GLatLng(lat4, lon4), 16); var polyline = new GPolyline([ new GLatLng(<?php echo "$latf";?>, <?php echo "$lonf";?>), new GLatLng(<?php echo "$latt";?>, <?php echo "$lont";?>) ], "#ff0000", 10); map.addOverlay(polyline); } } </script> </head> <body onload="initialize()" onunload="GUnload()"> <center> <div id="map_canvas" style="width: 425px; height: 600px"></div> <div id="message"></div> </body> </html> <?php ob_end_flush(); ?> 

Любая помощь будет принята с благодарностью.

Спасибо, Дэн

в PHP

 function midpoint ($lat1, $lng1, $lat2, $lng2) { $lat1= deg2rad($lat1); $lng1= deg2rad($lng1); $lat2= deg2rad($lat2); $lng2= deg2rad($lng2); $dlng = $lng2 - $lng1; $Bx = cos($lat2) * cos($dlng); $By = cos($lat2) * sin($dlng); $lat3 = atan2( sin($lat1)+sin($lat2), sqrt((cos($lat1)+$Bx)*(cos($lat1)+$Bx) + $By*$By )); $lng3 = $lng1 + atan2($By, (cos($lat1) + $Bx)); $pi = pi(); return ($lat3*180)/$pi .' '. ($lng3*180)/$pi; } 
 function distance($lat1, $lon1, $lat2, $lon2, $unit) { $theta = $lon1 - $lon2; $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); $dist = acos($dist); $dist = rad2deg($dist); $miles = $dist * 60 * 1.1515; $unit = strtoupper($unit); if ($unit == "K") { return ($miles * 1.609344); } else if ($unit == "N") { return ($miles * 0.8684); } else { return $miles; } } 

Эта функция поможет вам

Используйте Openlayers, и это помогает сделать это. http://www.openlayers.org/

Для версии javascript я преобразовал ответ @ vineesh.

 function midpoint ($lat1, $lng1, $lat2, $lng2) { $lat1 = $lat1 * 0.017453292519943295; $lng1 = $lng1 * 0.017453292519943295; $lat2 = $lat2 * 0.017453292519943295; $lng2 = $lng2 * 0.017453292519943295; $dlng = $lng2 - $lng1; $Bx = Math.cos($lat2) * Math.cos($dlng); $By = Math.cos($lat2) * Math.sin($dlng); $lat3 = Math.atan2( Math.sin($lat1)+Math.sin($lat2), Math.sqrt((Math.cos($lat1)+$Bx)*(Math.cos($lat1)+$Bx) + $By*$By )); $lng3 = $lng1 + Math.atan2($By, (Math.cos($lat1) + $Bx)); $pi = 3.141592653589793; $lat = ($lat3*180)/$pi; $lng = ($lng3*180)/$pi; return [$lat,$lng]; }