县域烟花禁燃监管 GIS 实践:基于 Java 与高德地图的销售点盘点 —— 以新晃县为例

县域烟花禁燃监管 GIS 实践:基于 Java 与高德地图的销售点盘点 —— 以新晃县为例

目录

一、前言

1. 背景描述

2. 聚焦新晃县

二、Java 实现高德检索

1. 接口定义

核心接口参数定义

2. 数据获取

核心实现代码

POI类说明

三、成果展示

1. Excel 展示

2、表格展示        

四、总结


一、前言

1. 背景描述

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

        地理信息系统(GIS)技术能够将空间位置与业务数据深度融合,而高德地图 API 提供了成熟的地理编码、POI 检索等能力,结合 Java 语言的跨平台、高稳定性特性,可快速搭建一套轻量化的县域烟花销售点盘点系统,实现销售点位置检索、数据整合、成果输出的全流程自动化,为禁燃监管决策提供数据支撑。

2. 聚焦新晃县

        新晃侗族自治县隶属于湖南省怀化市,地处湘黔边界,县域内乡镇分布分散、地形复杂,烟花爆竹销售点多分布于乡镇集市、村级小卖部等场景,人工盘点耗时耗力且易出现遗漏。

        本次实践以新晃县为研究对象,依托 Java 开发语言和高德地图 API,针对该县春节烟花禁燃后的销售点开展盘点工作,验证 GIS 技术在县域基层监管中的实用性,也为同类县域的烟花禁燃监管提供可复用的技术方案。

二、Java 实现高德检索

1. 接口定义

        首先需在高德开放平台注册开发者账号,申请 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); }

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.flightaware.TestFlightawareDetails.FlightHistory; 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; /** * - 查询烟花销售点 add by 夜郎king * @throws InterruptedException */ @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<AmapPoi>(); 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());//将所有数据添加到Excel中 dataCount = searchVO.getCount(); scrapingIndex ++; } Thread.sleep(3000L);//休眠3000秒 } while (dataCount > 0); System.out.println("一共抓取数据页数:" + scrapingIndex); System.out.println(amapPoiData.size()); if(amapPoiData.size() > 0) { // excel工具包 ExcelUtil<AmapPoi> util = new ExcelUtil<AmapPoi>(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; /** * -单个 poi 内包含的完整返回数据 * @author 夜郎king * */ @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>(AmapPoi.class); util.exportExcel(amapPoiData, "新晃侗族自治县烟花销售点列表"); System.out.println("finished"); }

        导出结果如下:

2、表格展示        

        提取关键信息后,可以转为以下关键表格,具体如下:

名称经纬度详细地址
彩云烟花爆竹专营店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塘洞村杨柳坪组

四、总结

        以上就是本文的主要内容。本文以新晃县为例的县域烟花禁燃监管 GIS 实践,通过 Java 调用高德地图 POI 检索接口,实现了烟花爆竹销售点的自动化盘点,相比传统人工方式,大幅提升了数据获取效率和准确性:

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

        后续可进一步优化:增加销售点数据的增量更新(避免重复检索)、对接县域政务系统实现数据自动上报、增加违规销售点的位置对比分析等,让 GIS 技术更好地服务于县域基层治理。行文仓促,定有不足之处,欢迎各位朋友在评论区批评指正,不胜感激。

Read more

Python 入门超详细指南:环境搭建 + 核心优势 + 应用场景(零基础友好)

Python 入门超详细指南:环境搭建 + 核心优势 + 应用场景(零基础友好)

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 一. 先搞懂:计算机与编程的核心概念 * 1.1 什么是计算机? * 1.2 什么是编程? * 二. 认识 Python:起源、优势与应用场景 * 2.1 Python 的 “前世今生” * 2.2 Python 的优缺点以及应用场景大盘点 * 三. Python 的就业前景:理性看待 “钱景” * 四. 环境搭建:Python+PyCharm(一步到位) * 4.1 安装 Python

By Ne0inhk
平衡二叉搜索树之 AVL 树的模拟实现【C++】

平衡二叉搜索树之 AVL 树的模拟实现【C++】

文章目录 * AVL树的简单介绍 * 全部的实现代码放在了文章末尾 * 准备工作 * 包含头文件 * 类的成员变量 * 构造函数和拷贝构造 * swap和赋值运算符重载 * 析构函数 * find * insert[重要] * 当parent的平衡因子为1/-1时,如何向上更新祖先节点的平衡因子呢? * 怎么旋转? * 左单旋 * 右单旋 * 左右双旋 * 右左双旋 * 旋转的平衡因子更新 * 左单旋和右单旋 * 左右双旋和右左双旋 * insert的全部代码 * empty * size * 中序遍历 * 全部代码 AVL树的简单介绍 我上一篇文章提到的普通二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。 AVL树就可以解决上述问题,让搜索树的查找效率在任何情况下都能稳定是O(logN) AVL树解决上述问题的方法是: 保证每个结点的左右子树高度之差的绝对值不超过1 这样就

By Ne0inhk
在 CentOS 系统上实现定时执行 Python 邮件发送任务

在 CentOS 系统上实现定时执行 Python 邮件发送任务

文章目录 * **引言** * **方案一:经典基石 - Cron 作业** * **1. 原理概述** * **2. 详细实现步骤** * **3. 优缺点分析** * **4. 适用场景** * **方案二:灵活调度 - Systemd 定时器** * **1. 原理概述** * **2. 详细实现步骤** * **3. 优缺点分析** * **4. 适用场景** * **方案三:Python 内生方案 - APScheduler 库** * **1. 原理概述** * **2. 详细实现步骤** * **3. 优缺点分析** * **4. 适用场景** * **方案四:企业级任务队列 - Celery with Redis** * **1. 原理概述*

By Ne0inhk
【C++】适配器模式手搓STL的stack和queue

【C++】适配器模式手搓STL的stack和queue

适配器模式手搓STL的stack和queue * 适配器模式实现STL的stack和queue * github地址 * 0. 前言 * 1. stack和queue的简单介绍 * 1.1 stack * 1.2 queue * 2. 容器适配器 * 2.1 什么是适配器 * 2.2 C++中的适配器 * 3. 手搓stack和queue * 3.1 实现stack * 基础架构 * push和pop * 数据访问 * 容量访问 * 完整实现 * 3.2 实现queue * 基础架构 * push和pop * 数据访问 * 容量访问 * 完整实现 * 4. deque简单剖析 * 简介 * deque无法替代vector和list * 作为容器适配器 * deque的迭代器 * 5. 结语 适配器模式实现STL的stack和queue github地址

By Ne0inhk