Files
park/application/api/controller/YqCes.php
MeSHard b22d09bd39 init
2025-12-01 11:19:23 +08:00

845 lines
27 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\api\controller;
use app\common\controller\Api;
use think\Db;
/*
*/
class YqCes extends Api
{
protected $noNeedLogin = ['*'];
protected $noNeedRight = ['*'];
const x_PI = 52.35987755982988; // π * 3000.0 / 180.0 这里π = 3.14159265358979324
const PI = 3.1415926535897932384626; // π
const a = 6378245.0; // WGS长轴半径
const ee = 0.00669342162296594323; // WGS偏心率的平方
/**
* WGS84转GCj02(北斗转高德)
* @param int|string $lng 经度
* @param int|string $lat 纬度
* @return array
*/
static public function beiDouToAMap($lng = 0, $lat = 0){
if (self::outOfChina($lng, $lat)) {
return array($lng, $lat);
} else {
$dlat = self::transFormLat($lng - 105.0, $lat - 35.0);
$dlng = self::transFormLng($lng - 105.0, $lat - 35.0);
$radlat = $lat / 180.0 * self::PI;
$magic = sin($radlat);
$magic = 1 - self::ee * $magic * $magic;
$sqrtmagic = sqrt($magic);
$dlat = ($dlat * 180.0) / ((self::a * (1 - self::ee)) / ($magic * $sqrtmagic) * self::PI);
$dlng = ($dlng * 180.0) / (self::a / $sqrtmagic * cos($radlat) * self::PI);
$mglat = $lat + $dlat;
$mglng = $lng + $dlng;
return [$mglng, $mglat, 'lng' => $mglng, 'lat' => $mglat];
}
}
/**
* GCJ02 转换为 WGS84 (高德转北斗)
* @param int|string $lng 经度
* @param int|string $lat 纬度
* @return array
*/
static public function aMapToBeiDou($lng = 0, $lat = 0)
{
if (self::outOfChina($lng, $lat)) {
return array($lng, $lat);
} else {
$dlat = self::transFormLat($lng - 105.0, $lat - 35.0);
$dlng = self::transFormLng($lng - 105.0, $lat - 35.0);
$radlat = $lat / 180.0 * self::PI;
$magic = sin($radlat);
$magic = 1 - self::ee * $magic * $magic;
$sqrtmagic = sqrt($magic);
$dlat = ($dlat * 180.0) / ((self::a * (1 - self::ee)) / ($magic * $sqrtmagic) * self::PI);
$dlng = ($dlng * 180.0) / (self::a / $sqrtmagic * cos($radlat) * self::PI);
$mglat = $lat + $dlat;
$mglng = $lng + $dlng;
return array($lng * 2 - $mglng, $lat * 2 - $mglat);
}
}
/**
* 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换 百度转高德
* 即 百度 转 谷歌、高德
* @param string $bd_lon 百度经度
* @param string $bd_lat 百度纬度
* @return array
*/
static public function baiDuToAMap($bd_lon = '', $bd_lat = '')
{
$x = $bd_lon - 0.0065;
$y = $bd_lat - 0.006;
$z = sqrt($x * $x + $y * $y) - 0.00002 * sin($y * self::x_PI);
$theta = atan2($y, $x) - 0.000003 * cos($x * self::x_PI);
$gg_lng = $z * cos($theta);
$gg_lat = $z * sin($theta);
return array($gg_lng, $gg_lat);
}
/**
* GCJ-02 转换为 BD-09 (火星坐标系转百度 即谷歌、高德转百度)
* @param string $lng 经度
* @param string $lat 纬度
* @return array
*/
static public function aMapToBaiDu($lng = '', $lat = '')
{
$z = sqrt($lng * $lng + $lat * $lat) + 0.00002 * sin($lat * self::x_PI);
$theta = atan2($lat, $lng) + 0.000003 * cos($lng * self::x_PI);
$bd_lng = $z * cos($theta) + 0.0065;
$bd_lat = $z * sin($theta) + 0.006;
return array($bd_lng, $bd_lat);
}
static private 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 * self::PI) + 20.0 * sin(2.0 * $lng * self::PI)) * 2.0 / 3.0;
$ret += (20.0 * sin($lat * self::PI) + 40.0 * sin($lat / 3.0 * self::PI)) * 2.0 / 3.0;
$ret += (160.0 * sin($lat / 12.0 * self::PI) + 320 * sin($lat * self::PI / 30.0)) * 2.0 / 3.0;
return $ret;
}
static private function transFormLng($lng = 0, $lat = 0)
{
$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 * self::PI) + 20.0 * sin(2.0 * $lng * self::PI)) * 2.0 / 3.0;
$ret += (20.0 * sin($lng * self::PI) + 40.0 * sin($lng / 3.0 * self::PI)) * 2.0 / 3.0;
$ret += (150.0 * sin($lng / 12.0 * self::PI) + 300.0 * sin($lng / 30.0 * self::PI)) * 2.0 / 3.0;
return $ret;
}
/**
* 判断是否在国内,不在国内不做偏移
* @param int $lng 经度
* @param int $lat 纬度
* @return bool
*/
static private function outOfChina($lng = 0, $lat = 0)
{
return ($lng < 72.004 || $lng > 137.8347) || (($lat < 0.8293 || $lat > 55.8271) || false);
}
//经开区大围栏坐标集
public function test_paper(){
$aa = '106.52676,29.57023
106.52606,29.57028
106.52548,29.57131
106.52548,29.57131
106.52548,29.57131
106.52421,29.57251
106.52286,29.57452
106.52164,29.5775
106.52099,29.58034
106.52127,29.58215
106.52205,29.58251
106.52205,29.58251
106.52403,29.5832
106.52403,29.5832
106.52546,29.5833
106.52546,29.5833
106.52559,29.58321
106.52609,29.58323
106.52756,29.58363
106.52659,29.58509
106.52554,29.58783
106.52397,29.59192
106.52206,29.59574
106.52006,29.59896
106.51972,29.60049
106.51999,29.60424
106.52038,29.60888
106.52203,29.61209
106.52334,29.61316
106.52492,29.61395
106.52696,29.61446
106.52775,29.61457
106.53072,29.61506
106.53501,29.6161
106.53884,29.61771
106.54337,29.61956
106.54866,29.61997
106.5528,29.6203
106.55514,29.62052
106.5571,29.6207
106.56091,29.62096
106.56562,29.62262
106.57048,29.62551
106.57582,29.62711
106.57743,29.62738
106.58141,29.62806
106.58635,29.62966
106.59124,29.63212
106.59606,29.63363
106.60114,29.63133
106.60681,29.62819
106.60839,29.62752
106.61297,29.62704
106.61878,29.62711
106.62408,29.62872
106.62627,29.63295
106.62695,29.63377
106.62695,29.63377
106.62695,29.63377
106.62745,29.63428
106.62782,29.63466
106.62822,29.6351
106.62853,29.63546
106.62853,29.63546
106.62913,29.63619
106.62913,29.63619
106.6296,29.63677
106.63046,29.63795
106.63146,29.63954
106.63248,29.64132
106.63401,29.64362
106.63648,29.64597
106.63775,29.64692
106.64152,29.64993
106.64425,29.65544
106.64762,29.66724
106.65013,29.67191
106.65277,29.6765
106.65361,29.67808
106.65527,29.68193
106.65694,29.68703
106.65983,29.69264
106.6635,29.69837
106.66741,29.70405
106.67275,29.70922
106.67341,29.71102
106.67491,29.71477
106.67861,29.72022
106.67882,29.72638
106.681,29.73153
106.68446,29.73525
106.68747,29.7385
106.68833,29.73929
106.68688,29.74203
106.68827,29.74529
106.68898,29.74651
106.68951,29.74915
106.68949,29.75301
106.68949,29.75301
106.68949,29.75301
106.68924,29.75364
106.68594,29.75453
106.68188,29.75563
106.67755,29.75664
106.67473,29.75684
106.67025,29.75662
106.66882,29.75644
106.66604,29.75604
106.66121,29.75548
106.65809,29.75647
106.65783,29.75776
106.65957,29.76149
106.66125,29.76609
106.66156,29.76693
106.66219,29.76924
106.66286,29.77205
106.66286,29.77205
106.66322,29.77354
106.66322,29.77354
106.66369,29.77477
106.66419,29.77548
106.66543,29.77741
106.66672,29.78089
106.66672,29.78202
106.66664,29.78445
106.66651,29.78759
106.66636,29.79188
106.66634,29.79337
106.66631,29.79545
106.66631,29.79545
106.66644,29.79684
106.66912,29.80023
106.67281,29.80387
106.67715,29.80681
106.67863,29.80793
106.68058,29.80952
106.68209,29.81075
106.68623,29.81335
106.69186,29.8159
106.69598,29.81912
106.69759,29.82248
106.69791,29.82391
106.6985,29.8267
106.69943,29.83097
106.70019,29.83349
106.70019,29.83349
106.70019,29.83349
106.70019,29.83349
106.70019,29.83349
106.70019,29.83349
106.70019,29.83349
106.70019,29.83349
106.70019,29.83349
106.70019,29.83349
106.70029,29.83348
106.70019,29.83385
106.70066,29.83488
106.70066,29.83488
106.70008,29.83391
106.69888,29.82918
106.69752,29.82288
106.69571,29.81896
106.69476,29.81796
106.69208,29.81614
106.68637,29.81361
106.68137,29.81041
106.67814,29.80773
106.6734,29.80447
106.66964,29.80101
106.66902,29.80029
106.66795,29.79903
106.66709,29.7981
106.66709,29.7981
106.66662,29.79748
106.66621,29.79501
106.66634,29.79067
106.66639,29.78904
106.66647,29.78585
106.66647,29.78585
106.6665,29.7851
106.66659,29.78214
106.66657,29.78069
106.66489,29.77696
106.66401,29.77572
106.66303,29.77337
106.66289,29.77275
106.66229,29.77023
106.66095,29.76563
106.65927,29.76112
106.65766,29.75759
106.65766,29.75759
106.65766,29.75759
106.65766,29.75759
106.65835,29.75616
106.66198,29.75546
106.66689,29.75605
106.66798,29.75621
106.66925,29.75639
106.67259,29.75669
106.6783,29.75641
106.68368,29.75503
106.68792,29.75389
106.68937,29.75145
106.68911,29.74736
106.68911,29.74736
106.68911,29.74736
106.68758,29.74443
106.68679,29.74037
106.68412,29.73517
106.67967,29.72991
106.67887,29.72301
106.67857,29.72044
106.6761,29.7164
106.67269,29.70946
106.66721,29.70407
106.66305,29.69786
106.65858,29.69123
106.65598,29.68459
106.65524,29.68227
106.65347,29.67804
106.65022,29.67232
106.64728,29.66661
106.64363,29.65409
106.6408,29.64938
106.6393,29.64822
106.63673,29.64631
106.63372,29.64342
106.63169,29.6401
106.62973,29.63704
106.62737,29.63446
106.62501,29.63157
106.62415,29.63016
106.6222,29.62881
106.61641,29.62698
106.60882,29.62756
106.60242,29.63075
106.59655,29.63366
106.59096,29.63214
106.58896,29.63113
106.58523,29.62926
106.57933,29.62789
106.57388,29.62696
106.56895,29.62476
106.56342,29.62162
106.55658,29.62079
106.55451,29.62096
106.55141,29.62125
106.54564,29.62016
106.54115,29.61935
106.53936,29.61843
106.53643,29.61705
106.53248,29.61652
106.5318,29.61652
106.53118,29.61653
106.53019,29.61653
106.52885,29.61647
106.52657,29.61579
106.52263,29.61425
106.51728,29.61298
106.51505,29.61268
106.51105,29.6124
106.50433,29.61194
106.49917,29.61026
106.49505,29.60886
106.49412,29.60954
106.49429,29.60725
106.49405,29.60583
106.49353,29.60334
106.49339,29.59939
106.49326,29.59554
106.49322,29.59348
106.49317,29.59131
106.49311,29.58871
106.49305,29.58745
106.49297,29.58564
106.49298,29.58265
106.49405,29.5782
106.49758,29.57497
106.50267,29.57304
106.51723,29.56899
106.51913,29.5658
106.52171,29.56568
106.52342,29.56764
106.5245,29.56892
106.52453,29.569
106.52469,29.56945
106.52487,29.56958
106.52571,29.56997';
$arr = '106.52676 29.57023
106.52606 29.57028
106.52548 29.57131
106.52548 29.57131
106.52548 29.57131
106.52421 29.57251
106.52286 29.57452
106.52164 29.5775
106.52099 29.58034
106.52127 29.58215
106.52205 29.58251
106.52205 29.58251
106.52403 29.5832
106.52403 29.5832
106.52546 29.5833
106.52546 29.5833
106.52559 29.58321
106.52609 29.58323
106.52756 29.58363
106.52659 29.58509
106.52554 29.58783
106.52397 29.59192
106.52206 29.59574
106.52006 29.59896
106.51972 29.60049
106.51999 29.60424
106.52038 29.60888
106.52203 29.61209
106.52334 29.61316
106.52492 29.61395
106.52696 29.61446
106.52775 29.61457
106.53072 29.61506
106.53501 29.6161
106.53884 29.61771
106.54337 29.61956
106.54866 29.61997
106.5528 29.6203
106.55514 29.62052
106.5571 29.6207
106.56091 29.62096
106.56562 29.62262
106.57048 29.62551
106.57582 29.62711
106.57743 29.62738
106.58141 29.62806
106.58635 29.62966
106.59124 29.63212
106.59606 29.63363
106.60114 29.63133
106.60681 29.62819
106.60839 29.62752
106.61297 29.62704
106.61878 29.62711
106.62408 29.62872
106.62627 29.63295
106.62695 29.63377
106.62695 29.63377
106.62695 29.63377
106.62745 29.63428
106.62782 29.63466
106.62822 29.6351
106.62853 29.63546
106.62853 29.63546
106.62913 29.63619
106.62913 29.63619
106.6296 29.63677
106.63046 29.63795
106.63146 29.63954
106.63248 29.64132
106.63401 29.64362
106.63648 29.64597
106.63775 29.64692
106.64152 29.64993
106.64425 29.65544
106.64762 29.66724
106.65013 29.67191
106.65277 29.6765
106.65361 29.67808
106.65527 29.68193
106.65694 29.68703
106.65983 29.69264
106.6635 29.69837
106.66741 29.70405
106.67275 29.70922
106.67341 29.71102
106.67491 29.71477
106.67861 29.72022
106.67882 29.72638
106.681 29.73153
106.68446 29.73525
106.68747 29.7385
106.68833 29.73929
106.68688 29.74203
106.68827 29.74529
106.68898 29.74651
106.68951 29.74915
106.68949 29.75301
106.68949 29.75301
106.68949 29.75301
106.68924 29.75364
106.68594 29.75453
106.68188 29.75563
106.67755 29.75664
106.67473 29.75684
106.67025 29.75662
106.66882 29.75644
106.66604 29.75604
106.66121 29.75548
106.65809 29.75647
106.65783 29.75776
106.65957 29.76149
106.66125 29.76609
106.66156 29.76693
106.66219 29.76924
106.66286 29.77205
106.66286 29.77205
106.66322 29.77354
106.66322 29.77354
106.66369 29.77477
106.66419 29.77548
106.66543 29.77741
106.66672 29.78089
106.66672 29.78202
106.66664 29.78445
106.66651 29.78759
106.66636 29.79188
106.66634 29.79337
106.66631 29.79545
106.66631 29.79545
106.66644 29.79684
106.66912 29.80023
106.67281 29.80387
106.67715 29.80681
106.67863 29.80793
106.68058 29.80952
106.68209 29.81075
106.68623 29.81335
106.69186 29.8159
106.69598 29.81912
106.69759 29.82248
106.69791 29.82391
106.6985 29.8267
106.69943 29.83097
106.70019 29.83349
106.70019 29.83349
106.70019 29.83349
106.70019 29.83349
106.70019 29.83349
106.70019 29.83349
106.70019 29.83349
106.70019 29.83349
106.70019 29.83349
106.70019 29.83349
106.70029 29.83348
106.70019 29.83385
106.70066 29.83488
106.70066 29.83488
106.70008 29.83391
106.69888 29.82918
106.69752 29.82288
106.69571 29.81896
106.69476 29.81796
106.69208 29.81614
106.68637 29.81361
106.68137 29.81041
106.67814 29.80773
106.6734 29.80447
106.66964 29.80101
106.66902 29.80029
106.66795 29.79903
106.66709 29.7981
106.66709 29.7981
106.66662 29.79748
106.66621 29.79501
106.66634 29.79067
106.66639 29.78904
106.66647 29.78585
106.66647 29.78585
106.6665 29.7851
106.66659 29.78214
106.66657 29.78069
106.66489 29.77696
106.66401 29.77572
106.66303 29.77337
106.66289 29.77275
106.66229 29.77023
106.66095 29.76563
106.65927 29.76112
106.65766 29.75759
106.65766 29.75759
106.65766 29.75759
106.65766 29.75759
106.65835 29.75616
106.66198 29.75546
106.66689 29.75605
106.66798 29.75621
106.66925 29.75639
106.67259 29.75669
106.6783 29.75641
106.68368 29.75503
106.68792 29.75389
106.68937 29.75145
106.68911 29.74736
106.68911 29.74736
106.68911 29.74736
106.68758 29.74443
106.68679 29.74037
106.68412 29.73517
106.67967 29.72991
106.67887 29.72301
106.67857 29.72044
106.6761 29.7164
106.67269 29.70946
106.66721 29.70407
106.66305 29.69786
106.65858 29.69123
106.65598 29.68459
106.65524 29.68227
106.65347 29.67804
106.65022 29.67232
106.64728 29.66661
106.64363 29.65409
106.6408 29.64938
106.6393 29.64822
106.63673 29.64631
106.63372 29.64342
106.63169 29.6401
106.62973 29.63704
106.62737 29.63446
106.62501 29.63157
106.62415 29.63016
106.6222 29.62881
106.61641 29.62698
106.60882 29.62756
106.60242 29.63075
106.59655 29.63366
106.59096 29.63214
106.58896 29.63113
106.58523 29.62926
106.57933 29.62789
106.57388 29.62696
106.56895 29.62476
106.56342 29.62162
106.55658 29.62079
106.55451 29.62096
106.55141 29.62125
106.54564 29.62016
106.54115 29.61935
106.53936 29.61843
106.53643 29.61705
106.53248 29.61652
106.5318 29.61652
106.53118 29.61653
106.53019 29.61653
106.52885 29.61647
106.52657 29.61579
106.52263 29.61425
106.51728 29.61298
106.51505 29.61268
106.51105 29.6124
106.50433 29.61194
106.49917 29.61026
106.49505 29.60886
106.49412 29.60954
106.49429 29.60725
106.49405 29.60583
106.49353 29.60334
106.49339 29.59939
106.49326 29.59554
106.49322 29.59348
106.49317 29.59131
106.49311 29.58871
106.49305 29.58745
106.49297 29.58564
106.49298 29.58265
106.49405 29.5782
106.49758 29.57497
106.50267 29.57304
106.51723 29.56899
106.51913 29.5658
106.52171 29.56568
106.52342 29.56764
106.5245 29.56892
106.52453 29.569
106.52469 29.56945
106.52487 29.56958
106.52571 29.56997
';
$str = '(106.988613,29.835648)
(106.987795,29.836)
(106.987715,29.835985)
(106.986893,29.836263)
(106.983398,29.837426)
(106.982967,29.837065)
(106.978817,29.838702)
(106.977721,29.836635)
(106.982347,29.834559)
(106.984274,29.833572)
(106.984292,29.833521)
(106.985141,29.833114)
(106.986084,29.83264)
(106.986151,29.832652)
(106.988613,29.835652)
';
// $arr = str_replace('',',',$arr);
$tokens = preg_split('/[\r\n]+/', $aa);
// $this->pre($aa);
// $this->pre($tokens);
// $abcc = implode(';',$tokens);
// $this->pre($tokens);
// $this->pre($abcc);
// die;
// $gd = '106.52676,29.57023;106.52606,29.57028;106.52548,29.57131;106.52548,29.57131;106.52548,29.57131;106.52421,29.57251;106.52286,29.57452;106.52164,29.5775;106.52099,29.58034;106.52127,29.58215;106.52205,29.58251;106.52205,29.58251;106.52403,29.5832;106.52403,29.5832;106.52546,29.5833;106.52546,29.5833;106.52559,29.58321;106.52609,29.58323;106.52756,29.58363;106.52659,29.58509;106.52554,29.58783;106.52397,29.59192;106.52206,29.59574;106.52006,29.59896;106.51972,29.60049;106.51999,29.60424;106.52038,29.60888;106.52203,29.61209;106.52334,29.61316;106.52492,29.61395;106.52696,29.61446;106.52775,29.61457;106.53072,29.61506;106.53501,29.6161;106.53884,29.61771;106.54337,29.61956;106.54866,29.61997;106.5528,29.6203;106.55514,29.62052;106.5571,29.6207;106.56091,29.62096;106.56562,29.62262;106.57048,29.62551;106.57582,29.62711;106.57743,29.62738;106.58141,29.62806;106.58635,29.62966;106.59124,29.63212;106.59606,29.63363;106.60114,29.63133;106.60681,29.62819;106.60839,29.62752;106.61297,29.62704;106.61878,29.62711;106.62408,29.62872;106.62627,29.63295;106.62695,29.63377;106.62695,29.63377;106.62695,29.63377;106.62745,29.63428;106.62782,29.63466;106.62822,29.6351;106.62853,29.63546;106.62853,29.63546;106.62913,29.63619;106.62913,29.63619;106.6296,29.63677;106.63046,29.63795;106.63146,29.63954;106.63248,29.64132;106.63401,29.64362;106.63648,29.64597;106.63775,29.64692;106.64152,29.64993;106.64425,29.65544;106.64762,29.66724;106.65013,29.67191;106.65277,29.6765;106.65361,29.67808;106.65527,29.68193;106.65694,29.68703;106.65983,29.69264;106.6635,29.69837;106.66741,29.70405;106.67275,29.70922;106.67341,29.71102;106.67491,29.71477;106.67861,29.72022;106.67882,29.72638;106.681,29.73153;106.68446,29.73525;106.68747,29.7385;106.68833,29.73929;106.68688,29.74203;106.68827,29.74529;106.68898,29.74651;106.68951,29.74915;106.68949,29.75301;106.68949,29.75301;106.68949,29.75301;106.68924,29.75364;106.68594,29.75453;106.68188,29.75563;106.67755,29.75664;106.67473,29.75684;106.67025,29.75662;106.66882,29.75644;106.66604,29.75604;106.66121,29.75548;106.65809,29.75647;106.65783,29.75776;106.65957,29.76149;106.66125,29.76609;106.66156,29.76693;106.66219,29.76924;106.66286,29.77205;106.66286,29.77205;106.66322,29.77354;106.66322,29.77354;106.66369,29.77477;106.66419,29.77548;106.66543,29.77741;106.66672,29.78089;106.66672,29.78202;106.66664,29.78445;106.66651,29.78759;106.66636,29.79188;106.66634,29.79337;106.66631,29.79545;106.66631,29.79545;106.66644,29.79684;106.66912,29.80023;106.67281,29.80387;106.67715,29.80681;106.67863,29.80793;106.68058,29.80952;106.68209,29.81075;106.68623,29.81335;106.69186,29.8159;106.69598,29.81912;106.69759,29.82248;106.69791,29.82391;106.6985,29.8267;106.69943,29.83097;106.70019,29.83349;106.70019,29.83349;106.70019,29.83349;106.70019,29.83349;106.70019,29.83349;106.70019,29.83349;106.70019,29.83349;106.70019,29.83349;106.70019,29.83349;106.70019,29.83349;106.70029,29.83348;106.70019,29.83385;106.70066,29.83488;106.70066,29.83488;106.70008,29.83391;106.69888,29.82918;106.69752,29.82288;106.69571,29.81896;106.69476,29.81796;106.69208,29.81614;106.68637,29.81361;106.68137,29.81041;106.67814,29.80773;106.6734,29.80447;106.66964,29.80101;106.66902,29.80029;106.66795,29.79903;106.66709,29.7981;106.66709,29.7981;106.66662,29.79748;106.66621,29.79501;106.66634,29.79067;106.66639,29.78904;106.66647,29.78585;106.66647,29.78585;106.6665,29.7851;106.66659,29.78214;106.66657,29.78069;106.66489,29.77696;106.66401,29.77572;106.66303,29.77337;106.66289,29.77275;106.66229,29.77023;106.66095,29.76563;106.65927,29.76112;106.65766,29.75759;106.65766,29.75759;106.65766,29.75759;106.65766,29.75759;106.65835,29.75616;106.66198,29.75546;106.66689,29.75605;106.66798,29.75621;106.66925,29.75639;106.67259,29.75669;106.6783,29.75641;106.68368,29.75503;106.68792,29.75389;106.68937,29.75145;106.68911,29.74736;106.68911,29.74736;106.68911,29.74736;106.68758,29.74443;106.68679,29.74037;106.68412,29.73517;106.67967,29.72991;106.67887,29.72301;106.67857,29.72044;106.6761,29.7164;106.67269,29.70946;106.66721,29.70407;106.66305,29.69786;106.65858,29.69123;106.65598,29.68459;106.65524,29.68227;106.65347,29.67804;106.65022,29.67232;106.64728,29.66661;106.64363,29.65409;106.6408,29.64938;106.6393,29.64822;106.63673,29.64631;106.63372,29.64342;106.63169,29.6401;106.62973,29.63704;106.62737,29.63446;106.62501,29.63157;106.62415,29.63016;106.6222,29.62881;106.61641,29.62698;106.60882,29.62756;106.60242,29.63075;106.59655,29.63366;106.59096,29.63214;106.58896,29.63113;106.58523,29.62926;106.57933,29.62789;106.57388,29.62696;106.56895,29.62476;106.56342,29.62162;106.55658,29.62079;106.55451,29.62096;106.55141,29.62125;106.54564,29.62016;106.54115,29.61935;106.53936,29.61843;106.53643,29.61705;106.53248,29.61652;106.5318,29.61652;106.53118,29.61653;106.53019,29.61653;106.52885,29.61647;106.52657,29.61579;106.52263,29.61425;106.51728,29.61298;106.51505,29.61268;106.51105,29.6124;106.50433,29.61194;106.49917,29.61026;106.49505,29.60886;106.49412,29.60954;106.49429,29.60725;106.49405,29.60583;106.49353,29.60334;106.49339,29.59939;106.49326,29.59554;106.49322,29.59348;106.49317,29.59131;106.49311,29.58871;106.49305,29.58745;106.49297,29.58564;106.49298,29.58265;106.49405,29.5782;106.49758,29.57497;106.50267,29.57304;106.51723,29.56899;106.51913,29.5658;106.52171,29.56568;106.52342,29.56764;106.5245,29.56892;106.52453,29.569;106.52469,29.56945;106.52487,29.56958;106.52571,29.56997';
// $str = str_replace(')','',$str);
// $result = array(); // 转换后的结果
// $tokens = preg_split('/[\r\n]+/', $str);
//WGS84北斗转高德坐标
// $aaa = '106.54829705924,29.609340554305;106.54832757762,29.609408038681;106.5483874398,29.609531526631;106.54842641336,29.609612251095;106.54844227423,29.60964273476;106.54845842086,29.609667710334;106.54845954903,29.609672728464;106.54845959159,29.609672726093;106.54847734,29.609695089055;106.54850062848,29.609719765108;106.5485331403,29.609747857574;106.54856605013,29.609770709559;106.54860786672,29.609793542232;106.54865764244,29.609813468288;106.54869586453,29.609824237206;106.54871263729,29.609827570447;106.54870881483,29.609673826;106.54870890688,29.609673814144;106.54869876965,29.609667984561;106.54867331414,29.609654065908;106.5486583382,29.609640079984;106.5486284823,29.609614089667;106.54860317159,29.609581132906;106.54858833423,29.609550244428;106.54854118117,29.60945759406;106.54848174377,29.60933497514;106.54843554015,29.609239657414;106.54838763242,29.609136353115;106.54835283042,29.609079503919;106.54829696956,29.609016088547;106.54821073103,29.608940008512;106.54809476099,29.608894074099;106.54795047292,29.608868240416;106.54685441522,29.60889766152;106.54679324602,29.608900125074;106.54649688992,29.608863341976;106.54649643264,29.608862925716;106.54597224328,29.608863921304;106.54597345757,29.609024212799;106.54635389862,29.609014116045;106.5463540532,29.60901377991;106.54646768145,29.609010610163;106.54646809282,29.609010951935;106.54680677515,29.609292333017;106.54680763265,29.609291146494;106.54697548059,29.609133269741;106.54795601929,29.609107125295;106.54795641936,29.609107114628;106.54795642023,29.609107136912;106.54816023132,29.609103272576;106.54817596767,29.609117938267;106.54819149927,29.609134715682;106.54821487109,29.609166098109;106.54823123537,29.609195205702;106.54824890236,29.609231650548;106.54829705924,29.609340554305';
// $tokens = explode(';',$aaa);
$path = '';
foreach ($tokens as $k => $v){
$v_arr = explode(',',$v);
// $this->pre($v_arr);die;
// $abc = $this->beiDouToAMap($v_arr[0],$v_arr[1]);
$abc = $this->aMapToBaiDu($v_arr[0],$v_arr[1]);
// $this->pre($abc);die;
$url = number_format($abc[0],6).','.number_format($abc[1],6);
// $url = $abc['lng'].','.$abc['lat'];
// $url = $abc[0].','.$abc[1];
$path .= $url.';';
}
$this->pre($path);
die;
// $this->pre($tokens);
foreach ($tokens as $token) {
if (false !== strpos($token, '=')) {
list($key, $value) = explode('=', $token, 2);
$result[$key] = $value;
} else
$result[] = $token;
}
$path = '';
foreach ($result as $k => $v){
if ($v){
$Varr = explode(',',$v);
$res = $this->bd_decrypt($Varr[0],$Varr[1]);
$url = number_format($res['gg_lon'],6).','.number_format($res['gg_lat'],6);
$path .= $url.';';
// $this->pre($res);die;
// $path += $url.';';
}
}
$this->pre($path);die;
$path_arr = explode(';',$path);
$path_bd = '';//北斗坐标集(由高德转北斗坐标集)
foreach ($path_arr as $k => $v){
// $this->pre($v);
// $aa['content'] = $v;
// $this->pre($aa);
// Db::name('abc')->insert($aa);//百度转高德坐标集
$Varr = explode(',',$v);
if (count($Varr) == 2){
$res = $this->aMapToBeiDou($Varr[0],$Varr[1]);
$url = number_format($res[0],6).','.number_format($res[1],6);
$url = '{"lon":'.number_format($res[0],6).',"lat":'.number_format($res[1],6).'},';
$path_bd .= $url.';';
}
}
// $this->pre($path_bd);die;
$path_bd_arr = explode(';',$path_bd);
foreach ($path_bd_arr as $k => $v){
$aa['content'] = $v;
Db::name('abc')->insert($aa);//高德转北斗坐标集
}
}
//BD-09(百度) 坐标转换成 GCJ-02(火星,高德) 坐标
//@param bd_lon 百度经度
//@param bd_lat 百度纬度
public function bd_decrypt($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);
$data['gg_lon'] = $z * cos($theta);
$data['gg_lat'] = $z * sin($theta);
return $data;
}
//GCJ-02(火星,高德)坐标转换成BD-09(百度)坐标
//@param bd_lon 百度经度
//@param bd_lat 百度纬度
function bd_encrypt($gg_lon,$gg_lat){
$x_pi = 3.14159265358979324 * 3000.0 / 180.0;
$x = $gg_lon;
$y = $gg_lat;
$z = sqrt($x * $x + $y * $y) - 0.00002 * sin($y * $x_pi);
$theta = atan2($y, $x) - 0.000003 * cos($x * $x_pi);
$bd_lon = $z * cos($theta) + 0.0065;
$bd_lat = $z * sin($theta) + 0.006;
// 保留小数点后六位
$data['bd_lon'] = round($bd_lon, 6);
$data['bd_lat'] = round($bd_lat, 6);
return $data;
}
}