Heim  >  Artikel  >  Backend-Entwicklung  >  So konvertieren Sie den Längen- und Breitengrad von Baidu mit PHP in den Längen- und Breitengrad von Tencent

So konvertieren Sie den Längen- und Breitengrad von Baidu mit PHP in den Längen- und Breitengrad von Tencent

PHPz
PHPzOriginal
2023-04-19 09:21:561107Durchsuche

Während des Entwicklungsprozesses müssen wir normalerweise einige geografische Standortinformationen verarbeiten, und die Längen- und Breitengradformate verschiedener Plattformen sind unterschiedlich, was eine Konvertierung erfordert. In diesem Artikel wird erläutert, wie Sie den Längen- und Breitengrad von Baidu in den Längen- und Breitengrad von Tencent konvertieren und PHP-Code zur Implementierung verwenden.

1. Der Unterschied zwischen Längengrad und Breitengrad von Baidu und Längengrad und Breitengrad von Tencent

Breitengrad und Längengrad sind Symbole für die Position auf der Erdoberfläche und werden in verschiedenen Positionierungssystemen auf unterschiedliche Weise ausgedrückt. Derzeit gibt es drei gängige Positionierungssysteme : WGS84, GCJ02 und BD09. Unter ihnen ist WGS84 das Koordinatensystem, das vom GPS-Positionierungssystem verwendet wird, GCJ02 ist das Koordinatensystem des geografischen Informationssystems, das vom China National Bureau of Surveying and Mapping formuliert wurde, und ist auch das Koordinatensystem, das von großen inländischen Karten verwendet werden muss Software, während Baidu Maps BD09 verwendet.

Bei Verwendung verschiedener Positionierungssysteme ist auch die Leistung von Längen- und Breitengraden unterschiedlich. Beispielsweise sind die Längen- und Breitengrade von Baidu und die Längen- und Breitengrade von Tencent wie folgt:

Baidu-Längen- und Breitengrad: 116.404,39.915
Längen- und Breitengrad von Tencent: 116.397428,39.908697

II Umrechnungsmethode

Da Baidu und Tencent unterschiedliche Positionierungssysteme verwenden, ist ein bestimmter Algorithmus für die Umrechnung zwischen Längen- und Breitengrad erforderlich.

  1. Konvertieren Sie das Baidu-Koordinatensystem in das Erdkoordinatensystem (WGS84).

Zuerst müssen Sie das Baidu-Koordinatensystem in das Erdkoordinatensystem (WGS84) konvertieren. Der Code lautet wie folgt:

