跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

县域烟花禁燃监管 GIS 实践:Java 结合高德地图 API 盘点销售点

基于 Java 与高德地图 API 的县域烟花销售点自动化盘点方案,利用 GIS 技术整合空间位置与业务数据。通过 POI 检索接口实现新晃县烟花爆竹销售点的批量获取,替代传统人工排查,解决效率低、可视化差的问题。流程涵盖接口配置、分页抓取及 Excel 导出,支持快速迁移至其他县域或危化品监管场景,为基层禁燃监管提供轻量级数据支撑。

DockerOne发布于 2026/3/29更新于 2026/10/2499 浏览
县域烟花禁燃监管 GIS 实践:Java 结合高德地图 API 盘点销售点

背景与目标

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

在高德地图中查询烟花销售专卖店的信息如下:

文章配图

地理信息系统(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.358348320 国道柏树林便桥往波洲方向下来 500 米
浏阳中洲烟花 (贡溪四哥店)109.163442,27.119872贡溪镇贡溪村牛场斜对面
唐光清烟花爆竹109.137099,27.183113扶罗敬老院
浏阳花炮连锁 (贡溪店)109.170480,27.117722贡溪镇贡溪村委会门口
浏阳烟花贡溪敏哥专卖店109.166282,27.119753贡溪镇贡溪村芒井 168 号
浏阳花炮连锁 (扶罗旗舰店)109.142700,27.195404G242 扶罗汽车站北侧约 210 米
浏阳花炮109.074211,27.312052320 国道西北侧
庆泰花炮 (晃州西路店)109.149341,27.345548新晃金米立再生资源有限公司南侧 140 米
浏阳电子花炮销售总部108.897645,27.035767中国邮政 (凳寨乡邮政所) 北侧 160 米
浏阳东方红烟花109.144014,27.191250242 国道西南侧
中洲烟花 (晃州西路店)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.279789064 县道与 242 国道交叉口南 120 米
中洲烟花 (X064 店)109.262424,27.193034中寨敬老院东侧 60 米
花海烟花爆竹经营有限公司109.188200,27.371315907 乡道与侗寨路交叉口东 500 米
新晃县花千树烟花爆竹经营有限公司109.225346,27.337023塘洞村杨柳坪组

总结

本方案以新晃县为例,通过 Java 调用高德地图 POI 检索接口,实现了烟花爆竹销售点的自动化盘点。相比传统人工方式,大幅提升了数据获取效率和准确性:

  1. 技术层面:Java + 高德地图 API 的组合轻量化、易部署,无需搭建复杂的 GIS 服务器,适合县域基层监管部门的技术落地能力;解决了传统人工盘点效率低、可视化差的问题。
  2. 业务层面:导出的 Excel 成果可直接对接监管工作,经纬度数据还可进一步导入高德地图 Web 端,实现销售点的可视化标注,辅助禁燃巡查路线规划;核心流程为「接口配置→数据检索→Excel 导出」,技术方案轻量化、易复用,适配县域基层监管的落地需求。
  3. 拓展性:该方案可快速适配其他县域,仅需修改行政编码和检索关键词,即可复用至其他品类(如危化品、农资)的县域监管场景。

后续可进一步优化:增加销售点数据的增量更新(避免重复检索)、对接县域政务系统实现数据自动上报、增加违规销售点的位置对比分析等,让 GIS 技术更好地服务于县域基层治理。

目录

  1. 背景与目标
  2. 技术实现
  3. 接口对接
  4. 核心接口参数定义
  5. 数据抓取
  6. 关键逻辑如下
  7. 数据结构说明
  8. 成果展示
  9. Excel 导出
  10. 表格预览
  11. 总结

更多推荐文章

查看全部
  • TypeScript+React 全栈生态实战:从架构选型到工程落地
  • 前端流式输出实现详解:从原理到实践
  • 鸿蒙 Flutter 智能家居应用开发实战指南
  • 跃阶星辰 AI 开源 Step-3.5-Flash 本地部署指南
  • Easy R1 训练环境搭建与配置实战
  • 自然语言处理在金融领域的应用与实战
  • macOS Tahoe 26.2 更新详解:12 项关键改进与体验优化
  • LLaMA 衍生模型详解:官方演进与社区微调
  • 双指针专题:快乐数与盛水最多的容器
  • 文心一言 4.5 开源测评与本地部署指南
  • Flink 运行时组件深度解析:架构设计与实战
  • GLM-5 与 Qwen3.5 模型 API 接口调用实战指南
  • OpenClaw Agent Skills 实战指南:从对话到执行的全能插件安装与配置
  • 网络安全等级保护测评中的渗透测试实施与应用
  • SameSite=Lax 属性详解:平衡 CSRF 防御与用户体验
  • Prometheus 监控系统核心概念与架构解析
  • Kotlin Multiplatform 赋能 HarmonyOS 应用开发实践与解析
  • 相干伊辛机在医疗及 AI 领域的应用前景
  • Python3 基础语法与实战应用指南:爬虫数据分析机器学习入门
  • Windows 环境下安装 Pandas 的常见坑点与解决方案

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online