文档章节

-------------------使用百度地图开发平台(lbs),根据经纬度查询商圈出现的问题----------------------

o
 osc_isezqdgg
发布于 2019/09/18 14:48
字数 657
阅读 12
收藏 0

精选30+云产品,助力企业轻松上云!>>>


public class BusinessUtil {
public static String getBusniss(String lonAndLat) throws Exception{
// 计算sn跟参数对出现顺序有关,get请求请使用LinkedHashMap保存<key,value>,该方法根据key的插入顺序排序;post请使用TreeMap保存<key,value>,该方法会自动将key按照字母a-z顺序排序。所以get请求可自定义参数顺序(sn参数必须在最后)发送请求,但是post请求必须按照字母a-z顺序填充body(sn参数必须在最后)。以get请求为例:http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=yourak,paramsMap中先放入address,再放output,然后放ak,放入顺序必须跟get请求中对应参数的出现顺序保持一致。
Map paramsMap = new LinkedHashMap<String, String>();
//paramsMap.put("address", "百度大厦");
paramsMap.put("callback", "renderReverse");
paramsMap.put("location", lonAndLat);
paramsMap.put("output", "json");
paramsMap.put("pois", "1");
paramsMap.put("extensions_town", "true");
paramsMap.put("ak", "写自己的ak");
// 调用下面的toQueryString方法,对LinkedHashMap内所有value作utf8编码,拼接返回结果address=%E7%99%BE%E5%BA%A6%E5%A4%A7%E5%8E%A6&output=json&ak=yourak
String paramsStr = toQueryString(paramsMap);
// 对paramsStr前面拼接上/geocoder/v2/?,后面直接拼接yoursk得到/geocoder/v2/?address=%E7%99%BE%E5%BA%A6%E5%A4%A7%E5%8E%A6&output=json&ak=yourakyoursk
String wholeStr = new String("/reverse_geocoding/v3/?" + paramsStr + "写自己的sk");
// 对上面wholeStr再作utf8编码
String tempStr = URLEncoder.encode(wholeStr, "UTF-8");
String sn = MD5(tempStr);
//String url = "http://api.map.baidu.com"+ tempStr + "&sn="+ sn;
String url = "http://api.map.baidu.com/reverse_geocoding/v3/?"+paramsStr + "&sn=" + sn;
//调用HttpClient访问Baidu LBS 百度地图开放平台
HttpClient httpClient = new HttpClient();
GetMethod get = new GetMethod(url);
int status = httpClient.executeMethod(get);
String business = "";
if(status == 200){
String response = get.getResponseBodyAsString();
response = response.replaceAll("renderReverse&&renderReverse\\(","");
response = response.substring(0,response.length()-1);
JSONObject jo = JSON.parseObject(response);
JSONObject result = jo.getJSONObject("result");
//获取商圈
business = result.getString("business");
//如果商圈为空,获取具体的地址最小到镇
if(StringUtils.isEmpty(business)){
StringBuffer buffer = new StringBuffer();
JSONObject addr = result.getJSONObject("addressComponent");
String province = addr.getString("province");
String city = addr.getString("city");
String district = addr.getString("district");
String town = addr.getString("town");
if(StringUtils.isNotEmpty(province)){
buffer.append(province+";");
}
if(StringUtils.isNotEmpty(province)){
buffer.append(city+";");
}
if(StringUtils.isNotEmpty(province)){
buffer.append(district+";");
}
if(StringUtils.isNotEmpty(province)){
buffer.append(town);
}
business = buffer.toString();
}
}
return business;
}

// 对Map内所有value作utf8编码,拼接返回结果
public static String toQueryString(Map<?, ?> data)
throws UnsupportedEncodingException {
StringBuffer queryString = new StringBuffer();
for (Map.Entry<?, ?> pair : data.entrySet()) {
queryString.append(pair.getKey() + "=");
queryString.append(URLEncoder.encode((String) pair.getValue(),
"UTF-8") + "&");
}
if (queryString.length() > 0) {
queryString.deleteCharAt(queryString.length() - 1);
}
return queryString.toString();
}

// 来自stackoverflow的MD5计算方法,调用了MessageDigest库函数,并把byte数组结果转换成16进制
public static String MD5(String md5) {
try {
java.security.MessageDigest md = java.security.MessageDigest
.getInstance("MD5");
byte[] array = md.digest(md5.getBytes());
StringBuffer sb = new StringBuffer();
for (int i = 0; i < array.length; ++i) {
sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100)
.substring(1, 3));
}
return sb.toString();
} catch (java.security.NoSuchAlgorithmException e) {
}
return null;
}

