背景与目标
春节期间烟花爆竹禁燃禁放是保障公共安全、改善空气质量的重要举措,而禁燃政策落地的核心环节之一,是对县域范围内烟花爆竹销售点的精准盘点与动态监管。传统的人工排查方式存在效率低、数据更新不及时、空间位置可视化差等问题,难以满足县域精细化监管的需求。
在高德地图中查询烟花销售专卖店的信息如下:

地理信息系统(GIS)技术能够将空间位置与业务数据深度融合,而高德地图 API 提供了成熟的地理编码、POI 检索等能力,结合 Java 语言的跨平台、高稳定性特性,可快速搭建一套轻量化的县域烟花销售点盘点系统,实现销售点位置检索、数据整合、成果输出的全流程自动化,为禁燃监管决策提供数据支撑。
新晃侗族自治县隶属于湖南省怀化市,地处湘黔边界,县域内乡镇分布分散、地形复杂,烟花爆竹销售点多分布于乡镇集市、村级小卖部等场景,人工盘点耗时耗力且易出现遗漏。

本次实践以新晃县为研究对象,依托 Java 开发语言和高德地图 API,针对该县春节烟花禁燃后的销售点开展盘点工作,验证 GIS 技术在县域基层监管中的实用性,也为同类县域的烟花禁燃监管提供可复用的技术方案。
技术实现
接口对接
首先需在高德开放平台注册开发者账号,申请 Web 服务 API Key(注意区分「Web 服务」与「前端 JS」Key),本次核心使用高德的 POI 搜索接口(/v5/place/text),用于检索新晃县范围内的烟花爆竹销售点。关于如何申请开发者账号和 API Key,建议查阅官方文档获取最新指引。
核心接口参数定义
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 = "https://restapi.amap.com/v5")
public interface AmapSearchService {
@GetHttpInterface("/place/text")
public HttpResponse<String> getSearch(
@QueryPar("keywords") String keywords,
@QueryPar("types") String types,
@QueryPar("region") String region,
@QueryPar("page_size") String page_size,
@QueryPar("page_num") String page_num,
@QueryPar("show_fields") String show_fields,
@QueryPar("key") String key);
}
这里定义了 POI 检索的核心方法,通过注解映射高德 REST 接口。keywords 设定为'烟花',types 对应烟花零售分类编码,region 限定为新晃县行政区域码,page_size 控制单次返回数量,show_fields 指定需要返回的详细字段如商业信息、导航等。
数据抓取
基于 UniHttp 实现 HTTP 请求,解析高德返回的 JSON 数据,提取销售点的核心信息(名称、地址、经纬度、联系方式)。实际开发中要注意处理分页逻辑和接口限流,避免请求过快导致被封禁。
关键逻辑如下
package com.yelang.project.unihttp;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import com.burukeyou.uniapi.http.core.response.HttpResponse;
import com.google.gson.Gson;
import com.yelang.common.utils.StringUtils;
import com.yelang.common.utils.poi.ExcelUtil;
import com.yelang.project.education.domain.amap.AmapPoi;
import com.yelang.project.education.domain.amap.AmapSearchVO;
import com.yelang.project.thridinterface.AmapSearchService;
@SpringBootTest
@RunWith(SpringRunner.class)
public class AmaPOISearchCase {
private static final String AMAP_CLIENT_AK = "yourkey";
@Autowired
private AmapSearchService amapSearchService;
/**
* 查询烟花销售点
*/
@Test
public void searchChangshaFireworks() throws InterruptedException {
String keywords = "烟花";
String types = "060000";
String page_size = "25";
String region = "431227"; // 新晃县区域码
String show_fields = "children,business,indoor,navi,photos";
HttpResponse<String> result = null;
Gson gson = new Gson();
int scrapingIndex = 1;
int dataCount = 0;
List<AmapPoi> amapPoiData = new ArrayList<>();
do {
result = amapSearchService.getSearch(keywords, types, region, page_size, String.valueOf(scrapingIndex), show_fields, AMAP_CLIENT_AK);
System.out.println(result.getBodyResult());
if (StringUtils.isNotEmpty(result.getBodyResult())) {
AmapSearchVO searchVO = gson.fromJson(result.getBodyResult(), AmapSearchVO.class);
amapPoiData.addAll(searchVO.getPois());
dataCount = searchVO.getCount();
scrapingIndex++;
}
Thread.sleep(3000L); // 休眠防止触发限流
} while (dataCount > 0);
System.out.println("一共抓取数据页数:" + scrapingIndex);
System.out.println(amapPoiData.size());
if (amapPoiData.size() > 0) {
ExcelUtil<AmapPoi> util = new ExcelUtil<>(AmapPoi.class);
util.exportExcel(amapPoiData, "新晃侗族自治县烟花销售点列表");
System.out.println("finished");
}
}
}
这段代码实现了分页循环抓取,每次请求后休眠 3 秒以保护接口资源。当总数据量大于 0 时继续下一页,直到抓完所有结果。最后调用 Excel 工具类将数据导出,方便后续核对。
数据结构说明
这里给出检索 POI 类的关键 JavaBean 结构,包含名称、唯一标识、经纬度、详细地址等字段,并使用了自定义注解以便直接导出 Excel。
package com.yelang.project.education.domain.amap;
import java.io.Serializable;
import java.util.List;
import com.yelang.framework.aspectj.lang.annotation.Excel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class AmapPoi implements Serializable {
private static final long serialVersionUID = 8477368531294599663L;
@Excel(name = "名称")
private String name;
@Excel(name = "唯一标识")
private String id;
@Excel(name = "经纬度")
private String location;
@Excel(name = "所属类型")
private String type;
@Excel(name = "分类编码")
private String typecode;
@Excel(name = "所属省份")
private String pname;
@Excel(name = "所属城市")
private String cityname;
@Excel(name = "所属区县")
private String adname;
@Excel(name = "详细地址")
private String address;
@Excel(name = "所属省份编码")
private String pcode;
@Excel(name = "所属区域编码")
private String adcode;
@Excel(name = "所属城市编码")
private String citycode;
private List<AmapChildrenPoi> children;
private AmapBusiness business;
private AmapIndoor indoor;
private AmapNavi navi;
private List<AmapPhotos> photos;
}
成果展示
Excel 导出
将检索到的新晃县烟花爆竹销售点数据导出为 Excel,便于监管部门线下查看、核对和存档。基于自定义注解的实现快速导出,核心代码如下:
if (amapPoiData.size() > 0) {
ExcelUtil<AmapPoi> util = new ExcelUtil<>(AmapPoi.class);
util.exportExcel(amapPoiData, "新晃侗族自治县烟花销售点列表");
System.out.println("finished");
}
导出结果如下:

