15825682114坐标查询地理位置位置

一、获取用户地址位置消息
用户发送位置时的消息及格式如下
后台格式:
&ToUserName&&![CDATA[gh_680bdefc8c5d]]&&/ToUserName&
&FromUserName&&![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]&&/FLACFromUserName&
&CreateTime&&/CreateTime&
&MsgType&&![CDATA[location]]&&/MsgType&
&Location_X&22.539968&/Location_X&
&Location_Y&113.954980&/Location_Y&
&Scale&16&/Scale&
&Label&&![CDATA[中国广东省深圳市南山区华侨城深南大道9789号 邮政编码: 518057]]&&/Label&
&MsgId&1832047&/MsgId&
&XML格式讲解
ToUserName 消息接收方微信号,一般为公众平台账号微信号
FromUserName 消息发送方微信号
CreateTime 消息创建时间
MsgType 消息类型,地理位置为location
Location_X 地理位置纬度
Location_Y 地理位置经度
Scale 地图缩放大小
Label 地理位置信息
MsgId 消息ID号
二、获取周边区域信息
百度地图Place API 是一类简单的HTTP接口,用于返回查询某个区域的某类POI数据,且提供单个POI的详情查询服务,用户可以使用C#、C++、Java等开发语言发送HTTP请求且接收json、xml的数据。
Place API 提供区域检索POI服务、POI详情服务与团购信息检索服务、商家团购详情查询。区域检索POI服务提供三种区域检索方法:城市内检索、矩形检索、圆形区域检索。
我们使用圆形区域检索来实现附近搜索功能。
place区域检索POI服务接口如下:
http://api./place/v2/search
lat&纬度&,lng&经度&
周边检索中心点,不支持多个点
周边检索半径,单位为米
中关村、ATM、百度大厦
检索关键字,周边检索和矩形区域内检索支持多个关键字并集检索,不同关键字间以$符号分隔,最多支持10个关键字检索。如:&银行$酒店&。
日式烧烤/铁板烧、朝外大街
标签项,与q组合进行检索
输出格式为json或者xml
检索结果详细程度。取值为1 或空,则返回基本信息;取值为2,返回检索POI详细信息
filter=industry_type:cater
|sort_name:price
|sort_rule:0
|price_section:100,200
|groupon:0
|discount:0
检索过滤条件,当scope取值为2时,可以设置filter进行排序。
industry_type:行业类型
sort_name:排序字段
sort_rule:排序规则,取值如下:0:从高到低,1:从低到高;
price_section:价格区间;
groupon:是否有团购,1为有团购,0为无团购;
discount:是否打折,1为有打折,0为无打折;
范围记录数量,默认为10条记录,最大返回20条。多关键字检索时,返回的记录数为关键字个数*page_size。
分页页码,默认为0,0代表第一页,1代表第二页,以此类推。
Ede693a3fe707cdc962045
用户的访问密钥,必填项。v2之前该属性为key。
用户的权限签名。
设置sn后该值必填。
调用举例如下:
http://api./place/v2/search?ak=MgBALVVeCd8THVBi6gPdvsvG&output=json&query=%E9%93%B6%E8%A1%8C&page_size=5&page_num=0&scope=2&location=39.915,116.404&radius=2000&filter=sort_name:distance
三、程序实现
百度地图类定义如下
class baiduMapClient
private $api_server_url;
private $auth_params;
public function __construct()
$this-&api_server_url = "http://api./";
$this-&auth_params = array();
$this-&auth_params['key'] = "401f9a693dd267dd9afb20";
$this-&auth_params['output'] = "json";
public function Geocoding_coordinate_address($location)
return $this-&call("geocoder", array("location" =& $location));
//http://api./place/search?&query=眼镜&location=39.915,116.404&radius=3000&output=json&key=f924cb5e934fa08c6b1676
public function Place_search($query, $location, $radius)
return $this-&call("place/search", array("query" =& $query, "location" =& $location, "radius" =& $radius));
protected function call($method, $params = array())
$headers = array(
"User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/ Firefox/14.0.1",
"Accept: text/html,application/xhtml+xml,application/q=0.9,*/*;q=0.8",
"Accept-Language: en-us,q=0.5",
//"Accept-Encoding: gzip, deflate",
"Referer: /"
$params = array_merge($this-&auth_params, $params);
$url = $this-&api_server_url . "$method?".http_build_query($params);
if (DEBUG_MODE){echo "REQUEST: $url" . "\n";}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$data = curl_exec($ch);
curl_close($ch);
$result = null;
if (!empty($data)){
if (DEBUG_MODE){
echo "RETURN: " . $data . "\n";
$result = json_decode($data);
echo "cURL Error:". curl_error($ch);
return $result;
获取附近的调用代码如下:
function catchEntitiesFromLocation($entity, $x, $y, $radius)
$mapObj = new baiduMapClient();
$search = $mapObj-&Place_search($entity, $x.",".$y, $radius);
$results = $search-&
for ($i = 0; $i & count($results); $i++) {
$distance = getDistance($x, $y, $results[$i]-&location-&lat, $results[$i]-&location-&lng);
$shopSortArrays[$distance] = array(
"Title"=&"【".$results[$i]-&name."】&".$distance."M&".$results[$i]-&address.(isset($results[$i]-&telephone)?" ".$results[$i]-&telephone:""),
"Description"=&"",
"PicUrl"=&"",
"Url"=&"");
ksort($shopSortArrays);//排序
$shopArray = array();
foreach ($shopSortArrays as $key =& $value) {
$shopArray[] =
"title" =& $value["Title"],
"description" =& $value["Description"],
"pic" =& $value["PicUrl"],
"url" =& $value["Url"],
if (count($shopArray) & 6){break;}
return $shopArray;
计算两坐标之间距离如下
function getDistance($lat_a, $lng_a, $lat_b, $lng_b) {
//R是地球半径(米)
$R = 6366000;
$pk = doubleval(180 / 3.14169);
$a1 = doubleval($lat_a / $pk);
$a2 = doubleval($lng_a / $pk);
$b1 = doubleval($lat_b / $pk);
$b2 = doubleval($lng_b / $pk);
$t1 = doubleval(cos($a1) * cos($a2) * cos($b1) * cos($b2));
$t2 = doubleval(cos($a1) * sin($a2) * cos($b1) * sin($b2));
$t3 = doubleval(sin($a1) * sin($b1));
$tt = doubleval(acos($t1 + $t2 + $t3));
return round($R * $tt);
对于用户的坐标记录,我们使用数据库的方式来存储,
如果用户发送查询命令,则直接查询,
function searchUserLocation($userWxid)
Global $mysql_host;
Global $mysql_host_s;
Global $mysql_port;
Global $mysql_user;
Global $mysql_password;
Global $mysql_database;
//查询使用从库,支持SAE
$mysql_table = "location";
$mysql_state = "SELECT * FROM ".$mysql_table." WHERE userWxid = \"".$userWxid."\"";
$con = mysql_connect($mysql_host.':'.$mysql_port, $mysql_user, $mysql_password);
if (!$con){
die('Could not connect: ' . mysql_error());
mysql_query("SET NAMES 'UTF8'");
mysql_select_db($mysql_database, $con);
$result = mysql_query($mysql_state);
$location = array();
while($row = mysql_fetch_array($result))
$location["x"] = $row["locationX"];
$location["y"] = $row["locationY"];
mysql_close($con);
if (isset($location["x"]) && $location["x"] != 0.0){
return $location;
return "系统中没有你的地理位置信息,请先发送位置给我!您不用担心你的行踪被泄漏,因为你可以滑动地图,把别处的地址发送过来。";
如果用户发了位置,则进行更新
function updateOrInsert($weixinid, $locationX, $locationY)
if (isset($_SERVER['HTTP_APPNAME'])){
$mysql_host = SAE_MYSQL_HOST_M;
$mysql_host_s = SAE_MYSQL_HOST_S;
//sae的从库
$mysql_port = SAE_MYSQL_PORT;
$mysql_user = SAE_MYSQL_USER;
$mysql_password = SAE_MYSQL_PASS;
$mysql_database = SAE_MYSQL_DB;
$mysql_host = "127.0.0.1";
$mysql_host_s = "127.0.0.1";
$mysql_port = "3306";
$mysql_user = "root";
$mysql_password = "root";
$mysql_database = "sae";
$mysql_table = "location";
//INSERT INTO location VALUES("23s2s", 6.2) ON DUPLICATE KEY UPDATE locationX = 1122.2, locationY = 366.2;
$mysql_state = "INSERT INTO ".$mysql_table." VALUES(\"".$weixinid."\", ".$locationX.", ".$locationY.") ON DUPLICATE KEY UPDATE locationX = ".$locationX.", locationY = ".$locationY.";";
var_dump($mysql_state);
$con = mysql_connect($mysql_host.':'.$mysql_port, $mysql_user, $mysql_password);
if (!$con){
die('Could not connect: ' . mysql_error());
mysql_query("SET NAMES 'UTF8'");
mysql_select_db($mysql_database, $con);
$result = mysql_query($mysql_state);
if ($result == true){
//return "你提交的位置为纬度:".$locationX.",经度:".$locationY."。\n现在可以发送&附近&加关键字的命令查询附近的目标,如&附近酒店&,&附近医院&。";
return "已经成功获取你的位置。您不用担心你的行踪被泄漏,因为你可以把千里之外的地址提交过来。\n现在可以发送&附近&加关键字的命令查询附近的目标,如&附近酒店&,&附近医院&。";
return "提交失败,请重试。如果一直出现这样的错误,请给我们留言。";
对于用户发送的内容,先提取坐标,然后进行组合查询
实现效果如下:
---------------------------------------------------------------------------------------------------------------------------
阅读(...) 评论()当季多发症状
当前位置: & &&&按部位查询疾病
按部位查询
关注疾病排行
按部位查询疾病IP地址查询--手机号码查询归属地 | 邮政编码查询 | 长途电话区号 | 身份证号码验证在线查询网
手机上网查询:
IP查询(搜索IP地址的地理位置)
在下面输入框中输入您要查询的IP地址或者域名,点击查询按钮即可查询该IP所属的区域。
IP地址或者域名:
ip138专业7*24小时为您服务
注:本站的IP数据库为最新的数据库,每10天自动更新一次
如发现小部分IP查询结果不正确请到官方网站查询,以apnic为准。
输入手机号即可知道用户所在的地区
&&手机号码(段)
地名查询邮编
邮编查询地名
地名查询区号
区号查询地名
请输入15或18位身份证号
公益广告:
联系我们.请.或给谢谢!

我要回帖

更多关于 ip地址查询精确的位置 的文章

 

随机推荐