县域烟花禁燃监管 GIS 实践:Java 调用高德地图 API 盘点销售点
一、背景与目标
春节期间烟花爆竹禁燃禁放是保障公共安全、改善空气质量的重要举措。然而,禁燃政策落地的核心环节之一,是对县域范围内烟花爆竹销售点的精准盘点与动态监管。传统的人工排查方式存在效率低、数据更新不及时、空间位置可视化差等问题,难以满足县域精细化监管的需求。
地理信息系统(GIS)技术能够将空间位置与业务数据深度融合。结合 Java 语言的跨平台、高稳定性特性,以及高德地图 API 提供的成熟地理编码和 POI 检索能力,我们可以快速搭建一套轻量化的县域烟花销售点盘点系统,实现销售点位置检索、数据整合、成果输出的全流程自动化。
本次实践以湖南省怀化市新晃侗族自治县为研究对象。该县地处湘黔边界,乡镇分布分散、地形复杂,烟花爆竹销售点多分布于乡镇集市、村级小卖部等场景。通过技术手段验证 GIS 在基层监管中的实用性,能为同类县域的烟花禁燃监管提供可复用的技术方案。
二、Java 实现高德检索
1. 接口定义
在高德开放平台注册开发者账号并申请 Web 服务 API Key(注意区分「Web 服务」与「前端 JS」Key)。本次核心使用高德的 POI 搜索接口(/v5/place/text),用于检索指定区域内的烟花爆竹销售点。
我们定义了一个接口来封装 HTTP 请求参数,包括关键词、类型、区域范围、分页大小及返回字段等。
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 数据,提取销售点的核心信息(名称、地址、经纬度、联系方式)。这里需要注意控制请求频率,避免触发平台的限流机制。
核心逻辑如下:设置关键词为'烟花',类型为'060000'(零售店),区域为新晃县行政代码,循环抓取直到数据获取完毕。
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. 数据结构设计
为了便于后续导出和处理,我们需要定义对应的 JavaBean 来映射 POI 返回的数据。关键字段包括名称、唯一标识、经纬度、详细地址及分类编码等。
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;
}
三、成果展示
1. Excel 导出
将检索到的销售点数据导出为 Excel 文件,便于监管部门线下查看、核对和存档。利用自定义注解配合工具包,可以快速完成批量导出。
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 | 塘洞村杨柳坪组 |
四、总结
本方案通过 Java 调用高德地图 POI 检索接口,实现了烟花爆竹销售点的自动化盘点。相比传统人工方式,大幅提升了数据获取效率和准确性。
在技术层面,Java 结合高德地图 API 的组合轻量化、易部署,无需搭建复杂的 GIS 服务器,适合县域基层监管部门的技术落地能力。核心流程为「接口配置→数据检索→Excel 导出」,解决了传统人工盘点效率低、可视化差的问题。
在业务层面,导出的 Excel 成果可直接对接监管工作,经纬度数据还可进一步导入高德地图 Web 端,实现销售点的可视化标注,辅助禁燃巡查路线规划。该方案不仅可直接服务于禁燃监管工作,且具备快速迁移至其他县域或其他品类(如危化品、农资)监管场景的拓展性。
后续可进一步优化:增加销售点数据的增量更新以避免重复检索、对接县域政务系统实现数据自动上报、增加违规销售点的位置对比分析等,让 GIS 技术更好地服务于县域基层治理。

