Java 实战:基于高德周边检索 API 获取耒阳童车产业园企业分布数据

Java 实战:基于高德周边检索 API 获取耒阳童车产业园企业分布数据

目录

一、前言

1.1 耒阳童车产业园项目背景

1.2 周边检索API的必要性

二、高德周边检索服务简介

2.1 服务简介

2.2 核心请求参数

2.3 核心响应参数

三、Java应用程序实现

3.1 开发环境准备

3.2 UnitHttp接口定义(原生Http工具类)

3.3 Java主程序调用(高德API接入+数据解析)

四、成果展示

4.1 产业园位置概述

4.2 1公里范围内企业列表

4.3 2公里范围内企业列表

4.4 3公里范围内企业列表

五、总结

技术拓展与优化方向


一、前言

1.1 耒阳童车产业园项目背景

        近期,央视《焦点访谈》专题曝光,湖南耒阳童车产业园沦为典型的虚假政绩工程、空心产业园,相关问题引发广泛关注,也让产业数据真实性、客观调研的重要性被推到台前。据通报与实地调查显示,耒阳在2021年不顾当地产业基础空白、缺乏童车产业链配套的实际,盲目提出打造“百亿级童车产业园”的浮夸目标,后续更是长期夸大数据、虚报产值:对外宣称园区入驻60余家企业、年产值破亿,实际仅建成2栋厂房,仅有1家核心组装企业+4家小微配套企业落地,2024年真实产值仅2165万元,却被虚报至3.47亿元,完全脱离实际,沦为“只喊口号、不见实体”的形象工程。当地在园区规划、招商、数据上报全流程缺乏客观调研,仅凭主观臆造数据打造政绩,既违背产业发展规律,也暴露出传统人工摸排、口头统计的巨大漏洞。

        在这一背景下,精准、客观、可溯源的产业布局数据采集变得尤为重要。无论是复盘园区真实产业现状、核查虚报数据,还是后续园区整改、产业链补短板,都需要摒弃人工虚报、口头统计的弊端,依托精准时空检索技术,客观还原园区周边真实企业分布情况,摸清1-3公里范围内到底有多少实体企业、配套厂商,为产业整改、理性规划提供可靠的数据支撑,而非继续依赖虚假报表。无论是园区运营方、招商团队,还是相关企业,都需要精准、高效的周边企业数据,而非传统人工摸排,这就需要借助成熟的地图API实现自动化数据采集与整理,大幅提升数据获取效率和精准度。

1.2 周边检索API的必要性

        耒阳童车产业园的问题核心短板之一就是缺乏客观的时空数据核验手段,传统人工统计、主观上报极易出现范围模糊、底数不清的问题,而高德地图周边检索API作为基于经纬度的精准时空检索服务,恰好能破解这一痛点。当然,除了使用高德地图之外,也是可以使用百度地图的API的。这种用技术手段实现客观、公正、可复现的企业数据采集,其核心优势高度适配本次实景核查需求:

  • 时空定位精准,杜绝范围造假:以园区核心经纬度为固定圆心,严格按1-3公里半径圈定检索范围,经度纬度双重锁定,彻底规避人工划定范围的随意性,实现定点、定时、定距的标准化空间检索,客观界定园区周边范围;
  • 数据真实可溯源,破除虚报泡沫:直接调取地图POI真实实体数据,获取企业名称、详细地址、实际位置、经营类型等一手信息,不依赖人工上报、不采信虚假报表,实打实核验园区周边真实企业存量,戳破数据泡沫;
  • 接口标准化,时空检索高效可控:采用HTTP标准接口,支持按距离、行业类型精准筛选,可批量、重复调用,实现时空维度的批量数据抓取,短时间内完成多圈层企业布局梳理,效率远超人工摸排,且数据一致性强;
  • 定位精准:支持经纬度定点检索,可自定义检索半径,精准圈定园区1-3公里范围,避免地域边界误差;

        本次实战正是基于这一现实背景,以Java为开发语言,通过调用高德周边检索API,搭建时空精准检索的数据采集程序,摒弃人工干预和数据造假空间,以园区核心坐标为基准,分层级获取1-3公里范围内真实企业分布数据,既用技术手段还原耒阳童车产业园周边产业现状,也为同类产业园区的客观调研、数据核验、整改复盘提供可复用的技术方案。

