• 请不要在回答技术问题时复制粘贴 AI 生成的内容
konakona
V2EX  ›  程序员

兄弟姐妹们,如果从数据库中提取多个地点,均含坐标,进行距离比对,是不是很慢?

  •  
  •   konakona ·
    54853315 · Jul 13, 2014 · 5618 views
    This topic created in 4500 days ago, the information mentioned may be changed or developed.
    =..= 哼哼,我来说下实际情况:
    数据表中含有a城市的8000条景点和7000个景点。每条数据都有lon和lat(百度坐标你们懂得)。
    假设正在访问景点a,要获得该景点lat和lon附近,最近的其他5个景点。

    =,= 尼玛这个是不是特别慢……首先需要全表查询,有没有什么最优办法?
    16 replies  •  2014-07-14 15:13:39 +08:00
    xiaojj
    xiaojj
    Jul 13, 2014
    1
    where lon>当前景点lon-附近范围距离 and lon<当前景点lon+附近范围距离 and lat>当前景点lat-附近范围距离 and lat<附近范围距离+lat
    nighca
    nighca
    Jul 13, 2014
    2
    kd-tree~
    nighca
    nighca
    Jul 13, 2014
    3
    当然,如果需求以及数据库基本不会变动的话,直接把所有点的最近5个点事先算出来,查的时候就是O(1)。。
    againstodds
    againstodds
    Jul 13, 2014
    4
    把景点数据放到elasticsearch 然后用geo query找出附近的景点
    zhzhwcn
    zhzhwcn
    Jul 13, 2014 via Android
    5
    我想到了Ingress
    whuhacker
    whuhacker
    Jul 13, 2014
    6
    最简单快速的方法就是 1 楼
    不必纠结于以当前点为圆心画一个圈来找“最近 5 个点”,用矩形也可以的

    如果对结果的正确性要求非常高,那只好用 Geo Search 了。如果是用 MySQL 需要转换数据格式
    http://dev.mysql.com/doc/refman/5.1/zh/spatial-extensions-in-mysql.html
    fasling
    fasling
    Jul 13, 2014 via Android
    7
    你需要postgis
    Ricepig
    Ricepig
    Jul 13, 2014 via Android
    8
    推荐一个库,叫ANN

    你遇到的是一类典型问题:the k-th nearest neighbours
    Ricepig
    Ricepig
    Jul 13, 2014 via Android
    9
    另外,经纬度之间算距离是没有意义的,如果要精确,还需要对坐标进行投影。

    如果仅仅需要距离排序,直接用经纬度勉强可以。
    shiny
    shiny
    PRO
    Jul 13, 2014
    10
    最简单的做法就是geohash
    min
    min
    Jul 13, 2014
    11
    自己算是个笨办法,应该去找支持geography的数据库
    mulog
    mulog
    Jul 13, 2014
    12
    试试geohash?
    或者按一楼那样 不过就像@Ricepig说的 需要处理一下
    我之前有一个小demo里写过一个非常非常不精确的
    (参数的range_km是要搜索的范围(单位公里) 返回是对应的经度和纬度范围)


    <script src="https://gist.github.com/mulog1990/ceec153585ee27ef49ca.js"></script>
    NCE
    NCE
    Jul 13, 2014 via iPhone
    13
    sql server专门有类型支持这个
    ChiChou
    ChiChou
    Jul 13, 2014
    14
    楼上的代码咋贴的?这样?

    https://gist.github.com/mulog1990/ceec153585ee27ef49ca
    lamtin
    lamtin
    Jul 13, 2014
    15
    geohash
    54xiaobin
    54xiaobin
    Jul 14, 2014
    16
    geohash +1
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   769 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 23:13 · PVG 07:13 · LAX 15:13 · JFK 18:13
    ♥ Do have faith in what you're doing.