表格预览
提取关键信息后,可以转为以下关键表格,具体如下:
| 名称 | 经纬度 | 详细地址 |
| 彩云烟花爆竹专营店 | 109.220368,27.358348 | 320 国道柏树林便桥往波洲方向下来 500 米 |
| 浏阳中洲烟花 (贡溪四哥店) | 109.163442,27.119872 | 贡溪镇贡溪村牛场斜对面 |
| 唐光清烟花爆竹 | 109.137099,27.183113 | 扶罗敬老院 |
| 浏阳花炮连锁 (贡溪店) | 109.170480,27.117722 | 贡溪镇贡溪村委会门口 |
| 浏阳烟花贡溪敏哥专卖店 | 109.166282,27.119753 | 贡溪镇贡溪村芒井 168 号 |
| 浏阳花炮连锁 (扶罗旗舰店) | 109.142700,27.195404 | G242 扶罗汽车站北侧约 210 米 |
| 浏阳花炮 | 109.074211,27.312052 | 320 国道西北侧 |
| 庆泰花炮 (晃州西路店) | 109.149341,27.345548 | 新晃金米立再生资源有限公司南侧 140 米 |
| 浏阳电子花炮销售总部 | 108.897645,27.035767 | 中国邮政 (凳寨乡邮政所) 北侧 160 米 |
| 浏阳东方红烟花 | 109.144014,27.191250 | 242 国道西南侧 |
| 中洲烟花 (晃州西路店) | 109.152110,27.345960 | 中国石化新晃服务区南加油站西南侧 230 米 |
| 浏阳中洲烟花 (新晃侗族自治县 G242 店) | 109.126095,27.426852 | 马溪冲村民小组东南侧 |
| 政翔烟花 | 109.141175,27.349175 | 晃州镇大树湾村退役军人服务站东南侧 |
| 多多烟花爆竹专卖店 | 109.159611,27.375502 | 云盘路与 242 国道交叉口东南 440 米 |
| 中洲烟花 | 109.142630,27.195561 | 浏阳花炮连锁 (扶罗旗舰店) 西北侧 |
| 浏阳烟花鞭炮专营 | 109.217475,27.345625 | 五妹批发部南侧 210 米 |
| 宏伟名烟名酒烟花爆竹专店 (X064 店) | 109.232416,27.279789 | 064 县道与 242 国道交叉口南 120 米 |
| 中洲烟花 (X064 店) | 109.262424,27.193034 | 中寨敬老院东侧 60 米 |
| 花海烟花爆竹经营有限公司 | 109.188200,27.371315 | 907 乡道与侗寨路交叉口东 500 米 |
| 新晃县花千树烟花爆竹经营有限公司 | 109.225346,27.337023 | 塘洞村杨柳坪组 |
总结
本方案以新晃县为例,通过 Java 调用高德地图 POI 检索接口,实现了烟花爆竹销售点的自动化盘点。相比传统人工方式,大幅提升了数据获取效率和准确性:
- 技术层面:Java + 高德地图 API 的组合轻量化、易部署,无需搭建复杂的 GIS 服务器,适合县域基层监管部门的技术落地能力;解决了传统人工盘点效率低、可视化差的问题。
- 业务层面:导出的 Excel 成果可直接对接监管工作,经纬度数据还可进一步导入高德地图 Web 端,实现销售点的可视化标注,辅助禁燃巡查路线规划;核心流程为「接口配置→数据检索→Excel 导出」,技术方案轻量化、易复用,适配县域基层监管的落地需求。
- 拓展性:该方案可快速适配其他县域,仅需修改行政编码和检索关键词,即可复用至其他品类(如危化品、农资)的县域监管场景。
后续可进一步优化:增加销售点数据的增量更新(避免重复检索)、对接县域政务系统实现数据自动上报、增加违规销售点的位置对比分析等,让 GIS 技术更好地服务于县域基层治理。

