【问题标题】:PHP to Javascript Arrays and GPS locationsPHP 到 Javascript 数组和 GPS 位置
【发布时间】:2011-10-21 07:36:29
【问题描述】:

我正在制作一个脚本,希望主要是 PHP,所以它以后不需要 Javascript,但现在我被困在一些事情上。

  1. 存储 GPS 位置并进行比较的最佳方法是什么?我可以使用将它们存储在数据库中(当前使用 MySQL),然后使用一些代码找到附近的人,但我担心这会非常密集,特别是如果数据库中有很多值。这应该在服务器上执行,我现在正在使用PHP。

  2. 如何获取这些数据,然后在 Google 地图中表示?当我已经输入数据时,我目前已经让我的代码工作了,但我想从数据库中获取这些数据。是否要求用户在单个 Google 地图视图上放置 100 个标记来代表世界各地的所有人?还是我应该只与某个区域内的人保持联系?我当前的代码是:

    var people = [ ['Type1', -33.890542, 151.274856],
                   ['Type2', -33.923036, 151.259052],  
                   ['Type2', -34.028249, 151.157507],  
                   ['Type2', -33.80010128657071, 151.28747820854187],  
                   ['Type1', -33.950198, 151.259302]
                 ];
    

    每个“类型”显示不同的图像,所以我需要从数据库中提取类型、纬度和经度,并将它们放入这个 Javascript 数组中。

我知道这里有一些问题,我是 javascript 和地图方面的新手 :)

【问题讨论】:

标签: php javascript geolocation


【解决方案1】:

1.您的第一个问题

上周我不得不解决这样的问题,然后我就这样做了。
假设我有一个 MySQL 数据库中一些办公室的列表及其 GPS 坐标(gps_latgps_lon),我想按它们与我当前位置的距离($latitude$longtitude)以公里为单位对它们进行排序。

// MySQL query in PHP
// btw, I'm storing GPS coordinates in decimal format like 51.123234
$varA = "(POW(SIN((gps_lat - $latitude) / 2 * 0.017453293), 2) + COS($latitude * 0.017453293)
        * COS(gps_lat * 0.017453293) * POW(SIN((gps_lon - $longtitude) / 2 * 0.017453293), 2))";

$query = "SELECT *, (6378.140 * 2 * ATAN2(SQRT($varA), SQRT(1-$varA))) AS distanceInKm ";
$query += 'FROM Office ORDER BY distanceInKm'); 

$mysqli->query($query);
// ...

// the magic constant 0.017453293 is PI / 180 (just check the link below).

也许检查这个链接Deriving the Haversine Formula,它帮助了我很多。我知道这在 SQL 中看起来很奇怪。 $varA 只是重复两次的公式的一部分。上面链接中的原始公式如下所示:

dlon = lon2 - lon1
dlat = lat2 - lat1
a = (sin(dlat/2))^2 + cos(lat1) * cos(lat2) * (sin(dlon/2))^2
c = 2 * atan2(sqrt(a), sqrt(1-a)) 
d = R * c

【讨论】:

  • 谢谢,看起来很不错。阅读了链接,我想我知道它是如何工作的,我现在就尝试实现它。我假设我们正在将用户的当前位置(gps_lat 和 gps_lon)与一些变量坐标 $latitude 和 $longtitude 进行比较?我不太了解最后一点,但我对这种语法并不了解! :(
  • 是的,你是对的。我更新了帖子,所以它可能更容易理解。
猜你喜欢
  • 1970-01-01
  • 2016-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多