相关疑难解决方法(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万
查看次数

MySQL中给定半径内的查询点

我创建了以下MySQL表来存储纬度/经度坐标以及每个点的名称:

CREATE TABLE `points` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(128) NOT NULL,
  `location` point NOT NULL,
  PRIMARY KEY (`id`),
  SPATIAL KEY `location` (`location`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
Run Code Online (Sandbox Code Playgroud)

我试图查询:

  • 给定点n英里范围内的所有点;
  • 每个返回点距给定点的距离

我发现的所有示例都涉及使用最小边界矩形(MBR)而不是半径.该表包含大约100万个点,因此需要尽可能高效.

mysql database gis spatial mysql-spatial

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

位置请求的缓存策略

我正在构建REST API,在特定区域返回数据(比如说事件).REST URL是一个简单的GET

/api/v1/events?lat=<lat>&lng=<lng>&radius=<radius>.
Run Code Online (Sandbox Code Playgroud)

与参数lat,lng和radius(10英里默认情况下),纬度和经度是设备或浏览器的API什么回报.现在不用说,lat和lng随着用户移动而连续变化,并且两个用户可以是相同的附近,具有不同的lat/lng.在服务器上缓存此类请求的最佳方法是什么,这样我就不必每次都进入业务逻辑.自lat/lng更改后,URL不会是唯一的.

谢谢

rest location caching geolocation http-caching

7
推荐指数
1
解决办法
1312
查看次数

MySQL - 从数据库中查找半径内的点

我有一张桌子,其中有一POINT列包含各个位置的纬度和经度.

然后我还在浏览器中有一个来自地理位置的用户位置.

我需要做的是从表格中找到所有记录,其中的POINT值在半径10公里(或半径X公里)内,按距离最近的第一个排序.

我的表SPATIAL在POINT列上有一个索引.

mysql spatial geospatial

6
推荐指数
1
解决办法
4749
查看次数