- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想在 php 中使用这个公式。我有一个数据库,其中保存了一些纬度和经度值。
我想在输入一定的经纬度值的情况下,找到从该点到数据库中每个点的所有距离(以公里为单位)。为此,我使用了 googlemaps api 上的公式:
( 6371 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) )
当然,在 php 中使用它,我用 deg2rad
替换了弧度。值 37,-122 是我的输入值,lat,lng 是我在数据库中的值。
下面是我的代码。问题是出了点问题,但我不明白是什么。距离的取值当然是错误的。
//values of latitude and longitute in input (Rome - eur, IT)
$center_lat = "41.8350";
$center_lng = "12.470";
//connection to database. it works
(..)
//to take each value in the database:
$query = "SELECT * FROM Dati";
$result = mysql_query($query);
while ($row = @mysql_fetch_assoc($result)){
$lat=$row['Lat']);
$lng=$row['Lng']);
$distance =( 6371 * acos((cos(deg2rad($center_lat)) ) * (cos(deg2rad($lat))) * (cos(deg2rad($lng) - deg2rad($center_lng)) )+ ((sin(deg2rad($center_lat))) * (sin(deg2rad($lat))))) );
}
以值为例:$lat= 41.9133741000$lng= 12.5203944000
我有 distance="4826.9341106926"的输出
最佳答案
您使用的公式似乎是 arccosine 而不是 haversine 公式。 haversine 公式确实更适合计算球体上的距离,因为它不太容易出现舍入误差。
/**
* Calculates the great-circle distance between two points, with
* the Haversine formula.
* @param float $latitudeFrom Latitude of start point in [deg decimal]
* @param float $longitudeFrom Longitude of start point in [deg decimal]
* @param float $latitudeTo Latitude of target point in [deg decimal]
* @param float $longitudeTo Longitude of target point in [deg decimal]
* @param float $earthRadius Mean earth radius in [m]
* @return float Distance between points in [m] (same as earthRadius)
*/
function haversineGreatCircleDistance(
$latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000)
{
// convert from degrees to radians
$latFrom = deg2rad($latitudeFrom);
$lonFrom = deg2rad($longitudeFrom);
$latTo = deg2rad($latitudeTo);
$lonTo = deg2rad($longitudeTo);
$latDelta = $latTo - $latFrom;
$lonDelta = $lonTo - $lonFrom;
$angle = 2 * asin(sqrt(pow(sin($latDelta / 2), 2) +
cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2), 2)));
return $angle * $earthRadius;
}
附言我在你的代码中找不到错误,所以这只是你写的错字 $lat= 41.9133741000 $lat= 12.5203944000
吗?也许您只是使用 $lat=12.5203944000 和 $long=0 进行计算,因为您覆盖了 $lat 变量。
编辑:
测试代码并返回正确结果:
$center_lat = 41.8350;
$center_lng = 12.470;
$lat = 41.9133741000;
$lng = 12.5203944000;
// test with your arccosine formula
$distance =( 6371 * acos((cos(deg2rad($center_lat)) ) * (cos(deg2rad($lat))) * (cos(deg2rad($lng) - deg2rad($center_lng)) )+ ((sin(deg2rad($center_lat))) * (sin(deg2rad($lat))))) );
print($distance); // prints 9.662174538188
// test with my haversine formula
$distance = haversineGreatCircleDistance($center_lat, $center_lng, $lat, $lng, 6371);
print($distance); // prints 9.6621745381693
关于php - 带php的Haversine公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14750275/
因此,我使用 Haversine 公式继续沿从 Google map 检索的路线查找位置,如下所示,使用英里数。 var R = 3959 //in miles; var lat1 = result.
我正在使用 mysql 来计算接近度,为此我创建了一个名为 distance 的过程,如下所示,但该过程无法正常工作,但 sql 语句正在运行,所以这里有什么区别,因为我猜两者都是Haversine
我有一个 dataframe 和 2.7MM 坐标,以及一个单独的 list ~2,000 坐标。我正在尝试返回每一行 中的坐标与列表中的每个坐标 之间的最小距离。以下代码适用于小规模(200 行的数
我正在尝试实现 Haversine我正在编写的一个小 GPS 程序中的公式。距离计算似乎是正确的。但是,我认为方位是以弧度计算的,我不知道如何将结果正确转换为罗盘方向(0 表示北,90 表示东,等等)
我正在用 PHP 实现 Haversine 公式,如下所示 $result=mysqli_query($mysqli,"SELECT *,( 6371 * acos( cos( radians({$l
我正在用 c# 创建一个距离计算器,使用半正弦方程来计算经度和纬度之间的距离,但它给出了错误的输出,有人知道为什么吗?第一个 long 和 lat 值是威尔士(类戈)的一个地方,另一个是英格兰(曼彻斯
假设我有这两个表: the_schedule_table: +-----+---------------------+---------------------+-----------+-------
我正在尝试创建一个基本的 Web 应用程序来检测用户的地理位置、查询 mySQL 数据库并返回 5 公里内的所有公交车站。 包含经度和纬度的 GTFS 提要已插入到 mySQL 数据库中,我找到了一个
我正在尝试通过距离参数(以英里为单位)将用户位置(通过 URL 中的参数发送)与 offers.offer_lat 和 offers.offer_long(在我的数据库中)进行比较 我现在快要疯了,我
我正在尝试使用 Haversine 公式来定位距离我当前位置 1 英里以内的所有公交车站。我有一个 MySQL 数据库表,其中包含 5500 个公交车站的纬度/经度位置,并且正在使用以下 SQL 查询
我有 39,803 个不同的经纬度点(这里是前 5 个点) lat lon 0 27.269987 -82.497004 1 27.537598 -82.508422 2 27.3
SELECT id, ( 3959 * acos( cos( radians(51.509980) ) * cos( radians( lat ) ) * cos( radians(
我有一个坐标列表,可以使用 haversine distance 计算所有点之间的距离矩阵公制。 坐标来自 numpy.array 形状 (n, 2) 的 (latitude, longitude)
我有两个包含纬度和经度的数组。我想计算数组中每一对纬度和经度与其他每一对纬度和经度之间的距离。这是我的两个数组。 lat_array array([ 0.33356456, 0.33355585,
这里的新手对 mysql 有很好的了解,但在空间查询上卡住了。 我查看了许多与空间数据相关的问题,以找到给定纬度/经度周围的附近位置,但由于我的空间表格式不同,最终没有得到正确的结果(如果已经有问题,
我正在尝试在 WordPress 中使用 Haversine 公式,使用自定义帖子类型“stores”,自定义字段包含 latitude、longitude 和 street_address 仅供显示
我有一个看起来像这样的结果表(目前只有 1 个结果): 这是我生成该结果的查询: SELECT DISTINCT ID, post_author, post_title, post_type, pos
我的代码中有以下几行 query = "SELECT id, " \ "( 3959 * acos( cos( radians(37) ) * cos( radians( %(
我一直在通过 Nikil Abraham 的 Coding for Dummies 学习代码。书中有一个包含代码的元素,用于为一家餐厅开发一个应用程序,该应用程序可以在距离餐厅 5 到 10 分钟的步
我有两个数据帧,我想循环遍历它们,应用半正矢函数,并在新数组中构造结果。我想获取 da_store 中第一家餐厅的 lat、lng 坐标,对 da_univ 的所有 lat、lng 应用半正矢函数,存
我是一名优秀的程序员,十分优秀!