相关疑难解决方法(0)

找到两个纬度/长点之间距离的最快方法

我目前在mysql数据库中的位置不到一百万个,都有经度和纬度信息.

我试图通过查询找到一个点和许多其他点之间的距离.它没有我想要的那么快,尤其是每秒100次点击.

是否有更快的查询或可能比mysql更快的系统?我正在使用此查询:

SELECT 
  name, 
   ( 3959 * acos( cos( radians(42.290763) ) * cos( radians( locations.lat ) ) 
   * cos( radians(locations.lng) - radians(-71.35368)) + sin(radians(42.290763)) 
   * sin( radians(locations.lat)))) AS distance 
FROM locations 
WHERE active = 1 
HAVING distance < 10 
ORDER BY distance;
Run Code Online (Sandbox Code Playgroud)

注意:提供的距离以英里为单位.如果您需要公里数,请使用6371而不是3959.

mysql gis location

216
推荐指数
9
解决办法
18万
查看次数

MySQL大圆距离(Haversine公式)

我有一个工作的PHP脚本,它获取经度和纬度值,然后将它们输入到MySQL查询中.我想把它做成MySQL.这是我目前的PHP代码:

if ($distance != "Any" && $customer_zip != "") { //get the great circle distance

    //get the origin zip code info
    $zip_sql = "SELECT * FROM zip_code WHERE zip_code = '$customer_zip'";
    $result = mysql_query($zip_sql);
    $row = mysql_fetch_array($result);
    $origin_lat = $row['lat'];
    $origin_lon = $row['lon'];

    //get the range
    $lat_range = $distance/69.172;
    $lon_range = abs($distance/(cos($details[0]) * 69.172));
    $min_lat = number_format($origin_lat - $lat_range, "4", ".", "");
    $max_lat = number_format($origin_lat + $lat_range, "4", ".", "");
    $min_lon = number_format($origin_lon - $lon_range, "4", ".", "");
    $max_lon = …
Run Code Online (Sandbox Code Playgroud)

php mysql great-circle

181
推荐指数
4
解决办法
10万
查看次数

PHP MySql和地理位置

我正在写一个网站,主要是在一个纬度25英里范围内寻找地方,长期使用php和mysql.

我想知道这样的事情会怎么样?

我会将一个lat和long传递给该脚本,并且只从位于我的数据库位置的纬度25英里内的位置拉出它.

做这个的最好方式是什么?

编辑:我发现这个代码用于计算2点之间的距离.

    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;
      }
}
Run Code Online (Sandbox Code Playgroud)

是否可以在MYSQL查找中执行此计算,这样我只能在里程= <25时返回?

php mysql html5 geolocation geospatial

9
推荐指数
1
解决办法
3780
查看次数

mysql更新地理点

我有一个包含纬度和经度值的MySQL表.我想玩MySQL 5中的空间内容,只是为了看看它是如何工作的.

但是,我遇到一个真正的问题,就是从现有值中获取点数据.我正在尝试这样的事情,但它在我尝试的每种格式中都出现语法错误.有人能指出正确的方法吗?

UPDATE locationtable a SET geopoint = GeomFromText( POINT() a.latitude a.longitude ) WHERE 1
Run Code Online (Sandbox Code Playgroud)

我也尝试过其他变种,包括:

UPDATE locationtable a SET geopoint = GeomFromText( 'POINT()' a.latitude a.longitude ) WHERE 1

UPDATE locationtable a SET geopoint = GeomFromText( 'POINT() a.latitude a.longitude' ) WHERE 1
Run Code Online (Sandbox Code Playgroud)

和别的…

mysql geometry geolocation

4
推荐指数
1
解决办法
5355
查看次数

标签 统计

mysql ×4

geolocation ×2

php ×2

geometry ×1

geospatial ×1

gis ×1

great-circle ×1

html5 ×1

location ×1