• 首页
  • mongodb
  • mysql ,mongodb 针对坐标值按照距离远近排序

mysql ,mongodb 针对坐标值按照距离远近排序

zuobiao.png


文章目录



针对mysql 和 mongodb 不同数据库下坐标转换距离排序

mysql


//坐标转换因子.是需要计算的.
xFactor = cityObject.xFactor;
yFactor = cityObject.yFactor;

//地区坐标
latitude = location.latitude;
longitude = location.longitude;


//组合sql语句
let sql = [
 'SELECT *, ',
 ' sqrt(pow((latitude - ' + latitude + ') * ' + yFactor + ',2) + ',
 ' pow((longitude - ' + longitude + ') * ' + xFactor + ', 2)) AS distance ',
 ' FROM shop ',
 ' WHERE city = ' + city
];

sql.push(' ORDER BY distance DESC ');

将横纵坐标值转换为距离,然后倒序排列出来.


如何计算某个地区的坐标转换因子

我们以香港中心点坐标为基础

var city={};

city.latitude=22.284338;

city.longitude=114.170459;

//地球半径
var R = 6371.393;


var girthY = R * 2 * Math.PI;

var girthX = Math.cos(city.latitude / 180 * Math.PI) * girthY ;
//y轴转换因子
city.yFactor = girthY / 360;
//x轴转换因子
city.xFactor = girthX / 360;

console.log(city);

如果把上面的这一段代码copy 上以后,
shell 命令行进入 node 环境,直接运行:

> console.log(city);
{ latitude: 22.284338,
  longitude: 114.170459,
  yFactor: 111.20178578851908,
  xFactor: 102.89650354764173 }

上面我们就计算出了坐标转换因子.


mongodb下如何通过坐标值来进行距离排序

mongodb 下对坐标的支持实在是太友善,大致有下面几种方式,都来自官方文档

{
  $near: {
     $geometry: {
        type: "Point" ,
        coordinates: [ <longitude> , <latitude> ]
     },
     $maxDistance: <distance in meters>,
     $minDistance: <distance in meters>
  }
}

把坐标转换成距离,取最大和最小距离.

db.legacy2d.find(
   { location : { $near : [ -73.9667, 40.78 ], $maxDistance: 0.10 } }
)

在哪个坐标附近

End!

出自:mysql ,mongodb 针对坐标值按照距离远近排序

回到顶部