当前位置:首页 > PHP教程 > php高级应用 > 列表

php版微信JS-SDK地理位置取街景实例

发布:smiling 来源: PHP粉丝网  添加日期:2018-10-30 10:14:38 浏览: 评论:0 

根据《微信JS-SDK地理位置接口例子》中的QQMapModel和ImageCacheModel类进行扩展。看了下腾讯地图有个静态图的V2版,我顺便也加上去,继续围绕腾讯地图把取街景的接口写上。由于是Demo,像取街景有几个参数可以自行定义,我只用默认!不多说看码吧

QQMapModel.class.php: (注:API_KEY 用QQ在官方申请,目前免费)

  1. namespace Home\Model; 
  2. class QQMapModel { 
  3.     const 
  4.         PANO_API = 'http://apis.map.qq.com/ws/streetview/v1/getpano'
  5.         API_KEY = 'CZQBZ-RC53V-2RQPX-UFNBE-FCH2J-DF00'
  6.  
  7.     static public function call($urlarray $params = null) { 
  8.         $url = $url.'?'.http_build_query($params); 
  9.         $ch = curl_init($url); 
  10.         curl_setopt_array($charray
  11.             CURLOPT_RETURNTRANSFER => 1, 
  12.             CURLOPT_FOLLOWLOCATION => 1, 
  13.             CURLOPT_AUTOREFERER => 1, 
  14.             CURLOPT_SSL_VERIFYHOST => 0, 
  15.             CURLOPT_SSL_VERIFYPEER => 0, 
  16.             CURLOPT_VERBOSE => 1, 
  17.         )); 
  18.         $result = curl_exec($ch); 
  19.         if (curl_errno($ch)) { 
  20.             return false; 
  21.         } 
  22.         curl_close($ch); 
  23.         return $result
  24.     } 
  25.  
  26.     //新静态图v2接口 
  27.     static function staticMap($point$otherParam = array()) { 
  28.         $pos = explode(','$point); 
  29.         $posStr = $pos[1].','.$pos[0]; 
  30.         $param = array
  31.             'size' => '620*380'
  32.             'center' => $posStr
  33.             'zoom' => 13, 
  34.             'format' => 'png'
  35.             'maptype' => 'roadmap'
  36.             'markers' => $posStr
  37.             'key' => self::API_KEY, 
  38.         ); 
  39.         if(count($otherParam)) 
  40.             $param = array_merge($param$otherParam); 
  41.         return 'http://apis.map.qq.com/ws/staticmap/v2/?' . http_build_query($param); 
  42.     } 
  43.  
  44.     //取街景图接口 
  45.     static function streetView($pano$otherParam = array()) { //max 960x640 
  46.         $param = array
  47.             'size' => '620x380'
  48.             'pano' => $pano
  49.             'heading' => 0, 
  50.             'pitch' => 0, 
  51.             'key' => self::API_KEY, 
  52.         ); 
  53.         if(count($otherParam)) 
  54.             $param = array_merge($param$otherParam); 
  55.         return 'http://apis.map.qq.com/ws/streetview/v1/image?' . http_build_query($param); 
  56.     } 
  57.  
  58.     //街景图的ID接口 
  59.     static function getPano($location$otherParam = array()) { 
  60.         $param = array
  61.             'location' => $location
  62.             'radius' => 200, 
  63.             'output' => 'json'
  64.             'key' => self::API_KEY, 
  65.         ); 
  66.         if(count($otherParam)) 
  67.             $param = array_merge($param$otherParam); 
  68.         $result = self::call(self::PANO_API, $param); 
  69.         if ($result) { 
  70.             return json_decode($result, 1); 
  71.         } 
  72.         return false; 
  73.     } 
  74.  
  75.     //静态图v1版接口 
  76.     static function mapImage($point$otherParam = array()) { 
  77.         $param = array
  78.             'size' => '620*380'
  79.             'center' => $point
  80.             'zoom' => 13, 
  81.             'format' => 'png'
  82.             'markers' => $point
  83.         ); 
  84.         if(count($otherParam)) 
  85.             $param = array_merge($param$otherParam); 
  86.         return 'http://st.map.qq.com/api?' . http_build_query($param); 
  87.     } 
  88. ImageCacheModel类:(只是在上篇教程上加多个静态方法处理街景的缓存) 
  89. public static function getStreetCacheImg($points) { 
  90.         $fileName = md5($points); 
  91.         self::$FULL_CACHE_DIR = C('PUBLIC_FULL_DIR').self::CACHE_DIR; 
  92.         $cacheImg = self::$FULL_CACHE_DIR.'/'.$fileName.self::$TYPE
  93.         if(file_exists($cacheImg)) { 
  94.             return self::CACHE_DIR.$fileName.self::$TYPE
  95.         } else { 
  96.             $res = QQMapModel::getPano($points); 
  97.             if($res['status'] === 0) { 
  98.                 $pano = $res['detail']['id']; 
  99.                 $imageUrl = QQMapModel::streetView($pano); 
  100.                 self::saveCacheImg($imageUrl$fileName); 
  101.                 return self::CACHE_DIR.$fileName.self::$TYPE
  102.             } 
  103.             return self::CACHE_DIR.'default'.self::$TYPE
  104.         } 
  105.     } 

然后Controller里的处理:(至于Layout模版里的AJAX调用与上篇地理接口差不多,这里就不写了)

  1. public function streetpicAction() { 
  2.         layout(false); 
  3.         if(I('pos','')) { 
  4.             $target = ImageCacheModel::getStreetCacheImg(I('pos')); 
  5.             $url = __ROOT__.$target
  6.             redirect($url); 
  7.         } 
  8.     } 

Tags: php版微信 JS-SDK

分享到: