MapService.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. namespace services\extend;
  3. use Yii;
  4. use linslin\yii2\curl\Curl;
  5. use yii\helpers\Json;
  6. /**
  7. * Class MapService
  8. * @package services\extend
  9. */
  10. class MapService
  11. {
  12. const URL = 'http://restapi.amap.com';
  13. /**
  14. * 高德根据地址获取经纬度
  15. *
  16. * @param $address
  17. * @return bool|false|string[]
  18. * @throws \Exception
  19. */
  20. public function aMapAddressToLocation($address)
  21. {
  22. $url = self::URL . '/v3/geocode/geo?address=' . $address . '&key=' . $this->getConfigByKey('map_amap_web_key');
  23. $curl = new Curl();
  24. if ($result = $curl->get($url)) {
  25. $result = Json::decode($result);
  26. //判断是否成功
  27. if (!empty($result['count'])) {
  28. $geo = $result['geocodes']['0'];
  29. return [
  30. 'country' => $geo['country'] ?? '',
  31. 'province' => $geo['province'] ?? '',
  32. 'citycode' => $geo['citycode'] ?? '',
  33. 'city' => $geo['city'] ?? '',
  34. 'district' => $geo['district'] ?? '',
  35. 'township' => $geo['township'] ?? '',
  36. 'towncode' => $geo['towncode'] ?? '',
  37. 'location' => $geo['location'] ?? '',
  38. 'adcode' => $geo['adcode'] ?? '',
  39. 'level' => $geo['level'] ?? '',
  40. 'businessAreas' => $geo['businessAreas'] ?? '',
  41. ];
  42. }
  43. }
  44. return false;
  45. }
  46. /**
  47. * 高德经纬度转地址
  48. *
  49. * @param string $location 2322,12.15544
  50. * @return bool|mixed
  51. * @throws \Exception
  52. */
  53. public function aMapLocationToAddress($location)
  54. {
  55. $url = self::URL . "/v3/geocode/regeo?output=json&location=" . $location . "&key=" . $this->getConfigByKey('map_amap_web_key');
  56. $curl = new Curl();
  57. if ($result = $curl->get($url)) {
  58. $result = Json::decode($result);
  59. if (!empty($result['status']) && $result['status'] == 1) {
  60. $addressComponent = $result['regeocode']['addressComponent'];
  61. return [
  62. 'country' => $addressComponent['country'] ?? '',
  63. 'province' => $addressComponent['province'] ?? '',
  64. 'citycode' => $addressComponent['citycode'] ?? '',
  65. 'city' => $addressComponent['city'] ?? '',
  66. 'district' => $addressComponent['district'] ?? '',
  67. 'township' => $addressComponent['township'] ?? '',
  68. 'towncode' => $addressComponent['towncode'] ?? '',
  69. 'location' => $addressComponent['location'] ?? '',
  70. 'adcode' => $addressComponent['adcode'] ?? '',
  71. 'level' => $addressComponent['level'] ?? '',
  72. 'businessAreas' => $addressComponent['businessAreas'] ?? '',
  73. 'streetNumber' => $addressComponent['streetNumber'] ?? '',
  74. 'formatted_address' => $result['regeocode']['formatted_address']
  75. ];
  76. }
  77. }
  78. return false;
  79. }
  80. /**
  81. * 默认后台拿 key
  82. *
  83. * @param $key
  84. * @return string|null
  85. */
  86. protected function getConfigByKey($key)
  87. {
  88. return Yii::$app->services->config->backendConfig($key);
  89. }
  90. }
粤ICP备19079148号