V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
kstsca
V2EX  ›  问与答

soso 地图 两个坐标的距离是如何计算出来的?还有 mysql 数据存储了 X,Y 坐标,如何让最近距离排列呢

  •  
  •   kstsca · 2014-11-06 20:29:55 +08:00 · 3542 次点击
    这是一个创建于 3659 天前的主题,其中的信息可能已经有所发展或是发生改变。
    8 条回复    2014-11-07 00:14:37 +08:00
    fangzhzh
        1
    fangzhzh  
       2014-11-06 20:43:16 +08:00 via Android
    stackoverfkow
    查 geo distance
    fangzhzh
        2
    fangzhzh  
       2014-11-06 20:46:14 +08:00 via Android
    事实上 如果是MySQL 很简单 数据库公式直接套 数据库拿数据时直接排序 如果是SQLite 它不支持有些数学函数 所以需要你拿完 代码再排一次
    kstsca
        3
    kstsca  
    OP
       2014-11-06 20:59:09 +08:00
    找到这个 #lat为纬度, lng为经度, 一定不要弄错
    declare @lon1 float;
    declare @lat1 float;
    declare @lon2 float;
    declare @lat2 float;
    set @lon1=116.3899;
    set @lat1=39.91578;
    set @lon2=116.3904;
    set @lat2=39.91576;
    select (2*ATAN2(SQRT(SIN((@lat1-@lat2)*PI()/180/2)
    *SIN((@lat1-@lat2)*PI()/180/2)+
    COS(@lat2*PI()/180)*COS(@lat1*PI()/180)
    *SIN((@lon1-@lon2)*PI()/180/2)
    *SIN((@lon1-@lon2)*PI()/180/2)),
    SQRT(1-SIN((@lat1-@lat2)*PI()/180/2)
    *SIN((@lat1-@lat2)*PI()/180/2)
    +COS(@lat2*PI()/180)*COS(@lat1*PI()/180)
    *SIN((@lon1-@lon2)*PI()/180/2)
    *SIN((@lon1-@lon2)*PI()/180/2))))*6378140;
    @fangzhzh
    fengchang
        4
    fengchang  
       2014-11-06 21:38:05 +08:00
    我做过一个附近的人,入库的时候用经纬度计算geohash,取的时候用geohash做字符串匹配,然后再用经纬度对取出的点计算精确距离。
    013231
        5
    013231  
       2014-11-06 22:53:14 +08:00   ❤️ 1
    已知两点坐标求距离:
    不要求十分精确的情况下, 可用大圆距离计算: https://en.wikipedia.org/wiki/Great-circle_distance 但地球并非球形, 此算法可能产生0.5%的误差.
    如果需要精确计算距离, 可使用Vincenty公式: https://en.wikipedia.org/wiki/Vincenty's_formulae 误差 < 0.5mm.

    在MySQL中查找距离最近的点:
    http://stackoverflow.com/questions/2234204/latitude-longitude-find-nearest-latitude-longitude-complex-sql-or-complex-calc

    顺便一提, MongoDB处理地理信息非常方便: http://docs.mongodb.org/manual/applications/geospatial-indexes/
    Jaylee
        6
    Jaylee  
       2014-11-06 22:54:58 +08:00
    geohash
    husinhu
        7
    husinhu  
       2014-11-06 22:59:33 +08:00 via iPhone
    haversine vincenty 等等
    sneezry
        8
    sneezry  
       2014-11-07 00:14:37 +08:00 via iPhone
    学渣第一眼想到的居然是勾股定理……我面壁去了……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5477 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:01 · PVG 15:01 · LAX 23:01 · JFK 02:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.