php用百度地图API进行IP定位和GPS定位
<?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; } } ?>
使用
<?php
header("Content-type: text/html; charset=utf-8");
header('Access-Control-Allow-Origin:*');
require "Geocoding.class.php";//引入配置类
$ak = '2q6OVS3LlFuZcoXGtXvqxAYq';//百度申请的秘钥,这里是错误的秘钥
class Location
{
public $province;
public $city;
public $district;
public $street;
public $address;
private static $_instance;
public static function getInstance()
{
if(! (self::$_instance instanceof self) )
{
self::$_instance = new self();
}
return self::$_instance;
}
private function __construct(){}
private function __clone(){}
}
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
} //默认以GET方式传送
$longitude = test_input($_GET["long"]);
$latitude = test_input($_GET["lat"]);
//$longitude=113.327782;
//$latitude=23.137202;
$result = Geocoding::getAddressComponent($ak, $longitude, $latitude, Geocoding::NO_POIS);
$locat=Location::getInstance() ; $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://developer.baidu.com/map/
参考链接http://my.oschina.net/xialeistudio/blog/366347
php用百度地图API进行IP定位和GPS定位的更多相关文章
- 百度地图API的IP定位城市和浏览器定位(转)
百度地图API提供了Geolocation 和 LocalCity两个服务类. 这俩API可以分别供用户在JavaScript中进行定位和城市确认. 1 本质上,Geolocation这个类是使用了支 ...
- 百度地图api使用,简单搜索+经纬度定位+自定义消息窗口
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- vue引入百度地图api组件封装(根据地址定位)
Map.vue <template> <div class="Map" :style="{ height: this.height+'px', widt ...
- [工具向]__申请,下载,使用百度地图api
前言 api即应用程序接口,在我们的日常开发中,我们不仅可以在开源代码仓库(,github,码云)中获得很大的帮助,在日常开发中占重要地位的另一个东西就是api,我们可以使用众多的第三方编写的优秀的a ...
- 百度地图API,定位您的当前位置
1.介绍 利用百度地图的API来定位您的所属位置,这个位置返回的是经纬度,而不是具体的汉字位置.利用经纬度,再显示在百度地图上的位置. 2.代码 <html> <head> & ...
- 百度地图API示例之添加定位相关控件
代码 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" cont ...
- Android 百度地图API 定位 导航
看看这个利用百度地图定位并实现目的地导航的Demo. 首先看实现效果: 进 入后首先会得到当前位置,在地图上显示出来.在输入框中输入目的地后,就会在地 ...
- HTML5地理定位,百度地图API,知识点熟悉
推断浏览器的兼容问题: IE9+支持地理定位,FF Chrome新版支持地理定位 if (navigator.geolocation) { alert('支持地理定位'); } e ...
- 如何利用【百度地图API】进行定位?非GPS定位
原文:如何利用[百度地图API]进行定位?非GPS定位 如果你可以上网,如果你有火狐浏览器,那么恭喜你.你能很容易使用以下代码进行定位! ------------------------------- ...
随机推荐
- C#复制数据库,将数据库数据转到还有一个数据库
本文章以一个表为例,要转多个表则可将DataSet关联多个表.以下给出完整代码.包含引用以及main函数与复制函数. 要说明的是,必须先用Sql语句复制表结构,才干顺利的使用下面代码复制数据. usi ...
- 【线段树成段更新成段查询模板】【POJ3468】A Simple Problem with Integerst
题目大意: 2个操作 A.区间a b 增加 c B 查询a b; 注意事项:1.记住要清除标记 2.查询时要下放标记,但没必要向上更新 线段:自带的,不用建模 区间和性质:sum: /* WA 1次 ...
- NPOI.dll 用法。单元格,样式,字体,颜色,行高,宽度。读写excel
NPOI.dll 用法.单元格,样式,字体,颜色,行高,宽度.读写excel 转载:http://yuncode.net/code/c_531e679b3896495 view source prin ...
- Oracle表管理
/*-----------------------创建和管理表-----------------------------*/一.Orcale之中的数据类型:1.NUMBER.DATE.VARCAHR. ...
- EXCEL破冰之旅
1 背景 EXCEL用于日常数据分析的工具中,最便利并且最强大的莫属透视表了.因为透视表对原始数据有一定的要求,所以本次的破冰之旅也将把焦点放在如何整理基础数据这个方面. 1.1 初识透视表 ...
- 状态压缩DP------学习小记
状态DP主要用的还是DP思想,顾名思义,加了一个状态,主要是用来求状态个数的. 状态是用二进制数来表示的,也就是用0或1来表示,每一行有一个状态数,就是由这一行的0或1组成的,首先我们要获得每行的状态 ...
- const和非const函数重载
成员函数后面加const,表示在该函数中不能对类的数据成员进行改变,比如下面的代码: #include <stdio.h> class A { private: mutable int a ...
- Java学习之finally关键字总结
Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...
- Java学习之网络编程实例
转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一 ...
- Javascript基础示例:用JS写简易版贪吃蛇(面向对象)
废话不多说,代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...