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

Java 集成高德开放平台 WebAPI 实现 POI 搜索实践

介绍如何在 Java 项目中集成高德开放平台 WebAPI,重点演示 POI 搜索功能。内容包括获取 API Key、使用 Uniapi 库定义接口、构建 HTTP 请求及解析返回数据。文中详细列出了关键字搜索的参数说明与响应结构,并提供了业务调用示例代码及安全建议,帮助开发者快速实现地理位置检索服务。

ApiHolic发布于 2026/4/6更新于 2026/10/24101 浏览
Java 集成高德开放平台 WebAPI 实现 POI 搜索实践

Java 集成高德开放平台 WebAPI 实现 POI 搜索实践

前言

在数字化时代,地理信息系统(GIS)和位置服务(LBS)已成为许多应用程序的核心组成部分。高德开放平台作为国内领先的地理信息服务提供商,提供了丰富的 WebAPI 接口,帮助开发者快速集成地图、导航、搜索等功能。其中,POI(Point of Interest)搜索是许多应用场景中的关键功能,它能够帮助用户快速找到附近的兴趣点,如餐馆、酒店、加油站等。

Java 作为一种广泛使用的编程语言,因其跨平台性、稳定性和丰富的生态系统,成为许多企业级应用的首选开发语言。将 Java 与高德开放平台的 WebAPI 进行集成,不仅可以充分利用 Java 的强大功能,还能快速实现复杂的地理信息服务。本文将以搜索 POI2.0 为例,详细介绍如何在 Java 项目中集成高德开放平台的 WebAPI,并实现高效的 POI 搜索功能。示例将涵盖从 API 密钥的获取、HTTP 请求的发送、数据的解析到最终结果的展示等完整流程。

一、高德搜索 API 简介

1、高德开放平台

高德开放平台提供了丰富的产品介绍,包括地图、定位、导航等 API 的概述。开发者需在高德平台申请个人账号,并获取对接所需的 Key。

2、搜索功能介绍

平台的 POI 搜索 API 提供了多种搜索方式,包括关键字搜索、周边搜索、多边形搜索等。

  • 关键字搜索:开发者可通过文本关键字搜索地点信息,文本可以是结构化地址,例如:北京市朝阳区望京阜荣街 10 号;也可以是 POI 名称,例如:首开广场。
  • 周边搜索:开发者可设置圆心和半径,搜索圆形区域内的地点信息。
  • 多边形区域搜索:开发者可设置首尾连接的几何点组成多边形区域,搜索坐标对应多边形内的地点信息。
  • ID 搜索:开发者可通过已知的地点 ID(POI ID)搜索对应地点信息,建议结合输入提示接口使用。

通过这些 API,开发者可以根据用户的需求,灵活地获取所需的 POI 信息。POI 搜索 2.0 版本在原有功能的基础上,进一步优化了搜索算法,提升了搜索结果的准确性和响应速度。同时,API 还支持多种数据格式的返回,如 JSON、XML 等,方便开发者根据项目需求进行数据解析和处理。

3、部分 API 介绍

关于开放平台接口的 API 介绍,官方有详细的说明,这里我们以按关键字搜索为例子,详细介绍它的请求参数以及响应参数信息。

关键字搜索 API 服务地址

URL请求方式
https://restapi.amap.com/v5/place/text?parametersGET

parameters 代表的参数包括必填参数和可选参数。所有参数均使用和号字符 (&) 进行分隔。下面的列表枚举了这些参数及其使用规则。

请求参数

