php ip 定位,php用百度地图API进行IP定位和GPS定位

/**

* 根据地理坐标获取国家、省份、城市,及周边数据类(利用百度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;

}

}

?>

header("Content-type: text/html; charset=utf-8");

header(‘Access-Control-Allow-Origin:*‘);

require "Geocoding.class.php";

$ak = ‘6q6OVS3LlFuZcoXGtXvqxBYq‘;//百度秘钥已更改需要填写自己的

class Location

{

private static $_instance;

public $province;

public $city;

public $district;

public $street;

public $address;

}

function test_input($data)

{

$data = trim($data);

$data = stripslashes($data);

$data = htmlspecialchars($data);

return $data;

}

$longitude = test_input($_GET["long"]);

$latitude = test_input($_GET["lat"]);

$result = Geocoding::getAddressComponent($ak, $longitude, $latitude, Geocoding::NO_POIS);

$locat=new Location();

$address=$result["result"]["addressComponent"];

if($address["province"]!=$address["city"])

{

$location=$address["province"].$address["city"].$address["district"].$address["street"];

}

else

{

$location=$address["city"].$address["district"].$address["street"];

}

$locat->province=$address["province"];

$locat->city=$address["city"];

$locat->district=$address["district"];

$locat->street=$address["street"];

$locat->address=$location;

$json = json_encode($locat);

echo "$json";//返回类似地址字符串也可根据自己需要返回地址

?>

原文:http://www.cnblogs.com/wangboke/p/5579611.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值