PHP sortiert nach Längen- und Breitengrad und filtert Entfernungssegmente nach Längen- und Breitengrad

不言
Freigeben: 2023-04-02 13:50:02
Original
3553 Leute haben es durchsucht

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语句
Nach dem Login kopieren
rrree

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) "
Nach dem Login kopieren

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 <= {[&#39;maxLat&#39;]})) and ((px_lon >= {['minLng']}) and (px_lon <= {[&#39;maxLng&#39;]})))"
            (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]})"
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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))
Nach dem Login kopieren
rreee

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!

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!