二、高德周边检索服务简介

2.1 服务简介

        高德周边检索(POI周边搜索)属于高德Web服务API中的搜索服务,核心功能是以指定经纬度为圆心,自定义半径范围内,按关键词或行业类型检索周边兴趣点(POI),本次场景中我们将检索目标设为“企业、公司”等相关类型,精准筛选园区周边工商注册类企业。使用前提:需前往高德开放平台注册开发者账号,创建应用并申请Web服务API Key(密钥),Key是调用接口的唯一身份凭证,务必妥善保管,避免泄露。关于如何申请API key,大家可以到之前的系列博客中查找,这里不再进行赘述。

2.2 核心请求参数

参数名

含义

规则说明

是否必须

缺省值

key

高德Key

用户在高德地图官网 申请 Web 服务 API 类型 Key

必填

keywords

地点关键字

需要被检索的地点文本信息。

只支持一个关键字 ,文本总长度不可超过80字符

可选

types

指定地点类型

地点文本搜索接口支持按照设定的POI类型限定地点搜索结果;地点类型与 poi typecode 是同类内容,可以传入多个 poi typecode,相互之间用“|”分隔,内容可以参考 POI 分类码表;地点(POI)列表的排序会按照高德搜索能力进行综合权重排序;

当 keywords 和 types 均为空的时候,默认指定 types 为050000(餐饮服务)、070000(生活服务)、120000(商务住宅)

可选

050000(餐饮服务)

070000(生活服务)

120000(商务住宅)

location

中心点坐标

圆形区域检索中心点,不支持多个点。经度和纬度用","分割,经度在前,纬度在后,经纬度小数点后不得超过6位

必填

radius

搜索半径

取值范围:0-50000,大于50000时按默认值,单位:米

可选

5000

sortrule

排序规则

规定返回结果的排序规则。

按距离排序:distance;综合排序:weight

可选

distance

region

搜索区划

增加指定区域内数据召回权重,如需严格限制召回数据在区域内,请搭配使用 city_limit 参数,可输入行政区划名或对应 citycode 或 adcode

可选

无,默认全国范围内搜索

city_limit

指定城市数据召回限制

可选值:true/false

为 true 时,仅召回 region 对应区域内数据

可选

false

show_fields

返回结果控制

show_fields 用来筛选 response 结果中可选字段。show_fields 的使用需要遵循如下规则:

1、具体可指定返回的字段类请见下方返回结果说明中的“show_fields”内字段类型;

2、多个字段间采用“,”进行分割;

3、show_fields 未设置时,只返回基础信息类内字段。

可选

page_size

当前分页展示的数据条数

page_size 的取值1-25

可选

page_size 默认为 10

page_num

请求第几分页

请求第几分页

可选

page_num 默认为 1

sig

数字签名

请参考 数字签名获取和使用方法

可选

output

返回结果格式类型

默认格式为 json,目前只支持 json 格式;

可选

json

callback

回调函数

callback 值是用户定义的函数名称,此参数只在 output 参数设置为 JSON 时有效。

可选

2.3 核心响应参数

名称

类型

说明

status

string

本次 API 访问状态,如果成功返回1,如果失败返回0。

info

string

访问状态值的说明,如果成功返回"ok",失败返回错误原因,具体见 错误码说明

infocode

string

返回状态说明,10000代表正确,详情参阅 info 状态表

count

string

单次请求返回的实际 poi 点的个数

pois

object

返回的 poi 完整集合

poi

单个 poi 内包含的完整返回数据

name

string

poi 名称

id

string

poi 唯一标识

parent

string

父 POI 的 ID,当前 POI 如果有父 POI,则返回父 POI 的 ID。可能为空

