我被困住了,需要一些帮助。我有一个拥有超过3000纬度和经度的数据库,我正在尝试将它们转换为十进制lat和lon,这样我就可以显示两个坐标之间的距离。两个坐标在页面的url中传递。第一个(lat1和lon1)已经被转换但第二个(lat2和lon2)不是。我的数据库中的纬度和经度存储如下:26°56.34308'-094°41.32328'所以我认为应该删除逗号。我从一些来源获得了一些代码,但我不确定如何正确地将它们组合在一起。
///// Get the two locations from the url
$lat1 = $_GET[lat1];
$lon1 = $_GET[lon1];
////// lat2 & Lon2 are the ones that need to be converted
$lat2 = $_GET[lat2];
$lon2 = $_GET[lon2];
///// Convert lat2 & lon2 into decimal format
$pos1 = strrpos($mystring, "°");
$pos2 = strrpos($mystring, ".");
$pos3 = strrpos($mystring, "'");
// Get subsring from a string: substr(source, start, length)
$deg = substr($mystring, 0, $pos1);
$min = substr($mystring, $pos1, $pos2 - $pos1);
$sec = substr($mystring, $pos2, $pos3 - $pos2);
function DMStoDEC($deg,$min,$sec) {
// Converts DMS ( Degrees / minutes / seconds )
// to decimal format longitude / latitude
return $deg+((($min*60)+($sec))/3600);
}
//////calculate the distance
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;
}
}
// Miles
echo distance($lat1, $lon1, $lat2, $lon2, "m") . " miles<br><br>";
//Kilometers
echo distance($lat1, $lon1, $lat2, $lon2, "k") . " kilometers<br><br>";
//Nautical miles
echo distance($lat1, $lon1, $lat2, $lon2, "N") . " Nautical miles";
答案 0 :(得分:0)
数据库中有纬度和经度吗?什么样的数据库? MySQL和PostgresQL等一些数据库可以轻松计算简单SQL查询中2点之间的距离。为此,您必须确保数据位于point
列之类的空间列中。 (如果您在point
列中没有数据,则可以轻松创建新的point
列并使用非点列中的数据更新新列。
然后,要计算2点之间的距离,只需执行SQL查询。
<?php
$dbh = mysql_connect($host, $username, $password);
mysql_select_db($dbname);
// Get distance between 2 points manually
$query = "select GLength(GeomFromText('LineString({$lat1} {$lon1},{$lat2} {$lon2})'))";
$dbr = mysql_query($query);
list($length) = mysql_fetch_array($dbr);
// Now, $length has the distance between lat1, lon1 and lat2, lon2
// To put points into a table use this query
// Assuming that your table has 2 columns point1 and point2
$query = "insert into mytable (point1, point2) values( geomfromtext('point({$lat1} {$lon1})'), geomfromtext('point({$lat2} {$lon2})') )";
mysql_query($query);
// Get distance between 2 points that are stored in point columns
// Assuming the table has 2 point columns point1 and point2
$query = "select GLength(GeomFromText(concat('LineString(', x(point1), ' ', y(point1), ',', x(point2), ' ', y(point2), ')'))) from mytable";
$dbr = mysql_query($query);
list($length) = mysql_fetch_array($dbr);
// Now $length has the distance between point1 and point2
?>
然后,您可以从那里进行任何距离转换。 (另外,在查询中使用变量时要小心,不要像我上面用$lat1
和$lon1
等那样检查它们。确保并检查它们以确保它们只包含数字来自用户输入的值)
答案 1 :(得分:0)