通过字段中的经纬度用百度的开发者平台,来解析周边的商圈信息,代码如下:

package com.utilsimport java.io.UnsupportedEncodingException
import java.net.URLEncoder
import java.security.NoSuchAlgorithmException
import java.util
import com.google.gson.{JsonObject, JsonParser}
import org.apache.commons.httpclient.HttpClient
import org.apache.commons.httpclient.methods.GetMethod
import org.apache.commons.lang3.StringUtils/*** 请求百度LBS,解析经纬度对应的商圈信息**/
object BaiduLBSHandler {/*** 对外提供的解析经纬度对应的商圈信息** @param lng 经度* @param lat 纬度*/def parseBusinessTagBy(lng: String, lat: String) = {var business: String = ""val requestParams = requetParams(lng, lat)val requestURL = "http://api.map.baidu.com/geocoder/v2/?" + requestParams// 使用HttpClient 模拟浏览器发送请求val httpClient = new HttpClient()val getMethod = new GetMethod(requestURL)val statusCode = httpClient.executeMethod(getMethod)if (statusCode == 200) { // HTTP.OKval response = getMethod.getResponseBodyAsString// 判断是否是合法的json字符换var str = response.replaceAll("renderReverse&&renderReverse\\(", "")if (!response.startsWith("{")) {str = str.substring(0, str.length - 1)}// 解析这个json字符串,取出business节点数据val returnData = new JsonParser().parse(str).getAsJsonObject// 服务器返回来的json数据,status表示服务器是否正常(0)处理了我的请求val status = returnData.get("status").getAsIntif (status == 0) {val resultObject = returnData.getAsJsonObject("result")business = resultObject.get("business").getAsString.replaceAll(",", ";")// 判断business是否为空,如果为空,接着解析改坐标点附近的标签信息poisif (StringUtils.isEmpty(business)) {val pois = resultObject.getAsJsonArray("pois")var tagSet = Set[String]()for (i <- 0 until pois.size()) {val elemObject: JsonObject = pois.get(i).getAsJsonObjectval tag = elemObject.get("tag").getAsStringif (StringUtils.isNotEmpty(tag)) tagSet += tag}business = tagSet.mkString(";")}}}business}private def requetParams(lng: String, lat: String) = {//3eWFUfbFLTMopRpY1xk9BRD3iFdxo3r4//rvGCL2H2iEScXwNgZvGplcyRsnDC2x9jval list  ="cUriDdpqq1BibSZzS6jgUIFS5KoFHElK,bh9GsxVRkLBv7pZMuGR5TIZFbDR12Bbu"val Array(ak, sk) = list.split(",")// 计算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请求中对应参数的出现顺序保持一致。val paramsMap = new util.LinkedHashMap[String, String]();paramsMap.put("callback", "renderReverse")//        paramsMap.put("location", "39.343424,116.452987")paramsMap.put("location", lat.concat(",").concat(lng))paramsMap.put("output", "json")paramsMap.put("pois", "1")paramsMap.put("ak", ak)// 请求的参数val paramsStr = toQueryString(paramsMap)// 生成SNval wholeStr = new String("/geocoder/v2/?" + paramsStr + sk)val tempStr = URLEncoder.encode(wholeStr, "UTF-8")val sn = MD5(tempStr)paramsStr + "&sn=" + sn}// 对Map内所有value作utf8编码,拼接返回结果@throws[UnsupportedEncodingException]private def toQueryString(data: util.LinkedHashMap[String, String]): String = {val queryString = new StringBufferimport scala.collection.JavaConversions._for (pair <- data.entrySet) {queryString.append(pair.getKey + "=")queryString.append(URLEncoder.encode(pair.getValue.asInstanceOf[String], "UTF-8") + "&")}if (queryString.length > 0) queryString.deleteCharAt(queryString.length - 1)queryString.toString}// 来自stackoverflow的MD5计算方法,调用了MessageDigest库函数,并把byte数组结果转换成16进制private def MD5(md5: String): String = {try {val md = java.security.MessageDigest.getInstance("MD5")val array = md.digest(md5.getBytes)val sb = new StringBuffervar i = 0while ( {i < array.length}) {sb.append(Integer.toHexString((array(i) & 0xFF) | 0x100).substring(1, 3)){i += 1i}}return sb.toString} catch {case e: NoSuchAlgorithmException =>}null}}

通过经纬度解析商圈Scala实现方式相关推荐

  1. 依据经纬度解析商圈scala实现

    调用高德的API,需要先去高德申请一个key. import com.alibaba.fastjson.{JSON, JSONArray, JSONObject} import org.apache. ...

