教你如何拔取百度地图POI兴趣点

概述:

通过聚合数据提供的接口,获取百度地图的POI兴趣点,并存储至数据库中。


实现:

1、聚合数据百度POI接口说明

调用聚合数据,首先得注册聚合。聚合数据提供的百度地图POI的接口有三个:数据分类,查询数据和获取周边数据。想要获取百度POI兴趣点,涉及到的接口为数据分类,查询数据。

a、数据分类

接口地址: http://apis.juhe.cn/baidu/getCategory
支持格式: JSON/XML
请求方式: GET
请求示例: http://apis.juhe.cn/baidu/getCategory?key=您申请的APPKEY&fid=1
请求参数:
  名称 类型 必填 说明
  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则为一级分类
JSON返回示例:
{
"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、查询数据

接口地址: http://apis.juhe.cn/baidu/getData
支持格式: JSON/XML
请求方式: POST/GET
请求示例: http://apis.juhe.cn/baidu/getData?key=您申请的APPKEY&cid=1&city=%E4%B8%8A%E6%B5%B7%E5%B8%82&page=2
请求参数:
  名称 类型 必填 说明
  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 总页数
JSON返回示例:
{
"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

为方便使用,我将返回的数据整理成了表格形式,如下:

idfidname
10餐饮
20汽车服务
30地产小区
40公司企业
50宾馆
60金融
70交通设施
80教育
90生活服务
100旅游景点
110名称标注类
120购物
130休闲娱乐
140行政地标
150政府机构
160医疗
171中式快餐
181中餐馆
191休闲餐饮
201日韩式料理
211西餐厅
221西式快餐
2313洗浴按摩
2413歌舞厅/夜总会/娱乐城
2512批发市场/集市
2612电器商场
277停车场/停车区
2815党派团体
2913ktv
305星级宾馆酒店
319便利店
3215机关单位
331东南亚菜
344厂矿
3513度假村/度假区
364运输
377飞机场
388培训机构
398高等教育
406银行
414物业管理
4213文化馆/文化宫/活动中心
435旅店
443小区/楼盘
454文化媒体
4612综合商场/购物中心
4713休闲广场
4813体育场馆
494职业介绍/人才交流
506证券公司
5116综合医院
529美容美发
539邮局
5413健身中心
558初等教育(小学)
5615福利机构
5714村庄
588学前教育
5912家居建材
608中等教育
6112烟酒茶叶
625招待所
637公交车站
647地铁/轻轨
653售楼处
669洗衣/干洗
672汽车配件/装饰
684旅行社
698科研机构/教育
705连锁快捷酒店
719摄影冲印
726保险公司
7312服装鞋帽
7410风景区/旅游区
7512超市
7616社区医疗/诊所/卫生所
776atm
786农村信用社/城市信用社
792汽车维修/养护/洗车
8010公园
814公用事业
824高新科技
8312文化办公
8412钟表眼镜
854事务所
867出入口
879房屋租售中介
884农林园艺
8915各级政府
9012珠宝饰品
9112礼品花卉
926投资公司
9314乡镇
946典当/当铺
954婚介婚庆
964新闻出版
9710美术馆/艺术馆
9813图书馆
994工商业区
10012文物古玩
10112电子数码
1027交叉路口
10310博物馆
1044保安
10516药店/药房
1069彩票发行
10713迪吧
10813电影院
1094电信公司
11010展览馆/纪念馆
11115公检法机构
1129售票处
1134建筑装修
11424s/汽车销售
1152汽车检验场
1162驾校
1172汽车租赁
1187长途汽车站
1197出租车站
1209电信营业厅
12112图书音像
1224高科技园区
12313网吧
1247加油站
1257火车站
12616医疗保健
12715涉外机构
1289家政服务
1297服务区
1309文印图文
13112母婴儿童
13212体育户外
13312摄影器材
1349家电维修
1353别墅
1364房地产开发
1374殡葬
1384出国留学
1399公厕
1409搬家
14115驻地机构
14210游乐园
14313diy手工
14413音乐厅
1457港口/码头
1469送水
1479报亭
14810文物古迹
14910动物园
15010植物园
15110教堂
15213剧院
15311道路名称
15410水族馆
1557
15613电子游戏
15716私人诊所
1585青年旅舍
15915中央机构
1607收费处/收费站
1617环岛
1627红绿灯
16310科技馆
1644教育
16512箱包日用
16614区县
16714地级市
16814商圈
16916专科医院
1709宠物
17116急救中心
17216下属科室机构
17316防疫站
17416中医医院
17516职工医院

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数据获取并保存了下来。

注:聚合数据是有请求次数限制的,想获取更多的话就自己想办法掏钱吧!




  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛老师讲GIS

感谢老板支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值