たとえば、一連の条件に基づいてデータをクエリすると、データがページングされます
$sql = "select id,xpoint,ypoint, deal_cate_id,ratio from ".DB_PREFIX."supplier_location where ".$where;
foreach($info as $k=>$v){ $info[$k]['Distance'] =intval(GetDistance($ypoint,$xpoint,$v['ypoint'],$v['xpoint'])*1000);}
// 本函数为获取两坐标之间的距离 // a纬度 a经度 b纬度 b经度 function GetDistance($lat1, $lng1, $lat2, $lng2) { $EARTH_RADIUS = 6378.137; $radLat1 = rad($lat1); $radLat2 = rad($lat2); $a = $radLat1 - $radLat2; $b = rad($lng1) - rad($lng2); $s = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1)*cos($radLat2)*pow(sin($b/2),2))); $s = $s * $EARTH_RADIUS; $s = round($s * 10000) / 10000; return $s;}
並べ替え
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 に関与する関数はすべて
となります。度弧はラジアンです
abs(xpoint-$xpoint)、abs(ypoint-$ypoint) で並べ替えます
つまり、2 点間の経度と緯度の差の絶対値で並べ替えます
結果を確認します
を計算します
または、式 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1)*cos($radLat2)*pow(sin($b/2) を直接使用します,2)))
mysql に関係するすべての関数を SQL ステートメントに入れます
次数の円弧はラジアンです
モデレーターのご協力に感謝します、問題は解決しました