当前位置: 首页 > news >正文

Java【代码 24】AOI数据获取(通过地址名称获取UID在获取AOI数据)

AOI数据获取

  • 1.业务需求
  • 2.数据查询
  • 3.数据获取
    • 3.1 获取地点的 UID
      • 3.1.1 百度官方接口
      • 3.1.2 其他接口
    • 3.2 通过 UID 获取边界
  • 4.数据处理
  • 5.总结

1.业务需求

详细的业务需求这里不赘述了,核心的功能是获取一个位置 Point 所在的区域 Area,这里就需要 AOI 数据了,尝试过以下方式:

  • 下载 OSM 数据(数据量小)
  • 使用水经微图下载(经验证其数据跟 OSM 的一样)
  • 使用 QGIS 绘制(可行,但是工作量很大)
  • 使用百度地图获取

2.数据查询

使用百度地图搜索一个地址(以小区为例),可以看到这个地址的边界信息,如图:

拦截接口响应可以获取边界数据:

将边界数据转化后在地图上验证边界数据:

3.数据获取

这个获取流程跟第二部分的数据查询没有关系,并非使用的爬虫,而是用的 api 实现的,使用爬虫获取的相关数据更多,但是需要的时间更多,整体流程如下:

  1. 通过地点名称获取地点的 UID
  2. 通过 UID 获取地点的 geo 数据

3.1 获取地点的 UID

3.1.1 百度官方接口

百度的地点检索 《官方 API 文档》V2 版,申请为企业开发者即可获取每天 2000 次的配额:

接口使用说明:

// GET请求
https://api.map.baidu.com/place/v2/search?query=ATM&tag=银行&region=北京&output=json&ak=您的ak

接口响应对象(这里只贴出 1 个):

{"status": 0,"message": "ok","result_type": "poi_type","query_type": "general","results": [{"name": "中国工商银行24小时自助银行(北京城关支行)","location": {"lat": 40.227538,"lng": 116.23973},"address": "北京市昌平区鼓楼南大街9号","province": "北京市","city": "北京市","area": "昌平区","street_id": "6113ef77a69c7e148e77270d","detail": 1,"uid": "6113ef77a69c7e148e77270d"}]
}

Java 调用举例:

  • 依赖
<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>3.0.0</version>
</dependency>
  • 代码
OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder().url("http://api.map.baidu.com/place/v2/search?query=%E9%95%BF%E6%B1%9F%E4%B9%8B%E5%AE%B6&region=%E5%8D%97%E4%BA%AC&output=json&ak=您的ak").method("GET", body).addHeader("User-Agent", "Apifox/1.0.0 (https://apifox.com)").addHeader("Accept", "*/*").addHeader("Host", "api.map.baidu.com").addHeader("Connection", "keep-alive").build();
Response response = client.newCall(request).execute();
if (responseSearch != null && responseSearch.code() == 200) {return responseSearch.body().string();
}

3.1.2 其他接口

参考大佬转载的博文《调用百度地图接口获取城市住宅小区边界信息 (米制转经纬度)》抓包的接口:

// GET请求
http://map.baidu.com/su?wd=北京ATM&cid=347&type=0&pc_ver=2

接口响应对象(全部)这个 UID 需要自行解析:

{"q": "北京atm机","p": false,"t": 0,"s": ["北京市$朝阳区$$中国银行24小时自助银行(北京安苑路支行)$131$7be0f0de5b2093d729fc4813$","北京市$海淀区$$中国建设银行24小时自助银行(北京田村路支行)$131$79d3c286b586357817c8f6d7$","北京市$西城区$$北京银行24小时自助银行(华安支行)$131$2495c4c7584e445289f15dfb$","北京市$东城区$$中国银行24小时自助银行(东安门支行)$131$5791e6d5155978c26d20b958$","北京市$延庆区$$中国工商银行(自动柜员机店)$131$5508504dfead2bcbc7f02526$","北京市$房山区$$北京汇豪国际酒店-自动取款机$131$99cd97c2f33c5819d7851f87$","北京市$朝阳区$$北京丽都皇冠假日酒店-自动取款机$131$4e731166a2b3410a35b06c43$","北京市$朝阳区$$中国银行ATM(王府井奥莱·香江小镇支行)$131$0957cbc8139001d4bd484269$","北京市$海淀区$$中国工商银行AMT机(北京双安商场)$131$a76c5ee8d65d8e2ffe0eb01e$","北京市$房山区$$北京中医药大学(良乡校区农业银行自助机)$131$248c71132de40c89cac3dba1$"]
}

3.2 通过 UID 获取边界

参考大佬原创博文《调用百度地图接口获取城市住宅小区边界信息》可使用以下接口获取边界数据:

// GET 请求
http://map.baidu.com/?reqflag=pcmap&from=webmap&qt=ext&uid=上一步获取的UID&ext_ver=new&l=18

接口响应数据:

