Heim >Backend-Entwicklung >PHP-Tutorial >PHP sortiert nach Längen- und Breitengrad und filtert Entfernungssegmente nach Längen- und Breitengrad

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

不言
不言Original
2018-07-05 11:17:053707Durchsuche

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 = 105.81826766053) and (px_lon rrree<p>Dies ist ein gemäß dem SQL-Sortierfunktionscode generierter Code</p><p>Im Folgenden werden die Daten innerhalb des Längen- und Breitengradbereichs festgelegt</p><pre class="brush:php;toolbar:false"> 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 = {['minLng']}) and (px_lon = {[0]}) and (location.distance ") !==  = (">", .= " 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))
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!

Stellungnahme:
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