需求:获取已关注公众号的用户的GPS位置,存储到数据库中,用数据库中的这些数据作为统计分析,查看人群主要集中在哪里;
调用微信接口获取用户的经纬度:
//是否允许公众号获取地理位置是一次性的;
var GLat;
var GLng;
var GProvince;
var GCity;
var GDistrict;
wx.getLocation({
type: 'gcj02', //wgs84 或 gcj02
success: function (res) {
var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
GLat = latitude; //将纬度赋值给全局参数
GLng = longitude; //将经度赋值给全局参数
var LATLNG_MJKD = longitude + ',' + latitude; //调用百度转换接口时所需的参数;
//将js-sdk转换为百度坐标
var urlgetbd = 'http://api.map.baidu.com/geoconv/v1/?coords=' + LATLNG_MJKD + '&from=1&to=5&ak='+AK秘钥;
var lng;
var lat;
$.get(urlgetbd, function (data) {
if (data.status === 0) {
lng = data.result[0].x;//经度
lat = data.result[0].y;//纬度
var MJKD_LATLNG = lat + ',' + lng; //调用百度地图接口时所需的参数;
//alert("调用百度地图api的参数" + MJKD_LATLNG);
var url = 'http://api.map.baidu.com/geocoder/v2/?ak='+AK秘钥+'&callback=renderReverse&location=' + MJKD_LATLNG + '&output=json&pois=1';
$.get(url, function (data) {
//alert(url);
//alert(data.status);
if (data.status === 0) {
//alert("经纬度:"+ GLat +","+ GLng + data.result.addressComponent.province + data.result.addressComponent.city + data.result.addressComponent.district);
var province = data.result.addressComponent.province; //省名
var city = data.result.addressComponent.city; //城市名
var district = data.result.addressComponent.district; //区县名
//将获取到的参数传到MVC控制台方法中,
var myData = { Lng: longitude, Lat: latitude, Province: province, City: city, District: district, };
$.get("/Smart2017/InsertLocationInfo", myData, function (result) {
// alert("添加成功");
});
}
}, 'jsonp');
}
}, 'jsonp');
},
fail: function (res) {
//alert('获取位置失败');
}
});
利用微信接口获取用户的位置信息:
返回的json为:
{
“latitude”:"39.97239",
“speed”:"0.0",
"accuracy":"60.0",
"longitude":"116.38212",
"errMsg":"getLocation:ok"
}
您可以通过这种方式获取这四个参数:
var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
上报地理
位置
以推送XML数据包到开发者填写的URL来实现
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[LOCATION]]></Event>
<Latitude>23.137466</Latitude>
<Longitude>113.352425</Longitude>
<Precision>119.385040</Precision>
</xml>
参数说明:
参数 | 说明 |
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 消息类型,event |
Event | 事件类型,LOCATION |
Latitude | 地理位置纬度 |
Longitude | 地理位置经度 |
Precision | 地理位置精度 |
状态码说明
状态码 | 含义 |
1 | 内部错误 |
4 | 转换失败(X→GPS时必现,根据法律规定,不支持将任何类型的坐标转换为GPS坐标) |
21 | from非法 |
22 | to非法 |
24 | coords格式非法 |
25 | coords个数非法,超过限制 |
调用百度api返回json的状态字段:
名称 | 类型 | 说明 |
status | constant | 返回结果状态值, 成功返回0,其他值请查看附录。 |
location | lat | 纬度坐标 |
lng | 经度坐标 | |
formatted_address | 结构化地址信息 | |
business | 所在商圈信息,如 "人民大学,中关村,苏州街" | |
addressComponent | city | 城市名 |
district | 区县名 | |
province | 省名 | |
street | 街道名 | |
street_number | 街道门牌号 | |
pois(周边poi数组) | addr | 地址信息 |
cp | 数据来源 | |
distance | 离坐标点距离 | |
name | poi名称 | |
poiType | poi类型,如’ 办公大厦,商务大厦’ | |
point | poi坐标{x,y} | |
tel | 电话 | |
uid | poi唯一标识 | |
zip | 邮编 |
觉得有用点个赞吧