Dieser Artikel befasst sich hauptsächlich mit der PHP-Sortierung nach Längen- und Breitengrad und dem Filtern von Entfernungssegmenten nach Längen- und Breitengrad. Jetzt kann ich ihn mit Ihnen teilen.
SQL 语句: select location.* from (select *,round(6378.138*2*asin(sqrt(pow(sin( (36.668530*pi()/180-px_lat*pi()/180)/2),2)+cos(36.668530*pi()/180)*cos(px_lat*pi()/180)* pow(sin( (117.020359*pi()/180-px_lon*pi()/180)/2),2)))*1000) as distance from bsx_training where (px_state = 1) and (type_id != '') and (((px_lat >= 27.683290277922) and (px_lat <= 45.653769722078)) and ((px_lon >= 105.81826766053) and (px_lon <= 128.22245033947))) order by distance limit 0,10) location where (1=1) and (location.distance <= 500) 先忽略上面这条SQL语句。一一解释 根据SQL排序的SQl语句
Dies ist ein gemäß dem SQL-Sortierfunktionscode generierter Code
Im Folgenden werden die Daten innerhalb des Längen- und Breitengradbereichs festgelegt
distance_sql(,,, = "round(6378.138*2*asin(sqrt(pow(sin( ({}*pi()/180-{}*pi()/180)/2),2)+cos({}*pi()/180)*cos({}*pi()/180)* pow(sin( ({}*pi()/180-{}*pi()/180)/2),2)))*1000) "
Im Folgenden wird die Datenkontrollfunktion berechnet innerhalb des Längen- und Breitengradbereichs
(I("post.location" = (",",I("post.location" = [0 = [1 = getAround(,,1000000.=" and (((px_lat >= {["minLat"]}) and (px_lat <= {['maxLat']})) and ((px_lon >= {['minLng']}) and (px_lon <= {['maxLng']})))" (I("post.distance_sort" = ",".distance_sql(,,"px_lon","px_lat")." as distance" = " distance"(I("post.km" = htmlspecialchars_decode(I("post.km"((,"<") !== = ("<", .= " and (location.distance <= {[1]})" ((,"-") !== = ("-", .= " and ((location.distance >= {[0]}) and (location.distance <= {[1]}))" ((,">") !== = (">", .= " and (location.distance >= {[1]})"
Um die Sortierung nach Längen- und Breitengrad zu implementieren
Rufen Sie einfach distance_sql(lon1,lat1,lon2,lat2) direkt auf, um die Parameter und als Alias zu übergeben B. als Entfernung, und dann wird in der SQL-Anweisung nach Entfernung sortiert
Wenn das Filterentfernungssegment 1000 Meter – 2000 Meter Daten ist
Dann verschachteln Sie die SQL-Anweisung SQL
/** * * @param $latitude 纬度 * @param $longitude 经度 * @param $raidus 半径范围(单位:米) * @return multitype:number */ function getAround($latitude,$longitude,$raidus) { $PI = 3.14159265; $degree = (24901*1609)/360.0; $dpmLat = 1/$degree; $radiusLat = $dpmLat*$raidus; $minLat = $latitude - $radiusLat; $maxLat = $latitude + $radiusLat; $mpdLng = $degree*cos($latitude * ($PI/180)); $dpmLng = 1 / $mpdLng; $radiusLng = $dpmLng*$raidus; $minLng = $longitude - $radiusLng; $maxLng = $longitude + $radiusLng; return array (minLat=>$minLat, maxLat=>$maxLat, minLng=>$minLng, maxLng=>$maxLng); }
Wenn Sie SQL nach der nächstgelegenen Position sortieren möchten
select *.loation from (select *,round(6378.138*2*asin(sqrt(pow(sin( (36.668530*pi()/180-px_lat*pi()/180)/2),2)+cos(36.668530*pi()/180)*cos(px_lat*pi()/180)* pow(sin( (117.020359*pi()/180-px_lon*pi()/180)/2),2)))*1000) as distance) from table location where (location.distance >= 1000) and (location.distance <= 2000))
Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für alle, die etwas lernen, hilfreich sein wird Bitte achten Sie auf die chinesische PHP-Website!
Verwandte Empfehlungen:
Einführung in die Curl-Anforderung anderer Schnittstellen in der PHP-Schnittstelle
Erste Einführung in die PHP-Multiprozessprogrammierung
Das obige ist der detaillierte Inhalt vonPHP sortiert nach Längen- und Breitengrad und filtert Entfernungssegmente nach Längen- und Breitengrad. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!