Semasa proses pembangunan, kami biasanya perlu memproses beberapa maklumat lokasi geografi, dan format longitud dan latitud bagi platform berbeza adalah berbeza, yang memerlukan penukaran. Artikel ini akan memperkenalkan cara menukar longitud dan latitud Baidu kepada longitud dan latitud Tencent serta menggunakan kod PHP untuk melaksanakannya.
1. Perbezaan antara longitud dan latitud Baidu dan longitud dan latitud Tencent
Longitud dan latitud ialah simbol kedudukan di permukaan bumi Ia dinyatakan dalam cara yang berbeza dalam sistem kedudukan yang berbeza. Pada masa ini terdapat tiga sistem penentududukan arus perdana: : WGS84, GCJ02 dan BD09. Antaranya, WGS84 ialah sistem koordinat yang digunakan oleh sistem penentududukan GPS, GCJ02 ialah sistem koordinat sistem maklumat geografi yang dirumuskan oleh Biro Ukur dan Pemetaan Kebangsaan China, dan juga merupakan sistem koordinat yang mesti digunakan oleh peta domestik utama perisian, manakala Peta Baidu menggunakan BD09.
Apabila menggunakan sistem kedudukan yang berbeza, prestasi longitud dan latitud juga akan berbeza Contohnya, longitud dan latitud Baidu dan longitud dan latitud Tencent sesuatu lokasi adalah seperti berikut:
Baidu. longitud dan latitud: 116.404,39.915
Longitud dan latitud Tencent: 116.397428,39.908697
2 Kaedah penukaran
Memandangkan Baidu dan Tencent menggunakan sistem kedudukan yang berbeza. antara longitud dan latitud.
Mula-mula anda perlu menukar sistem koordinat Baidu kepada sistem koordinat Bumi (WGS84), yang boleh disediakan oleh Pelaksanaan API Baidu, kodnya adalah seperti berikut:
<?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('lng'=>$lng, 'lat'=>$lat); } ?>
Gunakan fungsi dalam langkah pertama Selepas mendapat keputusan sistem koordinat Bumi (WGS84), ia perlu ditukar kepada sistem koordinat Marikh. Ini boleh dicapai dengan kod berikut:
<?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; } ?>
Langkah terakhir ialah menukar Sistem koordinat Marikh (GCJ02) Tukar kepada sistem koordinat Tencent:
<?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('lng'=>$lng, 'lat'=>$lat); } ?>
3. Lengkapkan pelaksanaan kod
Gabungkan tiga langkah di atas untuk mendapatkan kod lengkap untuk menukar longitud dan latitud Baidu kepada Tencent longitud dan latitud dalam PHP seperti berikut:
<?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('lng'=>$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; } ?>
Simpan kod di atas dalam fail PHP dan anda boleh menggunakannya.
4. Ringkasan
Melalui pengenalan artikel ini, kami telah mengetahui tentang perbezaan antara latitud dan longitud Baidu dan latitud dan longitud Tencent, serta menguasai kaedah menggunakan kod PHP untuk menukar Baidu latitud dan longitud ke Tencent latitud dan longitud. Dalam projek sebenar, kaedah penukaran ini boleh memberikan kami fungsi pemprosesan maklumat peta yang lebih mudah dan tepat.
Atas ialah kandungan terperinci Cara menukar longitud dan latitud Baidu kepada longitud dan latitud Tencent menggunakan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!