天天看点

***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)

微信公众平台开发 - 获取用户地理位置

本文介绍在微信公众平台上如何使用高级接口开发获取用户地理位置的功能。

开通了上报地理位置接口的公众号,用户在关注后进入公众号会话时,会弹框让用户确认是否允许公众号使用其地理位置。弹框只在关注后出现一次,用户以后可以在公众号详情页面进行操作。

用户同意上报地理位置后,每次进入公众号会话时,都会在进入时上报地理位置,上报地理位置以推送XML数据包到开发者填写的URL来实现。

推送XML数据包示例:

***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)
***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)

参数说明:

参数

描述

ToUserName

开发者微信号

FromUserName

发送方帐号(一个OpenID)

CreateTime

消息创建时间 (整型)

MsgType

消息类型,event

Event

事件类型,LOCATION

Latitude

地理位置纬度

Longitude

地理位置经度

Precision

地理位置精度

地理位置是一个事件消息,在方倍工作室的微信公众平台PHP SDK中,增加位置信息判断,然后获取用户的纬度和经度。

***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)
***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)

也可以把位置信息存到数据库,这样方便以后分析。

微信公众平台消息接口开发(11)地理位置查询附近商家

一、获取用户地址位置消息

用户发送位置时的消息及格式如下

***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)

后台格式:

***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)
***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)

 XML格式讲解

***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)
***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)

百度地图Place API 是一类简单的HTTP接口,用于返回查询某个区域的某类POI数据,且提供单个POI的详情查询服务,用户可以使用C#、C++、Java等开发语言发送HTTP请求且接收json、xml的数据。

Place API 提供区域检索POI服务、POI详情服务与团购信息检索服务、商家团购详情查询。区域检索POI服务提供三种区域检索方法:城市内检索、矩形检索、圆形区域检索。

我们使用圆形区域检索来实现附近搜索功能。

place区域检索POI服务接口如下:

http://api.map.baidu.com/place/v2/search

是否必须

默认值

格式举例

含义

location

38.76623,116.43213 

lat<纬度>,lng<经度>

周边检索中心点,不支持多个点

radius(r)

2000

周边检索半径,单位为米

q(query)

中关村、ATM、百度大厦

检索关键字,周边检索和矩形区域内检索支持多个关键字并集检索,不同关键字间以$符号分隔,最多支持10个关键字检索。如:”银行$酒店”。

tag

日式烧烤/铁板烧、朝外大街

标签项,与q组合进行检索

output

xml

json或xml

输出格式为json或者xml

scope

1

1、2

检索结果详细程度。取值为1 或空,则返回基本信息;取值为2,返回检索POI详细信息

filter

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为无打折;

page_size

10

范围记录数量,默认为10条记录,最大返回20条。多关键字检索时,返回的记录数为关键字个数*page_size。

page_num

0、1、2

分页页码,默认为0,0代表第一页,1代表第二页,以此类推。

ak

E4805d16520de693a3fe707cdc962045

用户的访问密钥,必填项。v2之前该属性为key。

sn

 

用户的权限签名。

timestamp

设置sn后该值必填。

调用举例如下:

百度地图类定义如下

***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)
***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)

获取附近的调用代码如下:

***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)
***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)

计算两坐标之间距离如下

***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)
***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)

对于用户的坐标记录,我们使用数据库的方式来存储,

如果用户发送查询命令,则直接查询,

***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)
***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)

如果用户发了位置,则进行更新

***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)
***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)

对于用户发送的内容,先提取坐标,然后进行组合查询

***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)

实现效果如下:

***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)
***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)
***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)

1.由地名(省份、城市、街道等)得到其对应的百度地图坐标:

http://api.map.baidu.com/geocoder/v2/?output=json&ak=你从百度申请到的Key&address=北京市

其对大陆主要城市的解析很好,但是有些大陆的小城市、香港、台湾的一些区域无法解析,我测试到的如下:

解析错误的城市:伊犁|新界|新竹|港岛|基隆|云林|博尔塔拉|桃园|苗栗|南投|克孜勒苏|台东|

 伊犁可以使用新疆伊犁来解析,更好的办法是使用谷歌地图API,比如这样使用:

http://maps.google.com/maps/api/geocode/json?sensor=false&address=地址

 在谷歌地图中,港岛可以使用:

来解析,

云林可以使用:

Yunlin County, Taiwan

博尔塔拉可以使用博尔塔拉蒙古自治州来解析,

2.由坐标反解得到对应的地址:

 http://api.map.baidu.com/geocoder/v2/?output=json&ak=你从百度申请到的Key&location=纬度(Latitude),经度(Longitude)

注意,纬度和经度之间有个英文逗号。

如何联系我:【万里虎】www.bravetiger.cn

【QQ】3396726884 (咨询问题100元起,帮助解决问题500元起)

【博客】http://www.cnblogs.com/kenshinobiy/