location

string

poi 经纬度

distance

string

离中心点距离,单位米

type

string

poi 所属类型

typecode

string

poi 分类编码

pname

string

poi 所属省份

cityname

string

poi 所属城市

adname

string

poi 所属区县

address

string

poi 详细地址

pcode

string

poi 所属省份编码

adcode

string

poi 所属区域编码

citycode

string

poi 所属城市编码

注意以下字段如需返回需要通过“show_fields”进行参数类设置。

children

object

设置后返回子 POI 信息

id

string

子 poi 唯一标识

name

string

子 poi 名称

location

string

子 poi 经纬度

address

string

子 poi 详细地址

subtype

string

子 poi 所属类型

typecode

string

子 poi 分类编码

sname

string

子 poi 分类信息

business

object

设置后返回 poi 商业信息

business_area

string

poi 所属商圈

opentime_today

string

poi 今日营业时间,如 08:30-17:30 08:30-09:00 12:00-13:30 09:00-13:00

opentime_week

string

poi 营业时间描述,如 周一至周五:08:30-17:30(延时服务时间:08:30-09:00;12:00-13:30);周六延时服务时间:09:00-13:00(法定节假日除外)

tel

string

poi 的联系电话

tag

string

poi 特色内容,目前仅在美食 poi 下返回

rating

string

poi 评分,目前仅在餐饮、酒店、景点、影院类 POI 下返回

cost

string

poi 人均消费,目前仅在餐饮、酒店、景点、影院类 POI 下返回

parking_type

string

停车场类型(地下、地面、路边),目前仅在停车场类 POI 下返回

alias

string

poi 的别名,无别名时不返回

keytag

string

poi 标识,用于确认poi信息类型 

rectag

string

用于再次确认信息类型 

indoor

object

设置后返回室内相关信息

indoor_map

string

是否有室内地图标志,1为有,0为没有

cpid

string

如果当前 POI 为建筑物类 POI,则 cpid 为自身 POI ID;如果当前 POI 为商铺类 POI,则 cpid 为其所在建筑物的 POI ID。

indoor_map 为0时不返回

floor

string

楼层索引,一般会用数字表示,例如8;indoor_map 为0时不返回

truefloor

string

所在楼层,一般会带有字母,例如F8;indoor_map 为0时不返回

navi

object

设置后返回导航位置相关信息

navi_poiid

string

poi 对应的导航引导点坐标。大型面状 POI 的导航引导点,一般为各类出入口,方便结合导航、路线规划等服务使用

entr_location

string

poi 的入口经纬度坐标

exit_location

string

poi 的出口经纬度坐标

gridcode

string

poi 的地理格 id

photos

object

设置后返回 poi 图片相关信息

title

string

poi 的图片介绍

url

string

poi 图片的下载链接

三、Java应用程序实现

3.1 开发环境准备

  • JDK版本:1.8及以上(本文用JDK1.8)
  • 开发工具:IDEA/Eclipse
  • 依赖:无第三方框架,仅用uniapi-http实现接口调用,搭配Gson解析JSON数据
  • 前置:高德API Key、耒阳童车产业园核心经纬度

3.2 UnitHttp接口定义(原生Http工具类)

        编写通用Http工具类,实现GET请求发送、响应数据接收,适配高德API接口调用,代码可直接复用:

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 { /** * -周边搜索API服务 * * @param location 中心点坐标 规则: 经度和纬度用","分割,经度在前,纬度在后,经纬度小数点后不得超过6位 * @param keywords 查询关键字 规则: 只支持一个关键字 * @param types 查询POI类型 多个类型用“|”分割;可选值:分类代码 或 汉字 (若用汉字,请严格按照附件之中的汉字填写) * @param region 查询城市 可选值:城市中文、中文全拼、citycode、adcode 如:北京/beijing/010/110000 * @param radius 查询半径 取值范围:0-50000。规则:大于50000按默认值,单位:米 * @param page_size 当前分页展示的数据条数 * @param page_num 请求第几分页 * @param show_fields 返回结果控制 * @param key * @return */ @GetHttpInterface("/place/around") public HttpResponse<String> searchByAround(@QueryPar("location") String location, @QueryPar("keywords") String keywords, @QueryPar("types") String types, @QueryPar("region") String region, @QueryPar("radius") int radius, @QueryPar("page_size") String page_size, @QueryPar("page_num") String page_num, @QueryPar("show_fields") String show_fields, @QueryPar("key") String key); }