{"bound_rank_params": {"nc": 1},"content": {"geo": "4|12935108.477291,4845039.334859;12935300.597983,4845247.317853|1-12935112.4564887,4845235.9949308,12935108.4772908,4845065.3159340,12935108.4800928,4845056.9743442,12935109.3782150,4845051.1604369,12935111.7093459,4845047.8615163,12935115.2947964,4845045.4598371,12935286.8196839,4845039.3348589,12935292.3756640,4845039.4361119,12935295.6012074,4845040.9823479,12935297.7511492,4845043.2489656,12935298.6464221,4845045.7767442,12935299.0034673,4845049.9391166,12935300.5979832,4845105.9755100,12935299.7006126,4845109.8198096,12935296.8320434,4845112.7835323,12935294.3225616,4845113.7692859,12935283.7811525,4845115.8125738,12935280.8790614,4845118.4874980,12935278.7272844,4845121.7820145,12935278.1878256,4845127.3557835,12935284.3375874,4845237.6236675,12935282.7231916,4845242.2959498,12935279.2271378,4845246.2014261,12935276.0903411,4845247.3178535,12935118.0103246,4845244.0898845,12935115.9940855,4845243.6740192,12935114.8293722,4845242.6587677,12935113.3514053,4845240.2605989,12935112.4564887,4845235.9949308;","uid": "上一步获取的UID"},"current_city": {"code": 1,"geo": "1|11590057.96,4489812.75;11590057.96,4489812.75|11590057.96,4489812.75;","level": 0,"name": "中国","sup": 0,"sup_bus": 0,"sup_business_area": 0,"sup_lukuang": 0,"sup_subway": 0,"type": 0,"up_province_name": "中国"},"err_msg": "","hot_city": ["北京市|131","上海市|289","广州市|257","深圳市|340","成都市|75","天津市|332","南京市|315","杭州市|179","武汉市|218","重庆市|132"],"result": {"data_security_filt_res": 0,"error": 0,"illegal": 0,"qid": "","type": 10,"uii_type": "china_main","region": "0","uii_qt": "poi_profile","login_debug": 0,"auth": null},"uii_err": 0,"anti_auth": "uxNHTzzBzxNtgz@2VJtyBxyBOSQ5QhJCF@ahZXMbfLwhb4P=2RbT2dv7uvxRYuVtvkGcuVtvvhguVtvyheuVtvCMGuVtvCQMuVtvIPcuVtvYvjuVtvZgMuVtv@vcuVtvc3CuVtvcPPuVtveGvuVtveh3uVtvh3CuVtvhgMuxVVtvrMhuVtGccZcuxtf0wd0v7"
}

4.数据处理

通过第三步获取的边界数据是百度米制坐标转换为度可参考大佬原创博文《基于Java后台实现百度米制坐标转WGS84地理坐标实战》,转化为百度坐标系后就可以根据自己的需要进行其他坐标系的转换了。数据出来后用 QGIS 打开如下:

说明:浅蓝色的是不使用 ak 获取的 aoi 数据,粉色的是使用 ak 获取的 aoi 数据,在数据量上相差不大。

5.总结

大家可以看出来,我的这篇是一个方法整合,都是参考大佬的分享。如果使用爬虫的开发周期应该会比较久,但是获取的数据也会更多。

http://www.dtcms.com/a/427579.html

相关文章:

  • 提升 HarmonyOS 开发效率:DevEco Studio 6.0 热更新调试模式全指南
  • 桌面预测类开发,桌面%性别,姓名预测%系统开发,基于python,scikit-learn机器学习算法(sklearn)实现,分类算法,CSV无数据库
  • 用自己服务器做网站2023营业执照年检
  • QCustomPlot 高级扩展与实战案例
  • C语言形式参数和实际参数的区别(附带示例)
  • 医疗领域的数智化转型与智能化变革研究报告:技术驱动、模式创新与政策协同
  • 在 C# 中,如何使 $““ 字符串支持换行
  • 2025年精选单北斗GNSS水库形变监测系统对比推荐
  • Java 在Word 文档中添加批注:高效文档协作的利器
  • 代做效果图网站项目管理软件的作用
  • 广东省高水平建设专业网站北京大兴网站建设
  • 使用 HBuilderX 将网页打包为安卓 APP详细步骤
  • MinerU2.5:一种用于高效高分辨率文档解析的解耦视觉-语言模型
  • Redis三大命令分类详解
  • 饼状图修复总结
  • npm 最新镜像,命令导致下载错误
  • 济宁做公司网站中职电子商务专业就业方向
  • JVM深入研究--JHSDB (jvm 分析工具)
  • AI的局限性,有所能与有所不能
  • 广州网站设计公司推荐哪家网站的风格设计有哪些
  • 【完整源码+数据集+部署教程】武装人员图像分割系统: yolov8-seg-GFPN
  • 开发避坑指南(61):Redis持久化失败:RDB快照因磁盘问题无法保存解决方案
  • 短视频网站如何做推广网站导航栏最多可以做几个
  • 做自由行的网站广告运营推广
  • 逆向爬虫——JavaScript混淆技术
  • 4.0 Labview中算法实例1-迟滞曲线上两段的平均差(拐点计算)
  • 网站建设数据库搭建西安广告设计制作公司
  • 作一手房用什么做网站有关学校网站建设策划书
  • 企业网站建设方案详细方案厦门网站建设2
  • 微服务服务治理