参数名含义规则说明是否必须缺省值
key高德 Key用户在高德地图官网申请 Web 服务 API 类型 Key必填无
keywords地点关键字需要被检索的地点文本信息。只支持一个关键字,文本总长度不可超过 80 字符必填(keyword 或者 types 二选一必填)无
types指定地点类型地点文本搜索接口支持按照设定的 POI 类型限定地点搜索结果;地点类型与 poi typecode 是同类内容,可以传入多个 poi typecode,相互之间用''分隔可选(keyword 或者 types 二选一必填)
region搜索区划增加指定区域内数据召回权重,如需严格限制召回数据在区域内,请搭配使用 city_limit 参数,可输入 citycode,adcode,cityname可选无,默认全国范围内搜索
city_limit指定城市数据召回限制可选值:true/false
为 true 时,仅召回 region 对应区域内数据
可选false
show_fields返回结果控制show_fields 用来筛选 response 结果中可选字段。具体可指定返回的字段类请见下方返回结果说明中的'show_fields'内字段类型;多个字段间采用','进行分割;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 时有效可选无

返回结果

名称类型说明
statusstring本次 API 访问状态,如果成功返回 1,如果失败返回 0。
infostring访问状态值的说明,如果成功返回"ok",失败返回错误原因,具体见错误码说明。
infocodestring返回状态说明,10000 代表正确,详情参阅 info 状态表
countstring单次请求返回的实际 poi 点的个数
poisobject返回的 poi 完整集合

poi 对象包含以下字段:

字段类型说明
namestringpoi 名称
idstringpoi 唯一标识
locationstringpoi 经纬度
typestringpoi 所属类型
typecodestringpoi 分类编码
pnamestringpoi 所属省份
citynamestringpoi 所属城市
adnamestringpoi 所属区县
addressstringpoi 详细地址
pcodestringpoi 所属省份编码
adcodestringpoi 所属区域编码
citycodestringpoi 所属城市编码

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

字段类型说明
childrenobject设置后返回子 POI 信息
businessobject设置后返回 poi 商业信息
indoorobject设置后返回室内相关信息
naviobject设置后返回导航位置相关信息
photosobject设置后返回 poi 图片相关信息

二、Uniapi 集成高德 API

本节详细介绍如何在 Java 中使用 Uniapi 来集成高德 api 实现相关的检索服务。主要从以下三个部分进行介绍,第一是介绍 API 的集成流程;第二是介绍如何在 Uniapi 中定义接口;第三是介绍如何在业务中进行集成。

1、API 集成流程

在 Java 项目中集成高德开放平台的 WebAPI,通常需要以下几个步骤:首先,开发者需要在高德开放平台注册账号,并创建应用以获取 API 密钥(Key)。API 密钥是调用高德 API 的凭证,每个应用都有唯一的密钥。其次,开发者需要在 Java 项目中引入 HTTP 客户端库,用于发送 HTTP 请求并接收 API 的响应。常用的 HTTP 客户端库包括 Apache HttpClient、OkHttp、Uniapi 等,本文将以 Uniapi 为例重点介绍。接下来,开发者需要根据高德 API 的文档,构建符合要求的请求 URL,并处理 API 返回的数据。最后,开发者可以根据业务需求,对获取的 POI 数据进行进一步的处理和展示。关于如何在高德开放平台中申请账号并获取 APIkey,具体申请流程请参考官方文档。

2、访问接口的定义

这里介绍如何在 Uniapi 中创建访问 api,用来跟开放平台进行交互,uniapi 的操作比较简单,下面是示例代码:

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);

    @GetHttpInterface("/place/polygon")
    public HttpResponse<String> searchByPolygon(@QueryPar("polygon") String polygon,
                                                @QueryPar("keywords") String keywords,
                                                @QueryPar("types") String types,
                                                @QueryPar("page_size") String page_size,
                                                @QueryPar("page_num") String page_num,
                                                @QueryPar("show_fields") String show_fields,
                                                @QueryPar("key") String key);
}

在上面的例子中,创建了两个访问接口。第一个方法是根据关键字来调用检索,第二个方法是根据一个 polygon 范围来进行检索。上述接口中的参数说明已经在第一节中进行讲解。

3、业务调用集成

接下来讲解如何在 Java 当中调用 Uniapi 定义的接口,根据我们传入的参数来查询目标 POI。比如我们需要查询湖南省长沙市岳麓区(代码:430104)的餐饮服务(pot type:050000)的数据,每页数据返回的大小为 20 条数据。集成的访问代码如下:

