ホームページ  >  記事  >  バックエンド開発  >  距離ソートに関する質問

距離ソートに関する質問

WBOY
WBOYオリジナル
2016-06-13 12:09:08952ブラウズ

距離ソートの問題について
たとえば、データは一連の条件に基づいてページ分割されます

$sql =  "select id,xpoint,ypoint, deal_cate_id,ratio  from ".DB_PREFIX."supplier_location where ".$where;

ここで、xpoint と ypoint は経度と緯度を表し、ユーザーの位置 $xpoint、$ypoint
データをクエリした後、循環リストはユーザーの位置の経度と緯度に基づいてユーザーとビジネス間の距離を計算します
<br />foreach($info as $k=>$v){			   <br />	$info[$k]['Distance']  =intval(GetDistance($ypoint,$xpoint,$v['ypoint'],$v['xpoint'])*1000);<br />}<br />


ここでGetDistance 関数のコードは
<br />// 本函数为获取两坐标之间的距离 // a纬度 a经度 b纬度 b经度 <br />function GetDistance($lat1, $lng1, $lat2, $lng2)   {   <br />    $EARTH_RADIUS = 6378.137;<br />	$radLat1 = rad($lat1);<br />	$radLat2 = rad($lat2);<br />	$a = $radLat1 - $radLat2;<br />	$b = rad($lng1) - rad($lng2);   <br />    $s = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)));<br />    $s = $s * $EARTH_RADIUS;     $s = round($s * 10000) / 10000;    return $s;<br />}<br />


現在の問題は、距離に基づいて並べ替えたいのですが、検索条件に各ユーザーの位置情報が含まれるため、並べ替えが不正確になることです。検索条件が異なりますが、一時テーブルやキャッシュを使用するとデータ量が大きくなってしまいますので、何か良い方法があれば教えてください
--- ---ソリューションのアイデア----------------------
abs(xpoint-$xpoint)、abs(ypoint) で並べ替え
順序-$ypoint)
つまり、2 点間の経度と緯度の差の絶対値で並べ替えます

結果を確認してから計算します

または式 2 を直接使用します* asin(sqrt(pow(sin($a/2),2) cos($radLat1)*cos($radLat2)*pow(sin($b/2),2) ))
はSQL ステートメントと mysql に関係する関数はすべて、RADIANS

である 次数アークを持ちます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。