3.3 Java主程序调用(高德API接入+数据解析)

        主程序实现参数拼接、接口调用、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 = "yourAk"; @Autowired private AmapSearchService amapSearchService; /** * - 根据中心点查询周边POI信息 add by 搜索城市为耒阳 夜郎king * @throws InterruptedException */ @Test public void searchAroundCase() throws InterruptedException { String location = "112.868195,26.46236"; String; String types = "170000"; String file = "公司企业"; String page_size = "25"; int radius = 2000; // 半径2000米 String region = "430481";//耒阳 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.searchByAround(location, keywords, types, region, radius, 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);//休眠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, "耒阳市三架街道白洋渡村二公里"+ file +"信息列表"); System.out.println("finished"); } } }

        在IDE中运行以上程序后,可以看到以下输出说明程序正常执行。

        注意事项:1. 需引入Gson依赖,用于解析JSON数据;2. 务必替换代码中的AMAP_KEY为自己申请的密钥;3. 经纬度可通过高德坐标拾取工具精准获取园区中心点坐标。

四、成果展示

4.1 产业园位置概述

        耒阳童车产业园位于湖南省衡阳市耒阳市境内,这里选取的参考为白洋渡村村委会,核心中心点经纬度:112.868195,26.46236,地处耒阳产业规划片区。本次检索范围以村委会为圆心,半径1公里、2公里、3公里逐级扩大,梳理不同距离圈层的企业布局。通过展示产业园的企业分布,对产业园的产业配套可以做一个配置预估。也对产业发展做一个评估。下图这两幢厂房或许就是记者视角下的两座厂房吧。

4.2 1公里范围内企业列表

        1公里范围属于园区核心紧邻区域,1公里内的企业信息如下:

        可以看到,在1公里范围之内,企业大约有30家,但是真正与童车相关的真的就寥寥无几了。

4.3 2公里范围内企业列表

        2公里范围覆盖园区周边临近产业片区,企业数量明显增多,

        从数量来说,虽然增加了23家企业,但是依然可以看到,跟童车相关依然不多,缺乏上下游配套。

4.4 3公里范围内企业列表

        3公里范围的企业更多了,一共有85家。但是这85家与童车的产业相关度比较低。因此完善的上下游产业并未形成。

        数据说明:本文仅展示核心代表性企业,实际运行代码可获取全量明细。从以上结果来看,基本符合新闻的调查研究。

五、总结

        本次实战通过Java原生Http工具结合高德周边检索API,高效完成了耒阳童车产业园1-3公里企业分布数据的获取,全程实现自动化、精准化、轻量化数据采集,完美解决传统人工摸排的痛点,整体流程可总结为:

  1. 申请高德API Key,确定检索中心点与范围;
  2. 编写通用Http工具类,实现接口调用;
  3. 拼接请求参数,调用周边检索接口;
  4. 解析JSON响应数据,筛选整理企业信息;
  5. 按距离分段输出成果,完成数据梳理。

技术拓展与优化方向

  • 增加数据持久化,将结果存入数据库,便于后续分析;
  • 增加异常处理、重试机制,提升程序稳定性。

        本文代码可直接复用至其他园区、商圈、点位的周边检索场景,只需修改经纬度、关键词、检索半径即可适配,是Java后端接入地图API的典型实战案例,希望能帮助到各位开发者快速上手高德地图API开发。行文仓促,难免有许多不足之处,如果在实操中遇到问题,欢迎在评论区评论交流~。

Read more

【C++】 map/multimap底层原理与逻辑详解

【C++】 map/multimap底层原理与逻辑详解

【C++】 map/multimap底层原理与逻辑详解 * 摘要 * 目录 * 一、`map` * 1. 类模板认识 * 2. 构造函数认识 * 3. 迭代器和范围for的使用 * 4. insert的使用 * 5. empty 和size的使用 * 6. erase的使用 * 7. swap 和 clear的使用 * 8. find的使用 * 9. count的使用 * 11. lower_bound 和 upper_bound的使用 * 12. equal_range的使用 * 13. operator= 的使用 * 14. operator[ ] 的使用 * 二、`multimap` * 1. 模板和类模板的认识 * 2. insert的使用 * 3.

By Ne0inhk
【Spring AI & LangChain4j 进阶篇】Milvus/Redis向量库整合Java:RAG核心环节手把手代码实现

【Spring AI & LangChain4j 进阶篇】Milvus/Redis向量库整合Java:RAG核心环节手把手代码实现

🍃 予枫:个人主页 📚 个人专栏: 《Java 从入门到起飞》《读研码农的干货日常》 💻 Debug 这个世界,Return 更好的自己! 引言 大模型幻觉是落地路上的“绊脚石”,而RAG(检索增强生成)正是破解这一痛点的核心方案。作为Java开发者,如何依托Spring AI、LangChain4j等生态,实现从文档解析、向量存储到检索生成的全链路落地?本文拆解RAG核心逻辑,手把手教你用Java搭建可直接复用的RAG系统,覆盖多格式文档处理、主流向量库整合与全流程优化,干货拉满,建议收藏! 文章目录 * 引言 * 一、RAG核心认知:为什么它能解决大模型幻觉? * 1.1 RAG是什么?核心逻辑拆解 🧩 * 1.2 RAG适用场景与全链路流程 * 1.2.1 核心适用场景 * 1.2.2 RAG全链路核心流程(Java视角) * 二、

By Ne0inhk
飞算JavaAI:智能ai工具箱,普通程序员也能高效交付

飞算JavaAI:智能ai工具箱,普通程序员也能高效交付

做程序员这些年,最烦的就是接到需求模糊、涉及模块多的项目——就像这次要开发的本地生活食材配送平台,需求只写了“支持商家入驻、用户下单、食材溯源、配送调度、售后维权”,具体怎么拆分功能、设计架构,完全没头绪。换以前,光和产品经理对接需求、画架构图就要3天,加上编码、调试,没两周根本交不出活。但用了飞算JavaAI专业版后,整个开发周期压缩到一周,还提前2天完成测试上线,核心靠的就是它的智能引导系统和实用AI工具,让复杂项目开发变得有条理、高效率。 智能引导五步法:从模糊需求到可落地代码,一步不卡壳 面对食材配送平台的多元需求,我一开始只知道核心方向,具体的功能模块、接口设计、数据存储完全是一团乱麻。飞算JavaAI的智能引导系统,就像一个贴身助手,一步步帮我把需求拆解、落地,全程没遇到卡壳的地方。 1. 第一步理解需求仅用 15 秒就拆解出 12 个关键功能点,涵盖商家、用户、商品、订单、配送等基础模块,还补充了食材溯源、

By Ne0inhk
飞算 JavaAI 使用体验全解析

飞算 JavaAI 使用体验全解析

博客目录 * 一、前言与背景 * 二、什么是飞算 JavaAI? * 主要特点 * 三、安装与配置 * 1. 从 IDEA 插件市场安装 * 2. 离线安装 * 3. 配置与激活 * 四、核心功能与使用体验 * 1. 智能开发全流程引导 * (1) 需求分析 * (2) 接口设计 * (3) 表结构设计 * (4) 处理逻辑梳理 * (5) 源码生成与合并 * 2. 其他实用功能 * (1) Java Chat * (2) 智能问答 * (3) SQL Chat * 五、与主流 AI 编程助手对比 * 六、个人体验与建议 * 建议 一、前言与背景

By Ne0inhk