Java对接高德api搜索POI 2.0 关键字搜索

news2024/11/25 4:34:23

目录

一、注册账号 

二、搜索小demo

1.首先要引入依赖

2. 然后查看打印结果即可

三、搜索接口代码

1.引入依赖

2.yml配置

2.Controller

3.静态工具类

四、运行测试


一、注册账号 

高德开放平台 | 高德地图API

  1. 注册高德开发者;
  2. 去控制台创建应用;
  3. 获取Key;

具体教程可以看官方文档 创建应用和 Key-Web服务 API | 高德地图API,api文档也在链接里

二、搜索小demo

我这里用到的是关键字搜索,先写个小demo测试一下

1.首先要引入依赖

引入这个依赖主要是因为我们是通过HttpClient类来发送HTTP请求并获取响应的

<dependencies>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.13</version>
    </dependency>
</dependencies>

2. 然后查看打印结果即可

package cn.homed.aio.device.web;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class gaode {
    public static void main(String[] args) throws UnsupportedEncodingException {
        HttpClient client = HttpClients.createDefault();
        String apiUrl = "https://restapi.amap.com/v5/place/text";
        String apiKey = "这里填你申请的key";
        String searchTest = "天安门广场";
        HttpGet request = new HttpGet(apiUrl + "?key=" + apiKey + "&keywords=" + URLEncoder.encode(searchTest,"UTF-8"));

        try {
            HttpResponse response = client.execute(request);
            String responseBody = EntityUtils.toString(response.getEntity());
            System.out.println(responseBody);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

三、搜索接口代码

1.引入依赖

使用Fastjson的JSONObject类来解析HTTP响应的JSON格式数据。这样做的好处是可以方便地将HTTP响应中的JSON数据转换为Java对象

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.78</version>
</dependency>

2.yml配置

2.Controller

这里的入参keywords是关键字,region是搜索区划

package cn.homed.common.webchat;

import cn.homed.common.constant.CommonKey;
import cn.homed.common.entity.MsgBean;
import cn.homed.common.utils.StringUtil;
import com.alibaba.fastjson.JSONObject;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author hulongtao
 */
@Slf4j
@RestController
@Tag(name ="高德搜索", description = "高德搜索接口")
@RequestMapping("/api/amap/getAddressList")
public class AutonaviSearchController {

    @Value("${AMAP.apiKey}")
    private String apiKey;

    @Value("${AMAP.apiUrl}")
    private String apiUrl;

    @Operation(summary = "地址搜索", description = "通用搜索")
    @PostMapping(value = "")
    public MsgBean getAddressList(
            @RequestParam(value = "keywords") String keywords , @RequestParam(value = "region",required = false) String region
    ) {
        if (StringUtil.isNotNullOrEmpty(keywords)) {
            try {
                JSONObject addressListByKeywords = AMAPSearchUtils.getAddressListByKeywords(keywords, region,apiKey,apiUrl);
                if (CommonKey.CONSTANT_1.equals(addressListByKeywords.getString("status"))) {
                    return MsgBean.success(addressListByKeywords.getJSONArray("pois"),"搜索成功");
                }
                return MsgBean.failMsg("搜索异常");
            }catch (Exception e){
                log.error("搜索地址失败:{}",e.getMessage());
                return MsgBean.fail(CommonKey.FAIL);
            }
        }
        return MsgBean.success();
    }
}

3.静态工具类

这里的city_limit返回限制

package cn.homed.common.webchat;


import cn.homed.common.constant.ResultCode;
import cn.homed.common.exception.BizException;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

@Slf4j
public class AMAPSearchUtils {

    public static JSONObject getAddressListByKeywords(String keywords, String region,String apiKey,String apiUrl) {
        try {
            HttpClient client = HttpClients.createDefault();
            HttpGet request = new HttpGet(apiUrl + "?key=" + apiKey + "&keywords=" + URLEncoder.encode(keywords,"UTF-8") + "&city_limit=true&region=" + region);
            HttpResponse response = client.execute(request);
            String responseBody = EntityUtils.toString(response.getEntity());
            return JSONObject.parseObject(responseBody);
        } catch (UnsupportedEncodingException uee) {
            log.error("UnsupportedEncodingException 地址搜索失败:{}", uee.getMessage());
            throw new BizException(ResultCode.FAIL, uee.getMessage());
        }catch (IOException io) {
            log.error("IOException 地址搜索失败:{}", io.getMessage());
            throw new BizException(ResultCode.FAIL, io.getMessage());
        }
    }

}

四、运行测试

可以看到,数据也是正常的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1634653.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 ArcGIS 对洪水预测进行建模

第一步 — 下载数据 所有数据均已包含在 Esri 提供的项目压缩文件中。我将创建一个名为“Stowe_Hydrology.gdb”的新地理数据库,在其中保存这些数据以及创建的所有后续图层。 1-0。斯托市边界 斯托城市边界是佛蒙特州地理信息中心提供的矢量要素类面。我将这一层称为“Stow…

【Leetcode每日一题】 综合练习 - 找出所有子集的异或总和再求和(难度⭐)(68)

1. 题目解析 题目链接&#xff1a;1863. 找出所有子集的异或总和再求和 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 算法思路与实现 为了求解给定整数数组的所有子集并将其异或和相加&#xff0c;我们可以采用递…

速成python

一个只会c的苦手来总结一下py的语法。没有其他语法基础的不建议看 1. 输入输出 print自带换行&#xff0c;可以写print("Hi", end"")取消换行 a input(你好:) # 默认是str print(type(a)) # 输出a的类型 a int(input()) # 或者a int(a) print(type(…

大气污染扩散模型Calpuff技术应用

目前&#xff0c;大气污染仍为我国亟待解决的环境问题。为了弄清大气污染物排放后对周围环境的影响&#xff0c;需要了解污染物的扩散规律。Calpuff模型是一种三维非稳态拉格朗日扩散模型&#xff0c;可有效地处理非稳态&#xff08;如&#xff0c;熏烟、环流、地形和海岸等&am…

UE C++ 链表

目录 概要单链表双向链表头插入尾插入中间插入删除查找 小结 概要 链表 简单说明&#xff0c;链表有单链表&#xff0c;双向链表&#xff0c;循环链表(本篇文章以UE c代码说明)。链表的操作&#xff0c;插入&#xff0c;删除&#xff0c;查找。插入&#xff0c;删除效率高&…

【Redis | 第十篇】Redis与MySQL保证数据一致性(两种解决思路)

文章目录 10.Redis和MySQL如何保证数据一致性10.1双写一致性问题10.2数据高度一致性10.3数据同步允许延时10.3.1中间件通知10.3.2延迟双删 10.Redis和MySQL如何保证数据一致性 10.1双写一致性问题 Redis作为缓存&#xff0c;它是如何与MySQL的数据保持同步的呢&#xff1f;特…

泽攸科技无掩膜光刻机在MEMS压力传感器制造中的应用

在当今的科技快速发展时代&#xff0c;微电子机械系统&#xff08;MEMS&#xff09;技术已成为推动现代传感器技术革新的关键力量。MEMS压力传感器&#xff0c;作为其中的重要分支&#xff0c;广泛应用于生物医学、航空航天、汽车工业等多个领域。随着对传感器性能要求的不断提…

网络工程专业考研的方向有哪些?

前言 网络工程专业的学生在考研时可选择的专业或方向包括&#xff1a;物联网、计算机网络技术、信息安全、信息与通信工程等。 1&#xff09;物联网&#xff1a;“物联网就是物物相连的互联网”&#xff0c;有两层意思&#xff1a;第一&#xff0c;物联网的核心和基础仍然是互…

【C++干货基地】探索C++模板的魅力:如何构建高性能、灵活且通用的代码库(文末送书)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…

2024.4.23 LoadRunner 测试工具详解 —— VUG

目录 引言 LoadRunner 三大组件之间的关系 LoadRunner 脚本录制 启动并访问 WebTours 脚本录制 编译 运行&#xff08;回放&#xff09; LoadRunner 脚本加强 事务插入 插入集合点 插入检查点 参数化 ​编辑 打印日志 引言 问题&#xff1a; 此处为啥选择使用 Lo…

算法设计与分析4.1 迷宫问题 栈与队列解法、打印矩阵、三壶问题、蛮力匹配

1.ROSE矩阵 实现&#xff1a; 使用算法2 分析&#xff1a; 每半圈元素值的增长规律变换一次 设增量为t&#xff0c;每半圈变换一次t <— -t . 设矩阵边长为i&#xff0c;每半圈的元素个数是2*(i-1)个&#xff0c;hc为记数变量&#xff0c;则1≤hc<2i-1&#xff0c;前1/…

海外仓的精细化运营:现状、建议和落地操作指南

在跨境电商飞速发展的今天&#xff0c;海外仓运营模式是否足够精细化&#xff0c;是海外仓企业能否赢得竞争的关键。除了单纯的提升仓储能力之外&#xff0c;还需要关注效率的提升、技术革新和管理战略的升级。 从数据上看&#xff0c;大部分海外仓在精细化管理道路上面临的主要…

Spring AOP详解,简单Demo

目录 一、Spring AOP 是什么&#xff1f; 二、学习AOP 有什么作用&#xff1f; 三、AOP 的组成 四、 Spring AOP 简单demo 一、Spring AOP 是什么&#xff1f; Spring AOP&#xff08;Aspect-Oriented Programming in Spring&#xff09;是Spring框架中的一个重要组件&…

preg_match详解(反向引用和捕获组)

在讲preg_match函数之前&#xff0c;我们先了解一下什么是php可变变量 php可变变量 在PHP中双引号包裹的字符串中可以解析变量&#xff0c;而单引号则不行 也就是在php中&#xff0c;双引号里面如果包含有变量&#xff0c;php解释器会将其替换为变量解释后的结果&#xff1b…

基于 SpringCloud 的在线交易平台乐优商城的设计与实现(三)

基于 SpringCloud 的在线交易平台乐优商城的设计与实现 第3章 系统分析与设计3.1 系统基本功能描述3.2 可行性分析3.3 系统需求分析3.3.1 商家功能3.3.2 消费者功能&#xff1a;3.3.3 系统功能要求3.3.4 系统运行环境 3.4 系统开发工具3.4.1 IntellijIDEA3.4.2 Mysql3.4.3 Mave…

C/C++ 入门(9)编译链接

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;C 目录 一、域 1、分类 2、搜索顺序 二、编译链接 1、代码在形成可执行文件的过程 2、符号表 三、问题 1、带有缺省参数的函数声明和定义分离 一、域 1、分类 域&#xff1a;全局域、局部域、命…

第12章 消息服务

第12章 消息服务 12.1 JMS1. 简介2. ActiveMQ安装Linux安装命令 3. 整合SpringBoot ****************************************************** 12.1 JMS 1. 简介 2. ActiveMQ安装 Linux安装命令 //下载 wget http://mirrors.hust.edu.cn/apache/activemq/5.15.16/apache-acti…

JAVA系列 小白入门参考资料 类和对象(2)

目录 小引 1. this this引用 this的特性 this的使用 2. 对象的构造及初始化 如何初始化对象 构造方法 利用构造方法初始化对象的三种方式 方式一 方式二 方式三 直接初始化 小引 上一篇文章我们讨论到 如果创立类和对象&#xff0c;并且如何实例化对象和怎样…

Vue+Element UI el-progress进度条内显示自定义数字及文字

需求 进度条内展示 具体的数字值&#xff0c;进度条外展示 百分比数值 数据 data() {return {reNum: 3214,rePer:40,warmPer: 40,warmNum:2132,}}因为样式要求&#xff0c;显示的百分数也是自己写的哈 &#xff0c;没有用进度条自带的 代码 <div class"pick"&g…

Java学习3:程序流程控制

Java程序流程控制 1.执行顺序 顺序结构分支顺序 if,switch 循环结构 for ,while ,do-while 2.if分支 三种形式 if(条件表达式){} else if(){} else{}3.switch分支 string week "周一"; switch(week){case "周一":stem.out.println("周一&qu…