845 lines
27 KiB
PHP
845 lines
27 KiB
PHP
|
|
<?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;10
|
|||
|
|
|
|||
|
|
|
|||
|
|
// $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;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|