Heim >Backend-Entwicklung >PHP-Tutorial >javascript - Wie erhalte ich den Breiten- und Längengrad des Benutzers und berechne die Entfernung zwischen zwei Standorten?
Wie erhalte ich den Breiten- und Längengrad Ihres aktuellen Standorts? Wie berechnet man die Entfernung zwischen den beiden Orten, nachdem man den Längen- und Breitengrad zweier Orte kennt?
Ich arbeite derzeit an einem öffentlichen Konto. Ich muss den Längen- und Breitengrad des Benutzers ermitteln und dann die Entfernung zwischen dem Längen- und Breitengrad des Benutzers und einem anderen Standort berechnen. Wie kann ich das erreichen? Bitte helfen Sie mir, danke!
Wie erhalte ich den Breiten- und Längengrad Ihres aktuellen Standorts? Wie berechnet man die Entfernung zwischen den beiden Orten, nachdem man den Längen- und Breitengrad zweier Orte kennt?
Ich arbeite derzeit an einem öffentlichen Konto. Ich muss den Längen- und Breitengrad des Benutzers ermitteln und dann die Entfernung zwischen dem Längen- und Breitengrad des Benutzers und einem anderen Standort berechnen. Wie kann ich das erreichen? Bitte helfen Sie mir, danke!
PHP implementiert die Funktion „Personen in der Nähe“, bestimmt Längen- und Breitengrad basierend auf IP und berechnet Entfernung basierend auf Längen- und Breitengrad
PHP installiert die GeoIP-Erweiterung und -Datenbank, um das Land/die Stadt/den Breiten- und Längengrad des Besuchers basierend auf der IP zu ermitteln.
Dann können Sie geoip_record_by_name($_SERVER['REMOTE_ADDR'])
verwenden, um den Breiten- und Längengrad basierend auf der IP des Benutzers zu ermitteln Hinweis: Der von geoip_record_by_name() zurückgegebene westliche Längengrad und der südliche Breitengrad sind negative Zahlen.
Breitengrad: 1 Grad = 110852 m
Längengrad: 1 Grad = 111320*cos(lat) m
Auf dem gleichen Längengrad beträgt die Differenz eines Breitengrades etwa 110852 Meter
Auf dem gleichen Breitengrad beträgt der Unterschied eines Längengrades etwa 111320*cos(lat) Meter (lat ist der Breitengrad des Breitengrades)
<code><?php //以当前用户经纬度为中心,查询5000米内的其他用户 $y = 5000 / 110852; //纬度的范围 $x = 5000 / (111320*cos($lat)); //经度的范围 $sql = ' select * from user where lat >= ($lat-$y) and lat <= ($lat+$y) and lon >= ($lon-$x) and lon <= ($lon+$x); ';</code>Es gibt zwei Felder in der Datenbankbenutzertabelle, in denen der Längengrad (Breitengrad) bzw. der Breitengrad (Lon) des Benutzers gespeichert werden.
($lat-$y) <= lat <= ($lat $y)
($ lon-$x) <= lon <= ($lon $x)
Dieser Bereich ist ein grober Bereich. Nachdem Sie die Entfernung unten berechnet haben, entfernen Sie einfach Benutzer, die mehr als 5 Kilometer entfernt sind.
verwenden Sie die Haversine-Formel, um den Abstand zwischen zwei Punkten basierend auf dem Längen- und Breitengrad zu berechnen:
<code><?php function distance($lat1, $lon1, $lat2, $lon2) { $R = 6371393; //地球平均半径,单位米 $dlat = deg2rad($lat2-$lat1); $dlon = deg2rad($lon2-$lon1); $a = pow(sin($dlat/2), 2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * pow(sin($dlon/2), 2); $c = 2 * atan2(sqrt($a), sqrt(1-$a)); $d = $R * $c; return round($d); } echo distance(0, 0, -1, 0); // 111202米</code>Dann können Sie uasort oder array_multisort verwenden, um die Benutzer vom nächstgelegenen zum entferntesten aufzulisten. Beispielsweise gibt es drei Benutzer mit den Namen win, osx und lin:
<code><?php $arr = array( 'win' => array( 'dis' => 1024, 'age' => 31 ), 'osx' => array( 'dis' => 512, 'age' => 15 ), 'lin' => array( 'dis' => 512, 'age' => 25 ) ); foreach($arr as $k => $v) { $sort['dis'][$k] = $v['dis']; $sort['age'][$k] = $v['age']; } //先按距离升序排序,如果距离相同,则按年龄降序排序 array_multisort($sort['dis'], SORT_ASC, $sort['age'], SORT_DESC, $arr); echo json_encode($arr); //{"lin":{"dis":512,"age":25},"osx":{"dis":512,"age":15},"win":{"dis":1024,"age":31}}</code>
Baidu stellt eine Schnittstelle bereit
GeoIP https://sjolzy.cn/GeoIP-PHP-v...
Teilen Sie eine Funktion, die ich mit dem Originalposter gesammelt habe
Sie können sie direkt aufrufen https://gist.github.com/wujun...