1
fangzhzh 2014-11-06 20:43:16 +08:00 via Android
stackoverfkow
查 geo distance |
2
fangzhzh 2014-11-06 20:46:14 +08:00 via Android
事实上 如果是MySQL 很简单 数据库公式直接套 数据库拿数据时直接排序 如果是SQLite 它不支持有些数学函数 所以需要你拿完 代码再排一次
|
3
kstsca OP 找到这个 #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 |
4
fengchang 2014-11-06 21:38:05 +08:00
我做过一个附近的人,入库的时候用经纬度计算geohash,取的时候用geohash做字符串匹配,然后再用经纬度对取出的点计算精确距离。
|
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/ |
6
Jaylee 2014-11-06 22:54:58 +08:00
geohash
|
7
husinhu 2014-11-06 22:59:33 +08:00 via iPhone
haversine vincenty 等等
|
8
sneezry 2014-11-07 00:14:37 +08:00 via iPhone
学渣第一眼想到的居然是勾股定理……我面壁去了……
|