<?php
function bd09_to_wgs84($bd_lon,$bd_lat){
    $x_pi = 3.14159265358979324 * 3000.0 / 180.0;
    $x = $bd_lon - 0.0065;
    $y = $bd_lat - 0.006;
    $z = sqrt($x * $x + $y * $y) - 0.00002 * sin($y * $x_pi);
    $theta = atan2($y, $x) - 0.000003 * cos($x * $x_pi);
    $lng = $z * cos($theta);
    $lat = $z * sin($theta);
    return array(&#39;lng&#39;=>$lng, 'lat'=>$lat);
}
?>
  1. Konvertieren Sie das Erdkoordinatensystem (WGS84) in das Marskoordinatensystem (GCJ02)

Nachdem Sie die Funktion im ersten Schritt verwendet haben, um das Ergebnis des Erdkoordinatensystems (WGS84) zu erhalten, müssen Sie es in konvertieren das Mars-Koordinatensystem. Dies kann durch den folgenden Code erreicht werden:

<?php
function wgs84_to_gcj02($lng, $lat) {
    $a = 6378245.0;
    $ee = 0.00669342162296594323;
    $dLat = $this->transformLat($lng - 105.0, $lat - 35.0);
    $dLng = $this->transformLng($lng - 105.0, $lat - 35.0);
    $radLat = $lat / 180.0 * pi();
    $magic = sin($radLat);
    $magic = 1 - $ee * $magic * $magic;
    $sqrtMagic = sqrt($magic);
    $dLat = ($dLat * 180.0) / (($a * (1 - $ee)) / ($magic * $sqrtMagic) * pi());
    $dLng = ($dLng * 180.0) / ($a / $sqrtMagic * cos($radLat) * pi());
    $mgLat = $lat + $dLat;
    $mgLng = $lng + $dLng;
    return array('lng'=>$mgLng, 'lat'=>$mgLat);
}
function transformLat($lng, $lat) {
    $ret = -100.0 + 2.0 * $lng + 3.0 * $lat + 0.2 * $lat * $lat + 0.1 * $lng * $lat + 0.2 * sqrt(abs($lng));
    $ret += (20.0 * sin(6.0 * $lng * pi()) + 20.0 * sin(2.0 * $lng * pi())) * 2.0 / 3.0;
    $ret += (20.0 * sin($lat * pi()) + 40.0 * sin($lat / 3.0 * pi())) * 2.0 / 3.0;
    $ret += (160.0 * sin($lat / 12.0 * pi()) + 320 * sin($lat * pi() / 30.0)) * 2.0 / 3.0;
    return $ret;
}
function transformLng($lng, $lat) {
    $ret = 300.0 + $lng + 2.0 * $lat + 0.1 * $lng * $lng + 0.1 * $lng * $lat + 0.1 * sqrt(abs($lng));
    $ret += (20.0 * sin(6.0 * $lng * pi()) + 20.0 * sin(2.0 * $lng * pi())) * 2.0 / 3.0;
    $ret += (20.0 * sin($lng * pi()) + 40.0 * sin($lng / 3.0 * pi())) * 2.0 / 3.0;
    $ret += (150.0 * sin($lng / 12.0 * pi()) + 300.0 * sin($lng / 30.0 * pi())) * 2.0 / 3.0;
    return $ret;
}
?>
  1. Konvertieren Sie das Mars-Koordinatensystem (GCJ02) in das Tencent-Koordinatensystem

Der letzte Schritt besteht darin, das Mars-Koordinatensystem (GCJ02) in das Tencent-Koordinatensystem umzuwandeln:

<?php
function gcj02_to_tx($lng, $lat) {
    $x = $lng;
    $y = $lat;
    $z = sqrt($x * $x + $y * $y) + 0.00002 * sin($y * pi());
    $theta = atan2($y, $x) + 0.000003 * cos($x * pi());
    $lng = $z * cos($theta) + 0.0065;
    $lat = $z * sin($theta) + 0.006;
    return array(&#39;lng&#39;=>$lng, 'lat'=>$lat);
}
?>

3. Vollständige Code-Implementierung

Kombinieren Sie die oben genannten drei Schritte und erhalten Sie den vollständigen Code zum Konvertieren der Längen- und Breitengrade von Baidu in Längen- und Breitengrade von Tencent in PHP wie folgt:

<?php
function bd09_to_wgs84($bd_lon,$bd_lat){
    $x_pi = 3.14159265358979324 * 3000.0 / 180.0;
    $x = $bd_lon - 0.0065;
    $y = $bd_lat - 0.006;
    $z = sqrt($x * $x + $y * $y) - 0.00002 * sin($y * $x_pi);
    $theta = atan2($y, $x) - 0.000003 * cos($x * $x_pi);
    $lng = $z * cos($theta);
    $lat = $z * sin($theta);
    return array(&#39;lng&#39;=>$lng, 'lat'=>$lat);
}

function wgs84_to_gcj02($lng, $lat) {
    $a = 6378245.0;
    $ee = 0.00669342162296594323;
    $dLat = $this->transformLat($lng - 105.0, $lat - 35.0);
    $dLng = $this->transformLng($lng - 105.0, $lat - 35.0);
    $radLat = $lat / 180.0 * pi();
    $magic = sin($radLat);
    $magic = 1 - $ee * $magic * $magic;
    $sqrtMagic = sqrt($magic);
    $dLat = ($dLat * 180.0) / (($a * (1 - $ee)) / ($magic * $sqrtMagic) * pi());
    $dLng = ($dLng * 180.0) / ($a / $sqrtMagic * cos($radLat) * pi());
    $mgLat = $lat + $dLat;
    $mgLng = $lng + $dLng;
    return array('lng'=>$mgLng, 'lat'=>$mgLat);
}
function transformLat($lng, $lat) {
    $ret = -100.0 + 2.0 * $lng + 3.0 * $lat + 0.2 * $lat * $lat + 0.1 * $lng * $lat + 0.2 * sqrt(abs($lng));
    $ret += (20.0 * sin(6.0 * $lng * pi()) + 20.0 * sin(2.0 * $lng * pi())) * 2.0 / 3.0;
    $ret += (20.0 * sin($lat * pi()) + 40.0 * sin($lat / 3.0 * pi())) * 2.0 / 3.0;
    $ret += (160.0 * sin($lat / 12.0 * pi()) + 320 * sin($lat * pi() / 30.0)) * 2.0 / 3.0;
    return $ret;
}
function transformLng($lng, $lat) {
    $ret = 300.0 + $lng + 2.0 * $lat + 0.1 * $lng * $lng + 0.1 * $lng * $lat + 0.1 * sqrt(abs($lng));
    $ret += (20.0 * sin(6.0 * $lng * pi()) + 20.0 * sin(2.0 * $lng * pi())) * 2.0 / 3.0;
    $ret += (20.0 * sin($lng * pi()) + 40.0 * sin($lng / 3.0 * pi())) * 2.0 / 3.0;
    $ret += (150.0 * sin($lng / 12.0 * pi()) + 300.0 * sin($lng / 30.0 * pi())) * 2.0 / 3.0;
    return $ret;
}

function gcj02_to_tx($lng, $lat) {
    $x = $lng;
    $y = $lat;
    $z = sqrt($x * $x + $y * $y) + 0.00002 * sin($y * pi());
    $theta = atan2($y, $x) + 0.000003 * cos($x * pi());
    $lng = $z * cos($theta) + 0.0065;
    $lat = $z * sin($theta) + 0.006;
    return array('lng'=>$lng, 'lat'=>$lat);
}

function bd09_to_tx($bd_lon, $bd_lat) {
    $point_wgs84 = $this->bd09_to_wgs84($bd_lon, $bd_lat);
    $point_gcj02 = $this->wgs84_to_gcj02($point_wgs84['lng'], $point_wgs84['lat']);
    $point_tx = $this->gcj02_to_tx($point_gcj02['lng'], $point_gcj02['lat']);
    return $point_tx;
}
?>

Speichern Sie den obigen Code in einer PHP-Datei und Sie können ihn verwenden .

IV. Zusammenfassung

Durch die Einführung in diesem Artikel haben wir die Unterschiede zwischen dem Breiten- und Längengrad von Baidu und dem Breiten- und Längengrad von Tencent kennengelernt und die Methode zur Verwendung von PHP-Code zum Konvertieren von Breiten- und Längengrad von Baidu in Breiten- und Längengrad von Tencent gemeistert . In tatsächlichen Projekten kann uns diese Konvertierungsmethode bequemere und genauere Funktionen zur Verarbeitung von Karteninformationen bieten.

Das obige ist der detaillierte Inhalt vonSo konvertieren Sie den Längen- und Breitengrad von Baidu mit PHP in den Längen- und Breitengrad von Tencent. 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