  2. 测试:使用高德地图把经纬度转为商圈

    第一次使用高德地图,经纬对转换为商圈,测试如下 def parseGaodeJson(jsonStr: String) = { val areaList: List[JsonAST.JValue] = ...

  3. 如何实现基于商圈和地标的位置搜索

    简介 标题中包含了两个关键词,商圈和地标,先来解释一下商圈和地标这两个名词.商圈是一个地理范围,但并不是官方的划分,而是民间大致的划分,它通常提供了民众消费.娱乐的功能,产生了一个相对集中的活动区域, ...

  4. MobTech城市智图 | 多维度交叉分析成都某核心商圈客流,助力商圈精细化运营

    成都,是四川省省会.特大城市.成渝地区双城经济圈核心城市.近些年,成都以时尚潮流为标榜,成为网红城市,诞生了诸多打卡商业街与景点,例如,国际金融中心.成都远洋太古里.锦华万达广场.环球MALL .万象 ...

  5. 基于经纬度进行商圈定位

    一:使用高德地图的接口 获取key的步骤: 1.申请网站: https://lbs.amap.com/ 2.登陆注册 3.选择开发支持–>web服务API 4.进入控制台–>我的应用 5. ...

  6. 【数据应用技巧】基于快速GeoHash,实现海量商品与商圈的高效匹配

    案例来源:@阿里技术 案例地址:https://mp.weixin.qq.com/s/vwhetMpQllczILptBNcoWg 0. 背景:闲鱼每天都有海量商品位置(点数据)与大量商圈(面数据)的 ...

  7. [.NET/C#]快速采集全国城市商圈数据

    声明:此文章及所涉及的程序代码仅供学习与交流,使用者如有违反相关法律的行为将负法律责任. [商圈]在O2O时代是个常用的数据,但数据在网上难以寻找,或遇数据公司的收费障碍.对于开发人员来说,比较好的方 ...

  8. Python:层次聚类分析——基于基站定位数据商圈分析

    <Python数据分析与挖掘实战>书中本章无原始数据,文中仅展示了聚类分析了各人群聚集区特征(商圈特征,做营销策划住宅区.CBD商场.办公楼这还用聚类分析吗,直接肉眼也能辨别吧,这就是所有 ...

  9. 五一商圈之外,红星商圈再塑长沙商圈第二极

    文 | 易不二 来源|螳螂财经(ID:TanglangFin) 在已经来临的2020年"十一假期plus",作为网红城市的长沙,排在了人们黄金周热门旅游目的地城市的第五位. 这样的 ...

最新文章

  1. 5/29 c的结构体变量
  2. 人工智能在牙科医疗领域是一片蓝海
  3. 使用c:foreach时链接失效
  4. 【算法】吴忠强:刷LeetCode的正确姿势!
  5. [转载] 深入了解Java ClassLoader、Bytecode 、ASM、cglib
  6. 各大银行对应的字段(仅做参考)
  7. hadoop-0.21.0-eclipse-plugin无法在eclipse中运行解决方案
  8. 支持国产处理器仿真的全数字实时仿真平台SkyEye与可信编译器L2C的核心翻译步骤
  9. python高阶_Python高阶学习
  10. Y15BeTa蜂鸣器-演奏版-简化版
  11. Qt总结之二:遍历文件夹和文件目录,并过滤和获取文件信息、后缀名、前缀名(二)
  12. 20165301陈潭飞2017-2018-2 20165301 实验三《Java面向对象程序设计》实验报告
  13. bzoj 2623 所罗门的咒语
  14. oracle查询时使用case,Oracle查询语句中Casewhen的使用
  15. 系统迁移工具迁移操作系统到别的硬盘
  16. linux编译n2n v2,在centos下安装n2n服务器
  17. ruby--数值类(Numeric)
  18. 不惧变化 抓住机遇 | A+CLUB 8月深圳站
  19. 如何恢复自身的精力 [转]
  20. 【Python打卡2019】20190417之计算BMR

热门文章

  1. git是什么,git怎么用?
  2. Android mht离线文件阅读!
  3. 高数笔记(二十):无穷级数,级数的审敛法
  4. P1478 陶陶摘苹果(升级版)
  5. Git提交指定的文件
  6. React-2-项目的创建
  7. 华为OD机试2023年最新题库(JAVA、Python、C++)
  8. 为什么 zookeeper 节点数是奇数
  9. python 股票行情_Python结合钉钉实时自动监控股票行情,上班炒股再也不怕老板发现...
  10. matlab中类的用法