微信公众平台开发(三)位置信息的识别

位置识别这是实际应用经常应用的消息,特别是很多商家,通过了解用户位置,给用户提供特别的产品或是商场的推荐。其中用户可能发送两种类型的消息:

创新互联是一家专注于做网站、成都做网站与策划设计,柞水网站建设哪家好?创新互联做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:柞水等地区。柞水做网站价格咨询:18980820575

1.微信地理位置信息

2.路名、标志性建筑或是商场名称

1.微信地理位置消息

认识一下,微信地理位置消息,包含一些什么信息

  
 
 
 
  1.  
  2.  
  3.  
  4. 1351776360 
  5.  
  6. 23.134521 
  7. 113.358803 
  8. 20 
  9.  
  10. 1234567890123456 
  11.   

包含的主要信息有经度纬度和Label的位置。可以根据label中描述的位置信息,提供给用户对应的服务。也可根据用户的经度纬度信息,提供你最近的产品或是有地域性的产品。

首先根据微信的地理位置信息,定义WeChatLocationMessage类,并能把Xml转换为WeChatLocationMessage对象

 
 
 
 
  1. public class WeChatLocationMessage { 
  2.     private String toUserName; 
  3.     private String fromUserName; 
  4.     private String createTime; 
  5.     private String msgType; 
  6.     private String locationx; 
  7.     private String localtiony; 
  8.     private String scale; 
  9.     private String label; 
  10.     private String msgId; 
  11.     public static WeChatLocationMessage getWeChatLocationMessage(String xml){ 
  12.         XStream xstream = new XStream(new DomDriver()); 
  13.         WeChatLocationMessage  message = null; 
  14.         xstream.alias("xml", WeChatLocationMessage.class); 
  15.         xstream.aliasField("ToUserName", WeChatLocationMessage.class, "toUserName"); 
  16.         xstream.aliasField("FromUserName", WeChatLocationMessage.class, "fromUserName"); 
  17.         xstream.aliasField("CreateTime", WeChatLocationMessage.class, "createTime"); 
  18.         xstream.aliasField("MsgType", WeChatLocationMessage.class, "msgType"); 
  19.         xstream.aliasField("Location_X", WeChatLocationMessage.class, "locationx"); 
  20.         xstream.aliasField("Location_Y", WeChatLocationMessage.class, "localtiony"); 
  21.         xstream.aliasField("Scale", WeChatLocationMessage.class, "scale"); 
  22.         xstream.aliasField("Label", WeChatLocationMessage.class, "label"); 
  23.         xstream.aliasField("MsgId", WeChatLocationMessage.class, "msgId"); 
  24.         message = (WeChatLocationMessage)xstream.fromXML(xml); 
  25.         return message; 
  26.     } 
  27. //getter and setter 

本文利用百度的地图API,查找最近的银行做为示例。

 
 
 
 
  1. public String getPalace(String query,String lat,String lng) throws ClientProtocolException, IOException{ 
  2.     HttpClient httpClient = new DefaultHttpClient(); 
  3.     String url = palceRequestUrl(query,lat,lng); 
  4.     logger.log(Level.INFO, url); 
  5.     HttpGet httpget = new HttpGet(url); 
  6.     ResponseHandler responseHandler = new BasicResponseHandler(); 
  7.     String responseBody = httpClient.execute(httpget, responseHandler); 
  8.     logger.log(Level.INFO,"baidu response:"+responseBody); 
  9.     return responseBody; 
  10.  
  11. public String palceRequestUrl(String query,String lat,String lng) throws UnsupportedEncodingException { 
  12.     String url = WeChatConstant.BASEURL + "place/search?query=" + URLEncoder.encode(query,"UTF-8") + "&key=" 
  13.             + WeChatConstant.MAPKEY +"&location="+lat+","+lng +"&radius=2000"+"&output=" + WeChatConstant.OUTPUTFORMAT; 
  14.     return url; 

输出的结果

 
 
 
 
  1.  
  2.     OK 
  3.      
  4.          
  5.             中国工商银行东长安街支行 
  6.              
  7.                 39.915891 
  8.                 116.41867 
  9.              
  10.             
    东城区东长安街1号东方广场西三办公楼1楼
     
  11.             a025683c73033c35a21de987 
  12.             http://api.map.baidu.com/place/detail?uid=a025683c73033c35a21de987&output=html&source=placeapi 
  13.              
  14.             银行,王府井/东单 
  15.          
  16.        
  17.  

接下来,把百度地图反映出来的最近位置信息,以图文消息的格式展示给微信用户

 
 
 
 
  1.     public static String getWeChatReplyNewsMessageByBaiduPlace(List placeList, double lat, double lng,String userName, int size){ 
  2.         WeChatReplyNewsMessage newsMessage = new WeChatReplyNewsMessage(); 
  3.         List items = new ArrayList(); 
  4.         StringBuffer strBuf = new StringBuffer(); 
  5.         logger.log(Level.INFO,"placeList count="+placeList.size()); 
  6.         newsMessage.setItems(items); 
  7.         if(placeList.size()>size){ 
  8.             newsMessage.setArticleCount(size); 
  9.         } 
  10.         else{ 
  11.             newsMessage.setArticleCount(placeList.size()); 
  12.         } 
  13.         logger.log(Level.INFO,"article count="+newsMessage.getArticleCount()); 
  14.         newsMessage.setCreateTime(new Date().getTime()+""); 
  15.         newsMessage.setMsgType("news"); 
  16.         newsMessage.setFuncFlag("0"); 
  17.         newsMessage.setToUserName(userName); 
  18.         newsMessage.setFromUserName(WeChatConstant.FROMUSERNAME); 
  19.         for(int i = 0;i 
  20.             BaiduPlaceResponse place = placeList.get(i); 
  21.             Double distance = GeoUtil.DistanceOfTwoPoints(Double.valueOf(place.getLng()), Double.valueOf(place.getLat()), lng, lat, GaussSphere.Beijing54); 
  22.             Item item = new Item(); 
  23.             item.setTitle(place.getName()+"["+distance+"米]"+"\n"+place.getAddress()+"\n"+place.getTelephone()); 
  24.             item.setPicUrl(""); 
  25.             item.setUrl(place.getDetailUrl()); 
  26.             item.setDescription(""); 
  27.             items.add(item); 
  28.         } 
  29. logger.log(Level.INFO,"newMessage="+newsMessage.toString()); 
  30.         strBuf = strBuf.append(getWeChatNewsMessage(newsMessage)); 
  31.         return strBuf.toString(); 
  32.     } 
  33.     public static String getWeChatNewsMessage(WeChatReplyNewsMessage newsMessage){ 
  34.         XStream xstream = new XStream(new DomDriver()); 
  35.         xstream.alias("xml", WeChatReplyNewsMessage.class); 
  36.         xstream.aliasField("ToUserName", WeChatReplyNewsMessage.class, "toUserName"); 
  37.         xstream.aliasField("FromUserName", WeChatReplyNewsMessage.class, "fromUserName"); 
  38.         xstream.aliasField("CreateTime", WeChatReplyNewsMessage.class, "createTime"); 
  39.         xstream.aliasField("MsgType", WeChatReplyNewsMessage.class, "msgType"); 
  40.         xstream.aliasField("ArticleCount", WeChatReplyNewsMessage.class, "articleCount"); 
  41.         xstream.aliasField("Content", WeChatReplyNewsMessage.class, "content"); 
  42.         xstream.aliasField("FuncFlag", WeChatReplyNewsMessage.class, "funcFlag"); 
  43.         xstream.aliasField("Articles", WeChatReplyNewsMessage.class, "items"); 
  44.         xstream.alias("item", Item.class); 
  45.         xstream.aliasField("Title", Item.class, "title"); 
  46.         xstream.aliasField("Description", Item.class, "description"); 
  47.         xstream.aliasField("PicUrl", Item.class, "picUrl"); 
  48.         xstream.aliasField("Url", Item.class, "url"); 
  49.         return xstream.toXML(newsMessage); 
  50.     } 

别走开,下页更劲爆~

#p#

2.路名、标志性建筑或是商场名称

对路名、标志性建筑等信息,方法还是通过第三方地图信息,确定输入的位置信息的经度纬度。

本文使用百度地图API,确定所查找的位置的经度和纬度。

  
 
 
 
  1. public String getGeoCode(String query) throws ClientProtocolException, IOException{ 
  2.         HttpClient httpClient = new DefaultHttpClient(); 
  3.         String url = geoCodeRequestUrl(query); 
  4.         logger.log(Level.INFO, url); 
  5.         HttpGet httpget = new HttpGet(url); 
  6.         ResponseHandler responseHandler = new BasicResponseHandler(); 
  7.         String responseBody = httpClient.execute(httpget, responseHandler); 
  8.         logger.log(Level.INFO,"baidu response:"+responseBody); 
  9.         return responseBody; 
  10.     } 
  11.     public String geoCodeRequestUrl(String query) throws UnsupportedEncodingException{ 
  12.         String url = WeChatConstant.BASEURL + "geocoder?address=" + URLEncoder.encode(query,"UTF-8") + "&key=" 
  13.                 + WeChatConstant.MAPKEY + "&output=" + WeChatConstant.OUTPUTFORMAT; 
  14.         return url; 
  15.     } 

确定了经度和纬度,问题就变成和第1种消息类型一致了,根据经度纬度去做相应处理。

3.源代码

本文的代码较长,提供源代码下载

WeChatDemo下载

阅读第一篇:微信公众平台开发(一)平台综述

阅读第二篇:微信公众平台开发(二)简单的聊天机器人

转载自http://www.qiyadeng.com/

本文链接地址: 微信公众平台开发(三)–位置信息的识别

网站栏目:微信公众平台开发(三)位置信息的识别
文章出自:http://www.36103.cn/qtweb/news24/1774.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联