package com.yelang.project.unihttp;
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.LinearRing;
import org.locationtech.jts.geom.Polygon;
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.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 = "申请的访问 key";
    @Autowired
    private AmapSearchService amapSearchService;

    /**
     * - 关键字搜索 API 服务地址
     * @throws InterruptedException
     */
    @Test
    public void searchByKeyWordOrTypies() throws InterruptedException {
        String keywords = "餐饮服务";
        String types = "050000";
        String page_size = "20";
        String region = "430104";
        String show_fields = "children,business,indoor,navi,photos";
        HttpResponse<String> result = null;
        for (int i = 1; i <= 1; i++) {
            result = amapSearchService.getSearch(keywords, types, region, page_size, String.valueOf(i), show_fields, AMAP_CLIENT_AK);
            System.out.println(result.getBodyResult());
            Thread.sleep(3000L); // 休眠 3 秒
        }
    }
}

运行程序后,可以在控制台中看到输出信息。如果返回成功,接口调用正常,我们可以将返回结果进行格式化展示。

三、常见问题与优化

在实际开发过程中,开发者可能会遇到一些常见问题,如 API 调用频率限制、数据解析错误、网络请求超时等。针对这些问题,开发者可以通过合理的代码设计和异常处理机制,确保系统的稳定性和可靠性。此外,高德开放平台还提供了详细的开发文档和技术支持,帮助开发者快速解决遇到的问题。

在实际项目开发过程中,需要注意相关 key 的保护问题。这里使用的明文保存的方式,在使用高德 API 时需要注意的安全性问题,如 API Key 的保护、数据传输的加密等。可以采用加密的方式对明文进行保存,在访问时进行解密即可。

四、总结

本文详细介绍了如何在 Java 项目中集成高德开放平台的 WebAPI,并实现高效的 POI 搜索功能。示例涵盖了从 API 密钥的获取、HTTP 请求的发送、数据的解析到最终结果的展示等完整流程。通过本文的学习,开发者将能够掌握 Java 与高德开放平台 WebAPI 集成的基本方法,并能够根据实际需求,灵活应用这些技术解决实际问题。

目录

  1. Java 集成高德开放平台 WebAPI 实现 POI 搜索实践
  2. 前言
  3. 一、高德搜索 API 简介
  4. 1、高德开放平台
  5. 2、搜索功能介绍
  6. 3、部分 API 介绍
  7. 二、Uniapi 集成高德 API
  8. 1、API 集成流程
  9. 2、访问接口的定义
  10. 3、业务调用集成
  11. 三、常见问题与优化
  12. 四、总结

更多推荐文章

查看全部
  • C++ 核心面试题总结:语法、内存与类特性详解
  • Android 离线应用核心组件解析:dev-summit-architecture-demo 架构
  • C++ 模板机制与 string 类实战指南
  • 3D 渲染路径详解:延时光照、正向渲染与顶点光照对比
  • AI 时代内存需求激增:能源、隐私与绿色技术深度解析
  • Web 可访问性最佳实践:构建包容的前端界面
  • 数据结构:归并排序与分治思想详解
  • C++ 核心语法解析:引用、内联函数与 nullptr
  • Python 虚拟环境搭建与 PyCharm 配置实战
  • AI 魔术师:基于视觉的增强现实特效
  • Linux 管道通信实战:匿名管道进程池与命名管道服务端模型
  • Stable Diffusion 镜像交付标准:Dockerfile 透明与构建可追溯
  • AI 大模型开发必备书籍推荐:从入门到实战
  • 深度视觉赋能足式机器人极限运动与跑酷技术解析
  • 基于多版本YOLO与SpringBoot的实时跌倒检测系统
  • Java 核心面试高频考点与解析
  • C++ STL 容器详解:map 与 set 原理及实战
  • C++与Linux基础:虚拟文件系统 VFS 详解
  • WebView 并发初始化竞争风险分析
  • Python Web UI 自动化测试:推送本地代码到 Git 远程仓库

相关免费在线工具

  • 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