五一去荣昌吃卤鹅?基于Java和天地图的寻找荣昌卤鹅店实践
目录
前言
1、卤鹅哥与甲亢哥的爆火事件
2、荣昌卤鹅产业的空间分布
3、使用Java 和天地图进行产业挖掘
一、地名检索简介
1、地名检索功能
2、地名检索API介绍
二、荣昌卤鹅检索实践
1、数据获取流程
2、天地图API请求构建
3、参数构建及调用
4、结果生成及本地保存
三、总结
前言
1、卤鹅哥与甲亢哥的爆火事件
最近,重庆荣昌的卤鹅哥林江和美国顶流网红甲亢哥(IShowSpeed)的互动,让荣昌卤鹅成为网红美食。林江作为荣昌的助农主播,为宣传家乡美食,自费开启“五城追星”之旅,在成都、长沙等五座城市向甲亢哥投喂荣昌卤鹅,并用蹩脚英语反复强调“Rongchang Braised Goose”,成功将其推入国际视野。其真诚执着的态度赢得了甲亢哥团队和网友的认可,最终被邀请赴美作客。随着事件的发酵,荣昌卤鹅的网络曝光率暴增 105%,相关企业线上销量迅速增长,部分企业单日销量翻十倍,甚至出现订单爆满暂停接单的情况。卤鹅哥林江也成为了荣昌家喻户晓的人物,他的事迹还登上了微博、抖音等平台的热榜,全网话题阅读量超 5 亿。
2、荣昌卤鹅产业的空间分布
从生产端来看,荣昌地处重庆西部和四川东部交界的丘陵地带,平均海拔 380 米,全区土壤质地良好,充足的水域、适宜的气候、肥沃的土壤,为荣昌白鹅的养殖提供了优越条件,而荣昌白鹅正是制作荣昌卤鹅的优质食材。目前,荣昌区已建成标准化荣昌鹅养殖示范基地 10 个,荣昌鹅年养殖量达 800 万只。从加工端来看,荣昌已培育卤鹅及配套加工企业 7 家,形成了“公司+合作社+家庭农场+农户”的养殖体系和“中央厨房+区域仓库+社区零售+电商销售”的销售体系。从销售端来看,荣昌卤鹅在线上线下均有销售,线上在各大电商平台活跃,线下则分布在重庆江北国际机场航站楼、成渝高铁站、商场超市等地。此外,荣昌还在城区和一些乡镇形成了卤鹅美食街或集中销售点,如荣昌夏布小镇附近就聚集了多家卤鹅企业进行网络直播带货。
3、使用Java 和天地图进行产业挖掘
利用 Java 和天地图来挖掘荣昌卤鹅产业具有较高的可行性。首先,Java 是一种功能强大、应用广泛的编程语言,能够为数据处理、分析和应用开发提供强大的技术支持。通过 Java 编写爬虫程序,可以抓取电商平台、社交媒体等网站上的荣昌卤鹅销售数据、用户评价等信息,为产业分析提供数据基础。其次,天地图提供了详细的地理信息数据和地图服务接口,能够帮助我们获取荣昌地区的地理信息,包括卤鹅店的分布、交通路线等。结合 Java 和天地图,可以实现对荣昌卤鹅产业的空间分析,如绘制卤鹅店的分布地图、分析不同区域的销售热度等。此外,还可以开发基于天地图的手机应用程序,为游客提供荣昌卤鹅店的导航、推荐等功能,进一步推动荣昌卤鹅产业的发展。
五一假期即将来临,相信今年这个五一应该有很多人会选择去荣昌游玩,品尝荣昌卤鹅。对很多外地的游客而言,想吃卤鹅可以在线上平台进行订购。当然,您也可以选择亲自自驾去荣昌品尝。那么怎么在当地找到卤鹅店呢?本人是一名GIS从业者和研究者,虽然这次五一不能去荣昌,但也想为大家把荣昌的卤鹅店找一找,从地理信息的角度帮大家寻找美味。文章首先介绍天地图的检索API,然后详细介绍如何使用Java来调用天地图的API获取所有的卤鹅位置信息,权当为大家做一个参考。
一、地名检索简介
本节将重点介绍天地图的地名检索API,主要分为两部分。第一部分对地名检索功能进行一个简单的梳理,第二部分是对地名检索API进行一个详细的介绍,尤其是本次需要使用的行政区划的检索。
1、地名检索功能
地名搜索服务V2.0是一类简单的HTTP/HTTPS接口,包括普通搜索、视野内搜索、周边搜索、多边形搜索、行政区域搜索、分类搜索、统计搜索。大家可以在天地图的官方API出查找具体的介绍文档,天地图WEB服务API介绍。
2、地名检索API介绍
想要查询荣昌的卤鹅店位置,首先需要明确数据查询流程。我们需要采用的是行政区划区域搜索服务。即在指定的行政区划范围内寻找指定的关键词位置信息。因此需要使用的是第一个服务,这里也以第一个服务为例,详细来介绍这个服务。
输入参数说明:
参数值 | 参数说明 | 参数类型 | 是否必备 | 备注(值域) |
keyWord | 搜索的关键字 | String | 必填 | 无 |
specify | 指定行政区的国标码(行政区划编码表)严格按照行政区划编码表中的(名称,gb码) | String | 必填 | 下载行政区划编码表。9位国标码,如:北京:156110000或北京。 |
queryType | 服务查询类型参数 | String | 必填 | 12:行政区划区域搜索服务。 |
start | 返回结果起始位(用于分页和缓存)默认0 | String | 必填 | 0-300,表示返回结果的起始位置。 |
count | 返回的结果数量(用于分页和缓存) | String | 必填 | 1-300,返回结果的条数。 |
dataTypes | 数据分类(分类编码表) | String | 可选 | 下载分类编码表,参数可以分类名称或分类编码。多个分类用","隔开(英文逗号)。 |
show | 返回poi结果信息类别 | String | 可选 | 取值为1,则返回基本poi信息; 取值为2,则返回详细poi信息 |
返回参数说明
参数值 | 参数说明 | 参数类型 | 返回条件 | 备注(值域) | ||
resultType | 返回结果类型 | Int | 必返回 | 取值1-5,对应不同的响应类型: 1(普通POI),2(统计),3(行政区),4(建议词搜索),5(线路结果) | ||
count | 返回总条数 | Int | 必返回 | |||
keyword | 搜索关键词 | String | 必返回 | 搜索的关键字。 | ||
pois | 针对点(类型1)集合返回 | Pois Json数组 | resultType=1 | |||
name | Poi点名称 | String | 必返回 | |||
phone | 电话 | String | ||||
address | 地址 | String | ||||
lonlat | 坐标 | String | 必返回 | 坐标 x,y | ||
poiType | poi类型 | Int | 必返回 | 101:POI数据 102:公交站点 | ||
eaddress | 英文地址 | String | ||||
ename | poi点英文名称 | String | ||||
hotPointID | poi热点ID | String | 必返回 | 热点id | ||
province | 所属省名称 | String | ||||
provinceCode | 省行政区编码 | String | ||||
city | 所属城市名称 | String | ||||
cityCode | 市行政区编码 | String | ||||
county | 所属区县名称 | String | ||||
countyCode | 区县行政区编码 | String | ||||
source | 数据信息来源 | String | 必返回 | |||
typeCode | 分类编码 | String | ||||
typeName | 分类名称 | String | ||||
stationData | 车站信息结构体 数据 | Json 数组 | poiType=102 | |||
lineName | 线路名称 | String | 必返回 | |||
uuid | 线路的id | String | 必返回 | |||
stationUuid | 公交站uuid | String | 必返回 | |||
statistics | 针对统计(类型2)集合返回 | Json 数组 | resultType=2 | |||
count | 本次统计POI总数量 | Int | 必返回 | |||
adminCount | 行政区数量 | Int | 必返回 | |||
priorityCitys | 推荐行政区名称 | Json数组 | 必返回 | |||
name | 行政区名称 | String | 必返回 | |||
count | 城市数量 | Int | 必返回 | |||
lonlat | 行政区经纬度 | String | 必返回 | 坐标 x,y | ||
ename | 英文行政名称 | String | 必返回 | |||
adminCode | 城市国标码 | Int | 必返回 | 9位国标码。 | ||
allAdmins | 各省包含信息集合 | Json数组 | 必返回 | |||
name | 行政名称 | String | 必返回 | |||
count | 包含数量 | Int | 必返回 | |||
lonlat | 行政区经纬度 | String | 必返回 | 坐标x,y | ||
adminCode | 省国标码 | String | 必返回 | |||
ename | 英文行政名称 | String | 必返回 | |||
isleaf | 有无下一级行政区 | boolean | 必返回 | 有则false,无则true | ||
area | 针对行政区省(类型3)集合点 | Json 数组 | resultType=3 | |||
name | 名称 | String | 必返回 | |||
bound | 定位范围(“minx,miny,maxx,maxy”) | String | 返回 | |||
lonlat | 定位中心点坐标 | String | 必返回 | |||
adminCode | 行政区编码 | Int | 必返回 | |||
level | 显示级别 | Int | 必返回 | 1-18级 | ||
lineData | 线路结果 | Json 数组 | resultType=5 | |||
stationNum | 站数量 | String | 必返回 | |||
poiType | 类型为“103” | String | 必返回 | |||
name | 线路名称 | String | 必返回 | |||
uuid | 线路id | String | 必返回 | |||
status | 返回状态信息 | Json 数组 | 必返回 | 结果提示信息 | ||
infocode | 信息码 | Int | 必返回 | 服务状态码表 | ||
cndesc | 返回中文描述 | String | 必返回 | 服务状态码表 |
这里需要说明的是,我们预期返回的都是POI数据,因此我们在后续的内容中都是以POI数据为例来展开。这里之所以要把输入参数和输出参数都进行详细的介绍,就是为了后续的信息抓取过程做准备。 这里有一个信息是需要先确定的,就是按照行政区划检索的话,一定要先在天地图上下载行政区划代码,在文档的连接处有详细的连接,点击后即可进行下载。打开文档可以看到如下信息:
上图红线框中的就是荣昌的行政编码,在接口检索的时候,可以传入行政区划名称或者编码都是可以的。
二、荣昌卤鹅检索实践
在了解和掌握了天地图的行政区划检索服务之后,本节我们将重点介绍如何在Java中调用天地图的行政区划接口API来检索相应的数据。主要介绍数据的获取流程,然后介绍如何使用Java来构建天地图的API、参数的构建以及实际调用,最后介绍请求的结果生成以及如何将生成结果保存成本地的Excel文档。
1、数据获取流程
以上就是数据获取的完整流程,第一步是从下载的行政区划中设置待检索的行政区划,这里为荣昌,第二步设置查询关键字,即卤鹅,第三步是构建参数并发送请求, 第四步是将服务器返回的数据转换为Gson,第五步是将List数据转为Excel,第六步将Excel数据回写到本地即可。
2、天地图API请求构建
首先我们需要在后台创建一个天地图的访问接口文件,关键代码如下:
package com.yelang.project.thridinterface;
import com.burukeyou.uniapi.http.annotation.HttpApi;
import com.burukeyou.uniapi.http.annotation.param.QueryPar;
import com.burukeyou.uniapi.http.annotation.request.GetHttpInterface;
import com.burukeyou.uniapi.http.core.response.HttpResponse;@HttpApi(url = "http://api.tianditu.gov.cn/")
public interface TdtOptionService {@GetHttpInterface("v2/search")public HttpResponse<String> searchV2(@QueryPar("postStr") String postStr,@QueryPar("type") String type,@QueryPar("tk") String tk);
}
请注意 :这里我们为了简化相关接口的调用,使用Unihttp来进行接口请求的调用。
3、参数构建及调用
按照前面介绍过的文档,我们来进行查询参数的构建,这里需要设置的参数有keyWord、specify等,查询参数构建如下:
String keyWord = "卤鹅";
String specify = "156500153";//荣昌区
String excelTitle = "重庆荣昌卤鹅POI信息列表";
String postStr = "%7B'keyWord':'" + keyWord + "','specify':'" + specify + "','queryType':'12','start':'0','count':'100','show':'2' %7D" ;
然后使用Java来调用天地图的检索接口获取具体的卤鹅位置信息,检索方法如下:
/**
* - 行政区划区域搜索示例
*/
@Test
public void searchByAdminCode() {String keyWord = "卤鹅";String specify = "156500153";//荣昌区String excelTitle = "重庆荣昌卤鹅POI信息列表";String postStr = "%7B'keyWord':'" + keyWord + "','specify':'" + specify + "','queryType':'12','start':'0','count':'100','show':'2' %7D" ;HttpResponse<String> resp = tdtOptService.searchV2(postStr,QUERY, TDT_SERVER_KEY);Gson gson = new Gson();System.out.println(resp.getBodyResult());if(StringUtils.isNotEmpty(resp.getBodyResult())) {TdtSearchVo tdtSearchVo = gson.fromJson(resp.getBodyResult(), TdtSearchVo.class);if(tdtSearchVo.getCount() > 0) {// excel工具包ExcelUtil<TdtPoi> util = new ExcelUtil<TdtPoi>(TdtPoi.class);util.exportExcel(tdtSearchVo.getPois(), excelTitle);}}else {System.out.println("内容为空");}System.out.println("检索并本地化完成");
}
4、结果生成及本地保存
为了方便将请求获取的数据转换成Excel,我们首先需要定义个POI的实体类,其属性和方法都严格跟接口中的对象一一对应,关键代码如下:
package com.yelang.project.education.domain.tdt;
import java.io.Serializable;
import com.yelang.framework.aspectj.lang.annotation.Excel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
/*** -天地图POI对象* @author 夜郎king*/
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class TdtPoi implements Serializable{private static final long serialVersionUID = 7428718362374078869L;@Excel(name = "Poi点名称")private String name;//Poi点名称@Excel(name = "英文地址")private String eaddress;//英文地址 @Excel(name = "电话")private String phone;//电话 @Excel(name = "地址")private String address;//地址 @Excel(name = "所属城市名称")private String city;// 所属城市名称@Excel(name = "省行政区编码")private String provinceCode;// 省行政区编码@Excel(name = "市行政区编码")private String cityCode;// 市行政区编码 @Excel(name = "所属区县名称")private String county;// 所属区县名称@Excel(name = "区县行政区编码")private String countyCode;// 区县行政区编码@Excel(name = "分类名称")private String typeName;// 分类名称 @Excel(name = "数据信息来源")private String source;// 数据信息来源@Excel(name = "分类编码")private String typeCode;// 分类编码 @Excel(name = "坐标 x,y")private String lonlat;// 坐标 必返回 坐标 x,y@Excel(name = "poi点英文名称")private String ename;// poi点英文名称 @Excel(name = "所属省名称")private String province;// 所属省名称 @Excel(name = "poi类型")private Integer poiType;// poi类型 Int 必返回 101:POI数据 102:公交站点@Excel(name = "poi热点ID ")private String hotPointID;// poi热点ID 必返回 热点id
}
在具体的POI对象之上还有一个父级对象,用来封装上面的POI数据列表,其代码如下:
package com.yelang.project.education.domain;
import java.io.Serializable;
import java.util.List;
import com.yelang.project.education.domain.tdt.TdtPoi;
import lombok.Data;
import lombok.ToString;
@Data
@ToString
public class TdtSearchVo implements Serializable{private static final long serialVersionUID = 5596022814458900285L;private int count = 0;private int resultType;private List<TdtPoi> pois;private String keyWord;
}
在前面的代码中我们使用了ExcelUtil的一个工具类来实现对集合数据的Excle生成。运行上面的代码后可以在本地磁盘中看到如下的Excel文件和控制台命令行:
为了方便大家来进行查看,这里将关键几个属性字段的信息直接贴出来。根据查询检索的接口可以看到,荣昌卤鹅的食品店大约有70余条。
Poi点名称 | 电话 | 地址 | 坐标 x,y |
李氏卤鹅 | 18716232760 | 荣滨南路东段11号附28附近 | 105.590250,29.416870 |
李氏卤鹅 | 18716232760 | 海棠一支路51 | 105.601969,29.408174 |
黄氏卤鹅 | 13667699039 | 向阳路164号附1号 | 105.610380,29.413330 |
黄氏卤鹅 | 13883747879 | 国泰路22号附109号 | 105.619230,29.419920 |
志强卤鹅 | 13452100263 | 滨河东路199 | 105.598171,29.406096 |
刘氏卤鹅 | 15213495612 | 学院路启昌·财富广场内 | 105.580590,29.401687 |
小李卤鹅 | 18223580972 | 海棠一支路35 | 105.601510,29.408171 |
小刘卤鹅 | 15111864106 | 棠香北街12号附17号 | 105.602570,29.419980 |
刘记卤鹅 | 小康路74号附32号东南方向40米 | 105.598810,29.412160 | |
刘记卤鹅 | 15025495776 | 恒荣路61号附42 | 105.580350,29.412990 |
小曹卤鹅 | 18716237165 | 迎宾大道27号附88号 | 105.603160,29.417968 |
郭记卤鹅 | 15808034359 | 兴发路14号西南方向10米 | 105.466663,29.359522 |
林勇卤鹅 | 13883688855 | 安富镇安陶路99号西北方向30米 | 105.465750,29.360990 |
李姐卤鹅 | 13372659875 | 棠香北街73号 | 105.601950,29.423070 |
小罗卤鹅 | 023-46761006 | 玉屏街116 | 105.595290,29.409930 |
棠香卤鹅 | 13637773266 | 小康路137 | 105.598200,29.412993 |
刘记卤鹅 | 仁和一路412 | 105.617110,29.401070 | |
刘师傅卤鹅 | 17783015200 | 小康路74号附32号东南方向40米 | 105.598833,29.412210 |
刘记卤鹅 | 重庆市荣昌区 | 105.584088,29.408142 | |
绝味卤鹅 | 13618309813 | 迎宾大道29号附103 | 105.603740,29.418866 |
刘记卤鹅 | 后西一街5 | 105.589364,29.407575 | |
蓝氏卤鹅 | 13696427391 | 古昌镇街道永丰路70号东北方向50米 | 105.589570,29.488270 |
刘记卤鹅 | 国泰路35 | 105.615933,29.420912 | |
小周卤鹅 | 13452978356 | 颐和街62 | 105.608644,29.410932 |
小罗卤鹅 | 棠香北街8号附15号 | 105.602590,29.418450 | |
小蒋卤鹅 | 15213235048 | 重庆市荣昌区 | 105.585332,29.404571 |
小周卤鹅 | 学院支路37 | 105.582256,29.402380 | |
黄记卤鹅 | 双河镇荣泸北路4号正东方向180米 | 105.569520,29.321250 | |
安子卤鹅 | 13527458567 | 兴隆街17 | 105.590850,29.409790 |
小周卤鹅 | 海棠二支路15 | 105.600870,29.408750 | |
家乐卤鹅 | 滨河西路2 | 105.585580,29.407030 | |
黄二姐卤鹅 | 13372697555 | 棠香北街9号附1附近 | 105.602092,29.418753 |
王三妹卤鹅 | 13648367955 13452927073 | 向阳北路37 | 105.609858,29.423937 |
唐二姐卤鹅 | 13983033139 | 海棠五支路46 | 105.595362,29.413425 |
曾三姐卤鹅 | 15902373368 | 国泰路65 | 105.616490,29.421240 |
小李卤鹅分店 | 18223580972 15025420635 | 广场路406 | 105.590411,29.409533 |
曾三姐卤鹅 | 15902373368 | 海棠四支路27号附1 | 105.598220,29.411840 |
唐二妹卤鹅 | 13618315289 | 中科路3 | 105.581230,29.407800 |
郑氏卤鹅 | 18623130348 | 莲花路43 | 105.591990,29.404650 |
陈氏卤鹅 | 18883009317 | 国泰路26 | 105.617380,29.421210 |
大双卤鹅 | 15998998705 | 向阳路180号附13号 | 105.610360,29.418520 |
广顺小蒋卤鹅 | 13883055909 | 荣滨南路西段81 | 105.582410,29.408970 |
马老七卤鹅 | 13527597939 13101396129 | 国泰路38号 | 105.617365,29.421319 |
陈氏卤鹅 | 学院路43 | 105.580823,29.401070 | |
陈氏卤鹅 | 18328560692 | 国泰路13-附10号西北方向200米 | 105.609858,29.423897 |
黄永记卤鹅 | 富安南路27 | 105.602619,29.413278 | |
黄记卤鹅NO.2 | 东大街165 | 105.596870,29.406940 | |
陈老五卤鹅 | 13372622813 | 玉屏街104 | 105.594950,29.409740 |
小罗卤鹅NO.16 | 023-46761006 | 广场路41正东方向120米 | 105.594180,29.403140 |
小有天卤鹅 | 15923172079 13983165502 | 桂花园街15 | 105.599129,29.405079 |
陈老五卤鹅 | 15111662268 | 重庆市荣昌区 | 105.598197,29.408449 |
广顺姜三妹卤鹅 | 13883976066 13996481845 | 棠香南街63 | 105.602530,29.413337 |
小罗卤鹅NO.2 | 023-46761006 | 滨河中路283 | 105.586760,29.405180 |
小薛卤鹅NO.2 | 15923227029 | 昌龙大道166号附4附近 | 105.602114,29.416036 |
荣昌三惠卤鹅 | 黄金大道荣昌北站内 | 105.631714,29.435601 | |
荣昌三惠卤鹅 | 海棠大道80东南方向30米 | 105.597744,29.411606 | |
莫氏卤鹅北门店 | 15823147600 | 兴隆街96 | 105.592000,29.411200 |
黄二姐卤鹅总店 | 023-46786647 13228672592 | 昌龙大道122 | 105.597320,29.416230 |
黄记卤鹅后西店 | 后西街4 | 105.587490,29.405450 | |
安富林记卤鹅 | 17723656348 | 东大街414 | 105.599980,29.408590 |
小罗卤鹅莲花广场店 | 023-46761006 | 广场路85 | 105.592163,29.407062 |
广顺陈胖子卤鹅NO.3 | 18983824002 | 中科路19 | 105.580960,29.407530 |
安富小李卤鹅NO.8 | 13018338038 | 仁北新城B区附2号 | 105.477500,29.511130 |
亮嘴卤鹅连锁寰宇店 | 向阳路166号附4号 | 105.610300,29.413750 | |
小罗卤鹅瑞尔戴斯店 | 023-46761006 | 重庆市荣昌区 | 105.604045,29.416857 |
陈老五卤鹅上海公馆店 | 13372622813 | 棠香北街95东南方向60米 | 105.602550,29.423370 |
亮嘴卤鹅休闲食品旗舰店 | 东大街20 | 105.593828,29.406398 | |
陈老五卤鹅西门桥店 | 13372622813 | 滨河中路270 | 105.587472,29.405266 |
小罗卤鹅高速路直营店 | 重庆市荣昌区 | 105.639837,29.415633 | |
小薛卤鹅敖凉粉东大街总店 | 023-61480536 | 东大街204 | 105.596530,29.406240 |
以上就是从天地图中给大家获取下来的卤鹅店,提前祝大家接入愉快并且能享受到美食。数据完全来源于天地图,如果于实际情况有出入,还请谅解,最后祝大家旅游快乐。
三、总结
以上就是本文的主要内容,文章首先介绍天地图的检索API,然后详细介绍如何使用Java来调用天地图的API获取所有的卤鹅位置信息,权当为大家做一个参考。文章详细的介绍了天地图的地图检索API以及其具体的参数,同时基于API开发了一个荣昌卤鹅的实例,希望可以帮到大家。行文仓促,定有不足之处,欢迎各位朋友在评论区批评指正,不胜感激。