![]() | 1 xiaojj 2014-07-13 10:59:05 +08:00 where lon>当前景点lon-附近范围距离 and lon<当前景点lon+附近范围距离 and lat>当前景点lat-附近范围距离 and lat<附近范围距离+lat |
2 nighca 2014-07-13 11:10:24 +08:00 kd-tree~ |
3 nighca 2014-07-13 11:12:30 +08:00 当然,如果需求以及数据库基本不会变动的话,直接把所有点的最近5个点事先算出来,查的时候就是O(1)。。 |
![]() | 4 againstodds 2014-07-13 11:14:20 +08:00 把景点数据放到elasticsearch 然后用geo query找出附近的景点 |
5 zhzhwcn 2014-07-13 11:22:28 +08:00 via Android 我想到了Ingress |
![]() | 6 whuhacker 2014-07-13 11:29:14 +08:00 最简单快速的方法就是 1 楼 不必纠结于以当前点为圆心画一个圈来找“最近 5 个点”,用矩形也可以的 如果对结果的正确性要求非常高,那只好用 Geo Search 了。如果是用 MySQL 需要转换数据格式 http://dev.mysql.com/doc/refman/5.1/zh/spatial-extensions-in-mysql.html |
![]() | 7 fasling 2014-07-13 11:43:22 +08:00 via Android 你需要postgis |
![]() | 8 Ricepig 2014-07-13 11:53:45 +08:00 via Android 推荐一个库,叫ANN 你遇到的是一类典型问题:the k-th nearest neighbours |
![]() | 9 Ricepig 2014-07-13 11:56:24 +08:00 via Android 另外,经纬度之间算距离是没有意义的,如果要精确,还需要对坐标进行投影。 如果仅仅需要距离排序,直接用经纬度勉强可以。 |
![]() | 10 shiny 2014-07-13 12:29:05 +08:00 最简单的做法就是geohash |
![]() | 11 min 2014-07-13 12:58:35 +08:00 自己算是个笨办法,应该去找支持geography的数据库 |
![]() | 12 mulog 2014-07-13 13:17:52 +08:00 试试geohash? 或者按一楼那样 不过就像@Ricepig说的 需要处理一下 我之前有一个小demo里写过一个非常非常不精确的 (参数的range_km是要搜索的范围(单位公里) 返回是对应的经度和纬度范围) <script src="https://gist.github.com/mulog1990/ceec153585ee27ef49ca.js"></script> |
![]() | 13 NCE 2014-07-13 13:33:54 +08:00 via iPhone sql server专门有类型支持这个 |
14 ChiChou 2014-07-13 16:09:18 +08:00 |
![]() | 15 lamtin 2014-07-13 16:25:44 +08:00 geohash |
![]() | 16 54xiaobin 2014-07-14 15:13:39 +08:00 geohash +1 |