两种方式,网上查的,不知道原理,计算出来的数未验证哪个更加精确。有心者发现哪个精确度高请告知。
、、第一种
String sql = "select * from ( " +
"SELECT city,cell_name,cgi,score,lon,lat,amzith, " +
" sqrt( " +
" ( " +
" ( " +
" ( "+busineAssessment.getLon()+"- lon ) * PI( ) * 12656 * cos( ( ( "+busineAssessment.getLat()+"+ lat ) / 2 ) * PI( ) / 180 ) / 180 " +
" ) * ( " +
" ( "+busineAssessment.getLon()+"- lon ) * PI( ) * 12656 * cos ( ( ( "+busineAssessment.getLat()+"+ lat ) / 2 ) * PI( ) / 180 ) / 180 " +
" ) " +
" ) + ( " +
" ( ( "+busineAssessment.getLat()+"- lat ) * PI( ) * 12656 / 180 ) * ( ( "+busineAssessment.getLat()+"- lat ) * PI( ) * 12656 / 180 ) " +
" ) " +
" ) as distance " +
"FROM " +
" busine_assessment " +
"WHERE " +
" sqrt( " +
" ( " +
" ( " +
" ( "+busineAssessment.getLon()+"- lon ) * PI( ) * 12656 * cos( ( ( "+busineAssessment.getLat()+"+ lat ) / 2 ) * PI( ) / 180 ) / 180 " +
" ) * ( " +
" ( "+busineAssessment.getLon()+"- lon ) * PI( ) * 12656 * cos ( ( ( "+busineAssessment.getLat()+"+ lat ) / 2 ) * PI( ) / 180 ) / 180 " +
" ) " +
" ) + ( " +
" ( ( "+busineAssessment.getLat()+"- lat ) * PI( ) * 12656 / 180 ) * ( ( "+busineAssessment.getLat()+"- lat ) * PI( ) * 12656 / 180 ) " +
" ) " +
" ) <2 " +
" and lon <> "+busineAssessment.getLon()+" order by distance limit 10 ) a " +
" order by a.score " +
" ";
、、第二种 @a 是传入的经度 @b是纬度 @是地球半径
select *,sqrt(
(
((@a-longitude)*PI()*@c*cos(((@b+latitude)/2)*PI()/180)/180)
*
((@a-longitude)*PI()*@c*cos (((@b+latitude)/2)*PI()/180)/180)
)
+
(
((@b-latitude)*PI()*@c/180)
*
((@b-latitude)*PI()*@c/180)
)
) as JL from [TableName] where sqrt(
(
((@a-longitude)*PI()*@c*cos(((@b+latitude)/2)*PI()/180)/180)
*
((@a-longitude)*PI()*@c*cos (((@b+latitude)/2)*PI()/180)/180)
)
+
(
((@b-latitude)*PI()*@c/180)
*
((@b-latitude)*PI()*@c/180)
)
)<1 (1公里范围内)
————————————————
版权声明:本文为CSDN博主「Rex_IT」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liuxiaoshuang002/article/details/71122153/