功能:当App获取到用户的地理坐标时,能够依据坐标知道用户当前在那个国家、省份、城市。及周边有什么数据。

原理:基于百度Geocoding API 实现。须要先注冊百度开发人员。然后申请百度AK(密钥)




Geocoding.class.php

<?php
/**
* 依据地理坐标获取国家、省份、城市,及周边数据类(利用百度Geocoding API实现)
* 百度密钥获取方法:http://lbsyun.baidu.com/apiconsole/key?application=key(须要先注冊百度开发人员账号)
* Date: 2015-07-30
* Author: fdipzone
* Ver: 1.0
*
* Func:
* Public getAddressComponent 依据地址获取国家、省份、城市及周边数据
* Private toCurl 使用curl调用百度Geocoding API
*/ class Geocoding { // 百度Geocoding API
const API = 'http://api.map.baidu.com/geocoder/v2/'; // 不显示周边数据
const NO_POIS = 0; // 显示周边数据
const POIS = 1; /**
* 依据地址获取国家、省份、城市及周边数据
* @param String $ak 百度ak(密钥)
* @param Decimal $longitude 经度
* @param Decimal $latitude 纬度
* @param Int $pois 是否显示周边数据
* @return Array
*/
public static function getAddressComponent($ak, $longitude, $latitude, $pois=self::NO_POIS){ $param = array(
'ak' => $ak,
'location' => implode(',', array($latitude, $longitude)),
'pois' => $pois,
'output' => 'json'
); // 请求百度api
$response = self::toCurl(self::API, $param); $result = array(); if($response){
$result = json_decode($response, true);
} return $result; } /**
* 使用curl调用百度Geocoding API
* @param String $url 请求的地址
* @param Array $param 请求的參数
* @return JSON
*/
private static function toCurl($url, $param=array()){ $ch = curl_init(); if(substr($url,0,5)=='https'){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 从证书中检查SSL加密算法是否存在
} curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param)); $response = curl_exec($ch); if($error=curl_error($ch)){
return false;
} curl_close($ch); return $response; } } ? >

demo.php

<?php
require "Geocoding.class.php"; $ak = '这里填写你的百度AK';
$longitude = 113.327782;
$latitude = 23.137202; $result = Geocoding::getAddressComponent($ak, $longitude, $latitude, Geocoding::NO_POIS); echo '<pre>';
print_r($result);
echo '</pre>';
? >

样例返回:

Array
(
[status] => 0
[result] => Array
(
[location] => Array
(
[lng] => 113.32778195925
[lat] => 23.137201991056
) [formatted_address] => 广东省广州市天河区体育西横街35号
[business] => 天河城,体育中心,沙河
[addressComponent] => Array
(
[city] => 广州市
[country] => 中国
[direction] => 附近
[distance] => 14
[district] => 天河区
[province] => 广东省
[street] => 体育西横街
[street_number] => 35号
[country_code] => 0
) [poiRegions] => Array
(
) [sematic_description] => 红盾大厦北58米
[cityCode] => 257
) )

源代码下载地址:点击查看

最新文章

  1. BootStrap_02之全局样式及组件
  2. iOS 数字滚动 类似于老 - 虎- 机的效果
  3. 常用HTML标签元素结合及简介
  4. DOM节点关系,节点关系
  5. python学习笔记2(pycharm、数据类型)
  6. 再论prototype
  7. shell中的declare命令
  8. 《从零玩转JavaWeb+项目实战》-系列课堂录制计划
  9. Spring Security 入门(1-3-3)Spring Security - logout 退出登录
  10. [PA 2014]Bohater
  11. 前后端分离djangorestframework—— 在线视频平台接入第三方加密防盗录视频
  12. Caused by: javax.persistence.NonUniqueResultException: result returns more than one elements
  13. Jenkins结合.net平台工具之Nunit
  14. 【转载】常用 Java 静态代码分析工具的分析与比较
  15. python 多线程操作数据库
  16. php 正则截取文章图片
  17. Android移动应用界面的模板化设计
  18. CPU结构与指令执行过程简介
  19. 【LeetCode67】 Add Binary
  20. SMARTFORMS关闭失败

热门文章

  1. opentracing学习入门
  2. sslstrip 中间人HTTP
  3. Learn How To Attach PL/SQL Library In Oracle Forms
  4. java关于Timer schedule执行定时任务 1、在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等
  5. php数据库操作代码
  6. mac 查看文件编码及转换文件编码
  7. java项目热加载工具jrebel
  8. Python代码优化概要
  9. 过滤器Filter_03_多个Filter的执行顺序
  10. binary-tree-inorder-traversal——二叉树中序遍历