教你如何拔取百度地图POI兴趣点
教你如何拔取百度地图POI兴趣点
通过聚合数据提供的接口,获取百度地图的POI兴趣点,并存储至数据库中。
实现:
1、聚合数据百度POI接口说明
调用聚合数据,首先得注册聚合。聚合数据提供的百度地图POI的接口有三个:数据分类,查询数据和获取周边数据。想要获取百度POI兴趣点,涉及到的接口为数据分类,查询数据。
a、数据分类
名称 | 类型 | 必填 | 说明 | |
key | string | 是 | 应用APPKEY(应用详细页查询) | |
fid | string | 否 | 分类父ID,默认空,即全部分类,否则返回指定分类下的子类 | |
dtype | string | 否 | 返回数据的格式,xml或json,默认json |
名称 | 类型 | 说明 | |
error_code | int | 返回码 | |
reason | string | 返回说明 | |
result | - | 返回结果集 | |
id | int | 分类ID | |
name | string | 分类名称 | |
fid | int | 父类ID,0则为一级分类 |
{ "resultcode":"200", "reason":"Return Successd!", "result":[ { "id":"17", "name":"中式快餐", "fid":"1" }, { "id":"18", "name":"中餐馆", "fid":"1" }, { "id":"19", "name":"休闲餐饮", "fid":"1" }, { "id":"20", "name":"日韩式料理", "fid":"1" }, { "id":"21", "name":"西餐厅", "fid":"1" }, { "id":"22", "name":"西式快餐", "fid":"1" }, { "id":"33", "name":"东南亚菜", "fid":"1" } ] }
b、查询数据
名称 | 类型 | 必填 | 说明 | |
city | string | 是 | 城市的名称,如:上海市 | |
cid | int | 否 | 分类ID,可从分类接口获取到,默认全部 | |
keyword | string | 否 | 名称包含的关键字 | |
page | string | 否 | 页数,默认第一页 最大50. | |
pnums | int | 否 | 每次返回数据数目,默认20,最大20 | |
key | string | 是 | 应用APPKEY(应用详细页查询) | |
dtype | string | 否 | 返回数据的格式,xml或json,默认json |
名称 | 类型 | 说明 | |
error_code | int | 返回码 | |
reason | string | 返回说明 | |
data | - | 返回结果集 | |
id | INT | 餐厅的标识符 | |
name | string | 餐厅名称 | |
province | string | 省份 | |
city | string | 城市 | |
address | string | 详细地址 | |
phoneNumber | string | 联系电话 | |
tags | string | 标签 | |
type1 | INT | 所属一级分类ID | |
type2 | int | 所属二级分类ID | |
tag | string | 商圈 | |
lng | string | 经度(适合百度地图) | |
lat | string | 纬度 | |
pageinfo | - | - | |
nums | int | 记录总数 | |
pnums | int | 每页显示条数 | |
current | int | 当前页 | |
pageall | int | 总页数 |
{ "resultcode":"200", "reason":"Return Successd!", "result":{ "data":[ { "id":"493567", "title":"生良饭店", "province":"上海市", "city":"上海市", "address":"上海市", "tags":"餐饮", "type1":"1", "type2":"0", "tag":"", "lng":"121.375458", "lat":"31.794554" }, { "id":"493568", "title":"永兴饭店", "province":"上海市", "city":"上海市", "address":"上海市", "tags":"餐饮", "type1":"1", "type2":"0", "tag":"", "lng":"121.421982", "lat":"31.767340" }, { "id":"493569", "title":"猛东饭店", "province":"上海市", "city":"上海市", "address":"庙镇镇合作社区竖星路210号", "tags":"餐饮", "type1":"1", "type2":"0", "tag":"小吃", "lng":"121.372307", "lat":"31.747095" }, { "id":"493570", "title":"百顺酒家", "province":"上海市", "city":"上海市", "address":"宏海公路2010", "tags":"餐饮,中餐馆", "type1":"1", "type2":"18", "tag":"", "lng":"121.352936", "lat":"31.720875" }, { "id":"493571", "title":"群丰酒楼", "province":"上海市", "city":"上海市", "address":"上海市", "tags":"餐饮", "type1":"1", "type2":"0", "tag":"", "lng":"121.354179", "lat":"31.720181" } ], "pageinfo":{ "nums":93720, "pnums":"5", "current":"2", "pageall":18744 } } }
2、获取数据分类
根据提供的接口,获取数据全部分类的地址为:
http://apis.juhe.cn/baidu/getCategory?key=您的key&dtype=json
为方便使用,我将返回的数据整理成了表格形式,如下:
id | fid | name |
1 | 0 | 餐饮 |
2 | 0 | 汽车服务 |
3 | 0 | 地产小区 |
4 | 0 | 公司企业 |
5 | 0 | 宾馆 |
6 | 0 | 金融 |
7 | 0 | 交通设施 |
8 | 0 | 教育 |
9 | 0 | 生活服务 |
10 | 0 | 旅游景点 |
11 | 0 | 名称标注类 |
12 | 0 | 购物 |
13 | 0 | 休闲娱乐 |
14 | 0 | 行政地标 |
15 | 0 | 政府机构 |
16 | 0 | 医疗 |
17 | 1 | 中式快餐 |
18 | 1 | 中餐馆 |
19 | 1 | 休闲餐饮 |
20 | 1 | 日韩式料理 |
21 | 1 | 西餐厅 |
22 | 1 | 西式快餐 |
23 | 13 | 洗浴按摩 |
24 | 13 | 歌舞厅/夜总会/娱乐城 |
25 | 12 | 批发市场/集市 |
26 | 12 | 电器商场 |
27 | 7 | 停车场/停车区 |
28 | 15 | 党派团体 |
29 | 13 | ktv |
30 | 5 | 星级宾馆酒店 |
31 | 9 | 便利店 |
32 | 15 | 机关单位 |
33 | 1 | 东南亚菜 |
34 | 4 | 厂矿 |
35 | 13 | 度假村/度假区 |
36 | 4 | 运输 |
37 | 7 | 飞机场 |
38 | 8 | 培训机构 |
39 | 8 | 高等教育 |
40 | 6 | 银行 |
41 | 4 | 物业管理 |
42 | 13 | 文化馆/文化宫/活动中心 |
43 | 5 | 旅店 |
44 | 3 | 小区/楼盘 |
45 | 4 | 文化媒体 |
46 | 12 | 综合商场/购物中心 |
47 | 13 | 休闲广场 |
48 | 13 | 体育场馆 |
49 | 4 | 职业介绍/人才交流 |
50 | 6 | 证券公司 |
51 | 16 | 综合医院 |
52 | 9 | 美容美发 |
53 | 9 | 邮局 |
54 | 13 | 健身中心 |
55 | 8 | 初等教育(小学) |
56 | 15 | 福利机构 |
57 | 14 | 村庄 |
58 | 8 | 学前教育 |
59 | 12 | 家居建材 |
60 | 8 | 中等教育 |
61 | 12 | 烟酒茶叶 |
62 | 5 | 招待所 |
63 | 7 | 公交车站 |
64 | 7 | 地铁/轻轨 |
65 | 3 | 售楼处 |
66 | 9 | 洗衣/干洗 |
67 | 2 | 汽车配件/装饰 |
68 | 4 | 旅行社 |
69 | 8 | 科研机构/教育 |
70 | 5 | 连锁快捷酒店 |
71 | 9 | 摄影冲印 |
72 | 6 | 保险公司 |
73 | 12 | 服装鞋帽 |
74 | 10 | 风景区/旅游区 |
75 | 12 | 超市 |
76 | 16 | 社区医疗/诊所/卫生所 |
77 | 6 | atm |
78 | 6 | 农村信用社/城市信用社 |
79 | 2 | 汽车维修/养护/洗车 |
80 | 10 | 公园 |
81 | 4 | 公用事业 |
82 | 4 | 高新科技 |
83 | 12 | 文化办公 |
84 | 12 | 钟表眼镜 |
85 | 4 | 事务所 |
86 | 7 | 出入口 |
87 | 9 | 房屋租售中介 |
88 | 4 | 农林园艺 |
89 | 15 | 各级政府 |
90 | 12 | 珠宝饰品 |
91 | 12 | 礼品花卉 |
92 | 6 | 投资公司 |
93 | 14 | 乡镇 |
94 | 6 | 典当/当铺 |
95 | 4 | 婚介婚庆 |
96 | 4 | 新闻出版 |
97 | 10 | 美术馆/艺术馆 |
98 | 13 | 图书馆 |
99 | 4 | 工商业区 |
100 | 12 | 文物古玩 |
101 | 12 | 电子数码 |
102 | 7 | 交叉路口 |
103 | 10 | 博物馆 |
104 | 4 | 保安 |
105 | 16 | 药店/药房 |
106 | 9 | 彩票发行 |
107 | 13 | 迪吧 |
108 | 13 | 电影院 |
109 | 4 | 电信公司 |
110 | 10 | 展览馆/纪念馆 |
111 | 15 | 公检法机构 |
112 | 9 | 售票处 |
113 | 4 | 建筑装修 |
114 | 2 | 4s/汽车销售 |
115 | 2 | 汽车检验场 |
116 | 2 | 驾校 |
117 | 2 | 汽车租赁 |
118 | 7 | 长途汽车站 |
119 | 7 | 出租车站 |
120 | 9 | 电信营业厅 |
121 | 12 | 图书音像 |
122 | 4 | 高科技园区 |
123 | 13 | 网吧 |
124 | 7 | 加油站 |
125 | 7 | 火车站 |
126 | 16 | 医疗保健 |
127 | 15 | 涉外机构 |
128 | 9 | 家政服务 |
129 | 7 | 服务区 |
130 | 9 | 文印图文 |
131 | 12 | 母婴儿童 |
132 | 12 | 体育户外 |
133 | 12 | 摄影器材 |
134 | 9 | 家电维修 |
135 | 3 | 别墅 |
136 | 4 | 房地产开发 |
137 | 4 | 殡葬 |
138 | 4 | 出国留学 |
139 | 9 | 公厕 |
140 | 9 | 搬家 |
141 | 15 | 驻地机构 |
142 | 10 | 游乐园 |
143 | 13 | diy手工 |
144 | 13 | 音乐厅 |
145 | 7 | 港口/码头 |
146 | 9 | 送水 |
147 | 9 | 报亭 |
148 | 10 | 文物古迹 |
149 | 10 | 动物园 |
150 | 10 | 植物园 |
151 | 10 | 教堂 |
152 | 13 | 剧院 |
153 | 11 | 道路名称 |
154 | 10 | 水族馆 |
155 | 7 | 桥 |
156 | 13 | 电子游戏 |
157 | 16 | 私人诊所 |
158 | 5 | 青年旅舍 |
159 | 15 | 中央机构 |
160 | 7 | 收费处/收费站 |
161 | 7 | 环岛 |
162 | 7 | 红绿灯 |
163 | 10 | 科技馆 |
164 | 4 | 教育 |
165 | 12 | 箱包日用 |
166 | 14 | 区县 |
167 | 14 | 地级市 |
168 | 14 | 商圈 |
169 | 16 | 专科医院 |
170 | 9 | 宠物 |
171 | 16 | 急救中心 |
172 | 16 | 下属科室机构 |
173 | 16 | 防疫站 |
174 | 16 | 中医医院 |
175 | 16 | 职工医院 |
3、获取POI
根据提供的接口,获取POI的地址为:
http://apis.juhe.cn/baidu/getData?key=您的key&dtype=json&city=北京市&page=1&cid=1
其中:
city:城市名称;
page:当前页;
cid:获取到的数据分类的id
为了能将获取到的数据保存下来,用java+oracle写了一段小程序,实现了数据的获取与保存。
a、数据库表
根据获取到的json数据,建立表BDPOI,表结构设计如下:
b、获取并保存数据
package com.lzugis.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.sql.SQLException; import com.lzugis.db.ConOrcl; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class GetPoiData { public static void main(String[] args) throws SQLException { String poiUrl = "http://apis.juhe.cn/baidu/getData"; String poiParam = "key=7ea83e6f1e025782c47229b49865111b&dtype=json&city=北京市"+ "&page="+1+"&cid=1"; String poiResult = SendGET(poiUrl,poiParam); JSONObject poiJson = JSONObject.fromObject(poiResult); System.out.println(poiJson); int pageAll = poiJson.getJSONObject("result").getJSONObject("pageinfo").getInt("pageall"); for(int i=0;i<pageAll;i++){ System.out.println("—————————————————————————————————————————————"); System.out.println("第"+(i+1)+"页"); String poiParam = "key=7ea83e6f1e025782c47229b49865111b&dtype=json&city=北京市"+ "&page="+(i+1)+"&cid=1"; String poiResult = SendGET(poiUrl,poiParam); JSONObject poiJson = JSONObject.fromObject(poiResult); JSONArray data = poiJson.getJSONObject("result").getJSONArray("data"); int size = data.size(); for(int j=0;j<size;j++){ JSONObject item = data.getJSONObject(j); //id,title,addr,pro,city,tags,ty1,ty2,lng,lat String sql = "insert into bdpoi values('"+item.getString("id")+"','" +item.getString("title")+"','" +item.getString("address")+"','" +item.getString("province")+"','" +item.getString("city")+"','" +item.getString("tags")+"'," +item.getInt("type1")+"," +item.getInt("type2")+"," +item.getDouble("lng")+"," +item.getDouble("lat")+")"; System.out.println(" "+sql); ConOrcl.runSql(sql); } } } public static String SendGET(String url,String param){ String result="";//访问返回结果 BufferedReader read=null;//读取访问结果 try { //创建url URL realurl=new URL(url+"?"+param); //打开连接 URLConnection connection=realurl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); //建立连接 connection.connect(); // 定义 BufferedReader输入流来读取URL的响应 read = new BufferedReader(new InputStreamReader( connection.getInputStream(),"UTF-8")); String line;//循环读取 while ((line = read.readLine()) != null) { result += line; } } catch (IOException e) { e.printStackTrace(); } finally{ if(read!=null){//关闭流 try { read.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } }
这样,就将百度地图的POI数据获取并保存了下来。
注:聚合数据是有请求次数限制的,想获取更多的话就自己想办法掏钱吧!
教你如何拔取百度地图POI兴趣点的更多相关文章
- 百度地图POI爬取
我们研究生的课程内容,做下笔记记录一下. 使用的python环境是python3.7 用的图大部分都是老师ppt里的图,懒得自己截了-- 申请百度开发者密匙 (1)注册百度用户,注册过的话,直接登录就 ...
- 基于 Golang 完整获取百度地图POI数据的方案
百度地图为web开发者提供了基于HTTP/HTTPS协议的丰富接口,其中包括地点检索服务,web开发者通过此接口可以检索区域内的POI数据.百度地图处于数据保护对接口做了限制,每次访问服务,最多只能检 ...
- 获取百度地图POI数据三(模拟关键词搜索)
上一篇博文中讲到如何获取用于搜索的关键词,并且已经准备好了一百五十万的关键词 这其中有门牌号码,餐馆酒店名称,公司名称,道路名称等.有了这些数据,我们就可以通过代码,模拟我们在百度地图的搜索框中搜 ...
- 获取百度地图POI数据二(准备搜索关键词)
上篇讲到 想要获取尽可能多的POI数据 需要准备尽可能多的搜索关键字 那么这些关键字如何得来呢? 本人使用的方法是通过一些网站来获取这些关键词 http://poi.mapbar.com ...
- iOS地图集成示例:百度地图POI检索
一.集成百度地图(傻瓜教程,以网站说明文档为准,此处罗列几项主要步骤) 1.登录 http://lbsyun.baidu.com 百度地图开发者平台,获取SDK和集成文档. 2.百度地图可以提供的 ...
- 百度地图POI数据爬取,突破百度地图API爬取数目“400条“的限制11。
1.POI爬取方法说明 1.1AK申请 登录百度账号,在百度地图开发者平台的API控制台申请一个服务端的ak,主要用到的是Place API.检校方式可设置成IP白名单,IP直接设置成了0.0.0.0 ...
- 获取百度地图POI数据一(详解百度返回的POI数据)
POI是一切可以抽象为空间点的现实世界的实体,比如餐馆,酒店,车站,停车场等.POI数据具有空间坐标和各种属性,是各种地图查询软件的基础数据之一.百度地图作为国内顶尖的地图企业,其上具有丰富的POI数 ...
- 基于指定文本的百度地图poi城市检索的使用(思路最重要)
(转载请注明出处哦)具体的百度地图权限和apikey配置以及基础地图的配置不叙述,百度地图定位可以看这个链接的http://blog.csdn.net/heweigzf/article/details ...
- 基于python3.6的如何爬取百度地图
先前参考了其他的代码,大多数是python2.7写的,而3.6用的类库以及规则有了很大的变动,所以自己写了一个这样的代码,供给大家参考. def get_station(i): station=[] ...
随机推荐
- centos7.1-64bit延时截屏
centos自带了截屏的软件,而且还能延时截屏. 在桌面左上角的应用程序菜单里: “应用程序”->“工具”->“截图” 设定延时秒数,点击“截图”按钮,开始截图. 完.
- VC中常用的宏
我们在VS环境中开发的时候,会遇到很多宏定义,这些宏可以应用到代码中,或用于编译.工程选项等设置,总之是我们开发中必不可少的工具,有必要做一个总结.有些宏是C/C++定义的,有些宏是VC环境预 ...
- PHP正则表达式的使用
1. 正则表达式的主要作用是:分割.匹配.查找.替换2. 正则表达式中包括的元素:原子(普通字符:a-z A-Z 0-9 .原子表.转义字符),元字符(有特殊功能的字符),模式修正符(系统内置部分字符 ...
- 浅谈SQL中的单引号
单引号:对很对计算机语言包括(SQL)是做字符串引用的:这个是大家通常知道的作用:但是对SQL语言来说:还有另外一个作用是作引号的转义 总结下:对oracle(sql)的作用. 做字符串引用:例如'a ...
- 发送xml报文去第三方请求获取xml报文数据
import java.io.*; import java.net.HttpURLConnection; import java.net.MalformedURLException; import j ...
- cookie存储记录
////// 历史记录 $(function () { // 标题 var art_title = $("#Lbl_Hotel_Name").text(); // 得到当前路径 v ...
- java中几种常见字符集与乱码介绍
1. ASCII和Ansi编码 字符内码(charcter code)指的是用来代表字符的内码 .读者在输入和存储文档时都要使用内码,内码分为 单字节内码 -- Single-Byte chara ...
- A Round Peg in a Ground Hole(凸包应用POJ 1584)
A Round Peg in a Ground Hole Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5684 Accepte ...
- Gift Hunting(分组背包)
Gift Hunting Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- Oracle插入时间
现象:Oracle 插入时间时 ,报错:ORA-01861: 文字与格式字符串不匹配 解决方法: 这个错误一般出现在时间字段上,即你插入的时间格式和数据库现有的时间格式不一致,解决的方法是格式化你 插 ...