public static void main(String[] args) throws Exception{
System.out.println(BusinessUtil.getBusniss("40.499603,116.420812"));
//打印结果
//北京市;北京市;延庆区;四海镇
}
}

 

 上面代码出现问题的解决方法:

 

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
百度地图资源下载备注

http://developer.baidu.com/map/devRes.htm 相关下载 名称 说明 下载 百度地图城市名称-中心点经纬度(cityCenter)关系对照 您可以通过此文件获知百度地图的全国各城市中心点(cityCenter)...

宝塔镇河妖
2016/09/04
184
0
【微信公众平台开发】之三:LBS的开发

1、相关资料 *基于SAE和百度LBS微信公众平台周边搜索的实现{Java} *当有道翻译遇到微信公众平台{有道翻译API、百度LBS} *百度地图车联网API文档(http://developer.baidu.com/map/index....

realsa
2014/09/23
838
0
商圈标签

商圈标签 一、使用百度地图开发平台(lbs),根据经纬度查询商圈 注:中国的经纬度范围大约为:维度3.86~53.55,经度73.66~135.05不在范围内的数据可不做处理 第一步:注册百度地图开发平台的账号,...

osc_5iujocsb
2019/09/19
2
0
gis地图的创新与发展前景

“旧时王谢堂前燕,飞入寻常百姓家”。GIS过去被认为是一种高端而略显神秘且对使用者要求较高的专业领域技术,应用离人们生活较远;现在GIS不仅已走进人们的日常生活,为衣食住行带来了便捷,...

笛途
2015/05/20
51
0
微信公众号测试项目1------LBS

今天,想到把自己之前学习过的,并且实现了的项目都保存下来,往后可翻看查阅,也可代码重用,方便二次开发。放在自己机器里面,有时候就忘记放哪里了。 刚好,开源中国,提供了一个代码托管...

zhangqiliang
2018/07/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Xcode中的版本与版本 - Version vs build in Xcode

问题: I have an app that I developed with Xcode 3 and recently started editing with Xcode 4. In the target summary I have the iOS application target form with fields: identifie......

javail
17分钟前
7
0
如何在Python中将字典键作为列表返回? - How to return dictionary keys as a list in Python?

问题: In Python 2.7 , I could get dictionary keys , values , or items as a list: 在Python 2.7中 ,我可以将字典键 , 值或项作为列表获取: >>> newdict = {1:0, 2:0, 3:0}>>> newd......

技术盛宴
今天
17
0
2020世界人工智能大会开幕首日 百度与浦发银行达成战略合作

本文作者:y****n 7月9日,2020世界人工智能大会开幕首日,百度与浦发银行签署战略合作协议,将在人工智能、金融科技等多个领域进一步深化合作。双方将优势互补,实现人工智能技术在金融领域...

百度开发者中心
昨天
26
0
Java中C ++ Pair 的等价物是什么? - What is the equivalent of the C++ Pair in Java?

问题: Is there a good reason why there is no Pair<L,R> in Java? 有没有一个很好的理由说明Java中没有Pair<L,R> ? What would be the equivalent of this C++ construct? 这个C ++构造的......

富含淀粉
今天
18
0
中国饭店协会数据表明

记者了解到,中国饭店协会数据表明,2018年全国餐饮收入42716亿元,同比增长9.5%.根据国家统计局数据显示,截至2017年底,限额以上餐饮行业的从业人数达到2232万人,巨大的餐饮市场背后,餐饮行业的...

asd369
今天
35
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部