一、前言
1. 背景描述
春节期间烟花爆竹禁燃禁放是保障公共安全、改善空气质量的重要举措,而禁燃政策落地的核心环节之一,是对县域范围内烟花爆竹销售点的精准盘点与动态监管。传统的人工排查方式存在效率低、数据更新不及时、空间位置可视化差等问题,难以满足县域精细化监管的需求。
地理信息系统(GIS)技术能够将空间位置与业务数据深度融合,而高德地图 API 提供了成熟的地理编码、POI 检索等能力,结合 Java 语言的跨平台、高稳定性特性,可快速搭建一套轻量化的县域烟花销售点盘点系统,实现销售点位置检索、数据整合、成果输出的全流程自动化,为禁燃监管决策提供数据支撑。
2. 聚焦新晃县
新晃侗族自治县隶属于湖南省怀化市,地处湘黔边界,县域内乡镇分布分散、地形复杂,烟花爆竹销售点多分布于乡镇集市、村级小卖部等场景,人工盘点耗时耗力且易出现遗漏。
本次实践以新晃县为研究对象,依托 Java 开发语言和高德地图 API,针对该县春节烟花禁燃后的销售点开展盘点工作,验证 GIS 技术在县域基层监管中的实用性,也为同类县域的烟花禁燃监管提供可复用的技术方案。
二、Java 实现高德检索
1. 接口定义
首先需在高德开放平台注册开发者账号,申请 Web 服务 API Key(注意区分「Web 服务」与「前端 JS」Key),本次核心使用高德的 POI 搜索接口(/v5/place/text),用于检索新晃县范围内的烟花爆竹销售点。
核心接口参数定义
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);
}
2. 数据获取
基于 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.geo.CoordinateTransformUtil;
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) {
// excel 工具包
ExcelUtil<AmapPoi> util = new ExcelUtil<>(AmapPoi.class);
util.exportExcel(amapPoiData, "新晃侗族自治县烟花销售点列表");
System.out.println("finished");
}
}
}
POI 类说明
这里给出检索 POI 类的关键 JavaBean 说明,主要包含名称、唯一标识、经纬度、地址等字段,方便后续导出和展示。
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; // poi 名称
@Excel(name = "唯一标识")
private String id; // poi 唯一标识
@Excel(name = "经纬度")
private String location; // poi 经纬度
@Excel(name = "所属类型")
private String type; // poi 所属类型
@Excel(name = "分类编码")
private String typecode; // poi 分类编码
@Excel(name = "所属省份")
private String pname; // poi 所属省份
@Excel(name = "所属城市")
private String cityname; // poi 所属城市
@Excel(name = "所属区县")
private String adname; // poi 所属区县
@Excel(name = "详细地址")
private String address; // poi 详细地址
@Excel(name = "所属省份编码")
private String pcode; // poi 所属省份编码
@Excel(name = "所属区域编码")
private String adcode; // poi 所属区域编码
@Excel(name = "所属城市编码")
private String citycode; // poi 所属城市编码
private List<AmapChildrenPoi> children; // 子 POI 信息
private AmapBusiness business; // poi 商业信息
private AmapIndoor indoor; // 室内相关信息
private AmapNavi navi; // 导航位置相关信息
private List<AmapPhotos> photos; // poi 图片相关信息
}
三、成果展示
1. Excel 展示
将检索到的新晃县烟花爆竹销售点数据导出为 Excel,便于监管部门线下查看、核对和存档。基于自定义注解的实现快速导出,核心代码如下:
if (amapPoiData.size() > 0) {
// excel 工具包
ExcelUtil<AmapPoi> util = new ExcelUtil<>(AmapPoi.class);
util.exportExcel(amapPoiData, "新晃侗族自治县烟花销售点列表");
System.out.println("finished");
}
导出结果包含了名称、经纬度、地址等关键字段,可直接用于台账管理。
2. 表格展示
提取关键信息后,可以转为以下关键表格,具体如下:
| 名称 | 经纬度 | 详细地址 |
|---|---|---|
| 彩云烟花爆竹专营店 | 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 | 塘洞村杨柳坪组 |
四、总结
本方案以新晃县为例的县域烟花禁燃监管 GIS 实践,通过 Java 调用高德地图 POI 检索接口,实现了烟花爆竹销售点的自动化盘点,相比传统人工方式,大幅提升了数据获取效率和准确性:
- 技术层面:Java + 高德地图 API 的组合轻量化、易部署,无需搭建复杂的 GIS 服务器,适合县域基层监管部门的技术落地能力;解决了传统人工盘点效率低、可视化差的问题。
- 业务层面:导出的 Excel 成果可直接对接监管工作,经纬度数据还可进一步导入高德地图 Web 端,实现销售点的可视化标注,辅助禁燃巡查路线规划;核心流程为「接口配置→数据检索→Excel 导出」,技术方案轻量化、易复用,适配县域基层监管的落地需求。
- 拓展性:该方案可快速适配其他县域,仅需修改行政编码和检索关键词,即可复用至其他品类(如危化品、农资)的县域监管场景。
后续可进一步优化:增加销售点数据的增量更新(避免重复检索)、对接县域政务系统实现数据自动上报、增加违规销售点的位置对比分析等,让 GIS 技术更好地服务于县域基层治理。


