springboot項目中整合高德地圖

一:高德開放平臺的使用

????????高德開放平臺 | 高德地圖API?

???????注冊高德地圖賬號

? ? ? ? 認證填寫個人信息:?

????????認證方式選擇“個人認證開發者”即可,然后完善信息

?????????認證成功之后,再次進入控制臺,創建關于地圖的應用

????????

? ? ? ? 創建Key(yml文件需要使用):

????????

????????

????????以上步驟便可以完成高德地圖的申請和key的創建。


開始Springboot的創建(就不從0到一的創建了)


二:創建數據庫(我是用的是MySQL)

? ? ? ? 建表語句:

CREATE TABLE `location_record` (`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',`ip` VARCHAR(50) DEFAULT NULL COMMENT '客戶端IP地址',`longitude` DOUBLE(10,6) NOT NULL COMMENT '經度坐標,精確到小數點后6位',`latitude` DOUBLE(10,6) NOT NULL COMMENT '緯度坐標,精確到小數點后6位',`address` VARCHAR(255) DEFAULT NULL COMMENT '詳細地址信息',`formatted_address` VARCHAR(255) DEFAULT NULL COMMENT '格式化后的完整地址',`city` VARCHAR(100) DEFAULT NULL COMMENT '所在城市名稱',`province` VARCHAR(100) DEFAULT NULL COMMENT '所在省份名稱',`district` VARCHAR(100) DEFAULT NULL COMMENT '新增:所在區縣名稱',`street` VARCHAR(100) DEFAULT NULL COMMENT '新增:街道信息',`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '記錄創建時間',`update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '記錄更新時間',PRIMARY KEY (`id`),KEY `idx_location` (`longitude`,`latitude`),KEY `idx_create_time` (`create_time`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='地理位置信息記錄表';

? ? ? ? 表中樣式:


三:Springboot所需的依賴(根據你的需求再去增加刪除依賴)

dependencies><!-- FastJSON --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.76</version></dependency><!-- OkHttp --><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.12.0</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version> 1.2.23</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.6</version></dependency><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.6.13</version></dependency><!-- Apache HttpClient --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version></dependency><!-- Spring Boot Configuration Processor --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><version>2.6.13</version><optional>true</optional></dependency><!-- Lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.26</version></dependency>
</dependencies>

四:yml文件的配置

server:port: 8096spring:amap:key: "你的高德地圖key值"version: 2.0geocode-url: https://restapi.amap.com/v3/geocode/geoip-url: https://restapi.amap.com/v3/ipregeo-url: https://restapi.amap.com/v3/geocode/regeodatasource: # 數據源配置driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/你所建表對應的數據庫?serverTimezone=Asia/Shanghai&useSSL=falseusername: rootpassword: roottype: com.alibaba.druid.pool.DruidDataSource# mybatis-plus配置,也可以不加,只是為了顯示SQL,Springboot都自動配置好了
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

五:所需要的類

????????

?AmapConfig:

package com.qfedu.config;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;@Data
@Configuration
@ConfigurationProperties(prefix = "spring.amap")
public class AmapConfig {private String key;                   // 對應配置中的 keyprivate String securityJsCode;        // 對應 security-js-codeprivate String version = "2.0";       // 默認版本號private String geocodeUrl;            // 對應 geocode.urlprivate String ipUrl;                 // 對應 ip.urlprivate String regeoUrl;              // 對應 regeo.url
}

WebMvcConfig(因為我的項目中配置了攔截器,所以需要這樣一個類):

package com.qfedu.config;import com.qfedu.common.core.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebMvcConfig implements WebMvcConfigurer {@Beanpublic LoginInterceptor loginInterceptor() {return new LoginInterceptor();}@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor()).addPathPatterns("/**").excludePathPatterns("/api/amap/**","/api/location/**"  // 新增排除location相關路徑);}
}

HttpUtils:

package com.qfedu.utils;import com.sun.deploy.net.URLEncoder;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;import java.io.IOException;
import java.nio.charset.StandardCharsets;public class HttpUtil {public static String doGet(String url) throws IOException {if (url == null || url.trim().isEmpty()) {throw new IllegalArgumentException("URL不能為空");}CloseableHttpClient httpClient = HttpClients.createDefault();HttpGet httpGet = new HttpGet(url);// 設置請求頭httpGet.setHeader("Accept", "application/json");httpGet.setHeader("Content-Type", "application/json");try (CloseableHttpResponse response = httpClient.execute(httpGet)) {int statusCode = response.getStatusLine().getStatusCode();if (statusCode != 200) {throw new IOException("HTTP請求失敗,狀態碼: " + statusCode + ", URL: " + url);}HttpEntity entity = response.getEntity();if (entity == null) {throw new IOException("響應體為空");}return EntityUtils.toString(entity, StandardCharsets.UTF_8);} finally {httpClient.close();}}public static String encodeUrlParam(String param) {try {return URLEncoder.encode(param, StandardCharsets.UTF_8.name());} catch (Exception e) {return param;}}
}

返回值R類:(我的R類沒有使用泛型)

package com.qfedu.common.core.common;public class R {/*** code,指狀態碼,* 隨意定,20000 是正確,40000 錯誤* 50000 請求超時* 60000 沒有權限* msg,指信息描述* data,返回的數據*/private int code;private String msg;private Object data;public static R ok() {R r = new R();r.setCode(200);r.setMsg("成功");return r;}public static R ok(Object data) {R r = new R();r.setCode(200);r.setMsg("成功");r.setData(data);return r;}public static R fail() {R r = new R();r.setCode(500);r.setMsg("失敗");return r;}public static R fail(String msg) {R r = new R();r.setCode(500);r.setMsg(msg);return r;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}}

免登錄自定義注解:

package com.qfedu.common.core.annotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/*** 以夢為馬,以汗為泉,不忘初心,不負韶華** @author ${上官簫宇}* @version 1.0* @data 2025/6/3 16:08*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)//注解運行時生效
public @interface NoLogin {
}

攔截器:

package com.qfedu.common.core.interceptor;import com.qfedu.common.core.annotation.NoLogin;
import com.qfedu.common.core.constants.CommonConstants;
import com.qfedu.common.core.utils.JwtUtils;
import com.qfedu.common.core.utils.UserUtils;
import io.jsonwebtoken.Claims;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;/*** ---Do First---** @author:wellseasun* @date:2025/5/22 下午 8:30* @desc:*/
public class LoginInterceptor implements HandlerInterceptor {// preHandle:執行時機:訪問接口前@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {// handler表示處理某個請求的處理器對象,// 如果是類級別的攔截器,則handler為類對象,如果是方法級別的攔截器,則handler為方法對象if (handler instanceof HandlerMethod) {HandlerMethod handlerMethod = (HandlerMethod) handler;Method method = handlerMethod.getMethod();boolean annotationPresent = method.isAnnotationPresent(NoLogin.class);if (annotationPresent) {// 如果使用了注解,直接放行return true;} else {// 沒有使用注解,需要從請求頭中獲取名為LOGIN_TOKEN的tokenString token = request.getHeader(CommonConstants.LOGIN_TOKEN);if (token == null || token.isEmpty()) {throw new RuntimeException("請重新登錄");}try {JwtUtils jwtUtils = new JwtUtils();Claims claims = jwtUtils.parseJWT(token);UserUtils.setUid((Integer) claims.get("uid"));} catch (Exception e) {throw e;}}}return true;}}

沒錯,下面就是層級關系:

mapper:

package com.qfedu.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qfedu.common.core.entity.LocationRecord;public interface LocationRecordMapper extends BaseMapper<LocationRecord> {
}

service:

package com.qfedu.service;import com.alibaba.fastjson.JSONObject;
import com.qfedu.common.core.entity.LocationRecord;public interface AmapService {/*** IP定位* @param ip IP地址* @return 定位結果*/JSONObject ipLocation(String ip);/*** 逆地理編碼* @param longitude 經度* @param latitude 緯度* @return 地址信息*/JSONObject regeoLocation(Double longitude, Double latitude);/*** 地理編碼* @param address 地址* @return 經緯度信息*/JSONObject geoLocation(String address);/*** 保存定位記錄* @param record 定位記錄* @return 是否成功*/boolean saveLocationRecord(LocationRecord record);
}

service實現類:

package com.qfedu.service.impl;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qfedu.common.core.entity.LocationRecord;
import com.qfedu.config.AmapConfig;
import com.qfedu.mapper.LocationRecordMapper;
import com.qfedu.service.AmapService;
import com.qfedu.utils.HttpUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;import javax.annotation.PostConstruct;/*** 高德地圖服務實現類* 提供IP定位、地理編碼、逆地理編碼等核心功能*/
@Service
public class AmapServiceImpl extends ServiceImpl<LocationRecordMapper, LocationRecord>implements AmapService {private static final Logger logger = LoggerFactory.getLogger(AmapServiceImpl.class);@Autowiredprivate AmapConfig amapConfig; // 高德配置參數(key/url等)/*** 初始化時打印配置信息(調試用)*/@PostConstructpublic void init() {logger.info("高德地圖配置加載: key={}, ipUrl={}, geoUrl={}, regeoUrl={}",amapConfig.getKey(),amapConfig.getIpUrl(),amapConfig.getGeocodeUrl(),amapConfig.getRegeoUrl());}// ==================== 核心服務方法 ====================/*** IP定位服務* @param ip 需要查詢的IP地址* @return 包含定位結果的JSON對象(status=1成功,0失敗)*/@Overridepublic JSONObject ipLocation(String ip) {// 參數校驗if (!StringUtils.hasText(ip)) {return createErrorResponse("IP地址不能為空");}try {// 配置校驗validateConfig(amapConfig.getKey(), amapConfig.getIpUrl());// 構建請求URL(示例:https://restapi.amap.com/v3/ip?key=xxx&ip=8.8.8.8)String url = String.format("%s?key=%s&ip=%s",amapConfig.getIpUrl().trim(),amapConfig.getKey().trim(),HttpUtil.encodeUrlParam(ip));validateUrl(url); // URL格式校驗logger.info("請求高德IP定位API: {}", url);// 發送HTTP請求并解析響應String response = HttpUtil.doGet(url);logger.debug("高德IP定位API響應: {}", response);return parseResponse(response);} catch (Exception e) {logger.error("IP定位失敗, IP: " + ip, e);return createErrorResponse("IP定位失敗: " + e.getMessage());}}/*** 逆地理編碼服務(坐標→地址)* @param longitude 經度* @param latitude 緯度* @return 包含地址信息的JSON響應*/@Overridepublic JSONObject regeoLocation(Double longitude, Double latitude) {if (longitude == null || latitude == null) {return createErrorResponse("經緯度不能為空");}try {validateConfig(amapConfig.getKey(), null); // 僅校驗Key// 構建請求URL(示例:https://restapi.amap.com/v3/geocode/regeo?key=xxx&location=116.4,39.9)String location = longitude + "," + latitude;String url = String.format("%s?key=%s&location=%s",amapConfig.getRegeoUrl(),amapConfig.getKey(),HttpUtil.encodeUrlParam(location));logger.debug("請求高德逆地理編碼API: {}", url);String response = HttpUtil.doGet(url);logger.debug("高德逆地理編碼API響應: {}", response);return parseResponse(response);} catch (Exception e) {logger.error("逆地理編碼失敗, 位置: " + longitude + "," + latitude, e);return createErrorResponse("逆地理編碼失敗: " + getErrorMessage(e));}}/*** 地理編碼服務(地址→坐標)* @param address 結構化地址(如"北京市海淀區中關村大街1號")* @return 包含經緯度的JSON響應*/@Overridepublic JSONObject geoLocation(String address) {if (!StringUtils.hasText(address)) {return createErrorResponse("地址不能為空");}try {validateConfig(amapConfig.getKey(), null); // 僅校驗Key// 構建請求URL(示例:https://restapi.amap.com/v3/geocode/geo?key=xxx&address=北京)String url = String.format("%s?key=%s&address=%s",amapConfig.getGeocodeUrl(),amapConfig.getKey(),HttpUtil.encodeUrlParam(address));logger.debug("請求高德地理編碼API: {}", url);String response = HttpUtil.doGet(url);logger.debug("高德地理編碼API響應: {}", response);return parseResponse(response);} catch (Exception e) {logger.error("地理編碼失敗, 地址: " + address, e);return createErrorResponse("地理編碼失敗: " + getErrorMessage(e));}}/*** 保存定位記錄到數據庫* @param record 定位記錄實體* @return 是否保存成功*/@Overridepublic boolean saveLocationRecord(LocationRecord record) {try {return this.save(record); // 調用MyBatis-Plus的save方法} catch (Exception e) {logger.error("保存定位記錄失敗", e);return false;}}// ==================== 內部工具方法 ====================/*** 校驗高德配置參數* @param key 高德API Key* @param url 需要校驗的API地址(可選)* @throws IllegalStateException 當配置不合法時拋出*/private void validateConfig(String key, String url) {if (amapConfig == null || !StringUtils.hasText(key)) {throw new IllegalStateException("高德地圖配置未正確初始化");}if (url != null && !StringUtils.hasText(url)) {throw new IllegalStateException("高德API地址未配置");}}/*** 校驗URL合法性* @param url 待校驗的URL* @throws IllegalArgumentException 當URL非法時拋出*/private void validateUrl(String url) {if (!url.startsWith("http")) {throw new IllegalArgumentException("無效的API URL: " + url);}}/*** 解析高德API響應* @param response 原始JSON字符串* @return 解析后的JSONObject*/private JSONObject parseResponse(String response) {if (!StringUtils.hasText(response)) {return createErrorResponse("空響應");}try {JSONObject result = JSON.parseObject(response);return result != null ? result : createErrorResponse("響應解析失敗");} catch (Exception e) {logger.error("解析高德API響應失敗", e);return createErrorResponse("響應解析失敗: " + e.getMessage());}}/*** 創建錯誤響應* @param message 錯誤信息* @return 標準化錯誤JSON(status=0)*/private JSONObject createErrorResponse(String message) {JSONObject result = new JSONObject();result.put("status", "0"); // 高德標準錯誤碼result.put("info", message);return result;}/*** 提取異常信息(避免null)*/private String getErrorMessage(Exception e) {return e.getMessage() != null ? e.getMessage() : "未知錯誤";}
}

controller:

package com.qfedu.controller;import com.alibaba.fastjson.JSONObject;
import com.qfedu.common.core.annotation.NoLogin;
import com.qfedu.common.core.common.R;
import com.qfedu.common.core.entity.LocationRecord;
import com.qfedu.service.AmapService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.Date;/*** 高德地圖定位服務控制器* 提供IP定位、逆地理編碼、地理編碼三大核心功能*/
@RestController
@RequestMapping("/api/location")
public class LocationController {@Autowiredprivate AmapService amapService; // 高德地圖服務接口/*** IP定位接口* @param ip 需要定位的IP地址(如8.8.8.8)* @return 標準化響應R<JSONObject>,包含定位結果或錯誤信息*/@GetMapping("/ip")@NoLoginpublic R locateByIp(@RequestParam String ip) {// 調用高德IP定位服務JSONObject result = amapService.ipLocation(ip);// 校驗高德API返回狀態碼(1=成功)if (result != null && "1".equals(result.getString("status"))) {saveLocationRecord(ip, result); // 持久化定位記錄return R.ok(result); // 返回成功響應}// 失敗時返回錯誤信息(優先使用高德返回的info字段)return R.fail(result != null ? result.getString("info") : "IP定位服務不可用");}/*** 逆地理編碼接口(坐標→地址)* @param longitude 經度(如116.404)* @param latitude 緯度(如39.915)* @return 包含地址信息的標準化響應*/@GetMapping("/regeo")@NoLoginpublic R regeo(@RequestParam Double longitude,@RequestParam Double latitude) {JSONObject result = amapService.regeoLocation(longitude, latitude);if (result != null && "1".equals(result.getString("status"))) {saveLocationRecord(null, longitude, latitude, result); // IP傳nullreturn R.ok(result);}return R.fail(result != null ? result.getString("info") : "逆地理編碼服務不可用");}/*** 地理編碼接口(地址→坐標)* @param address 結構化地址(如"北京市海淀區中關村大街1號")* @return 包含經緯度的標準化響應*/@GetMapping("/geo")@NoLoginpublic R geo(@RequestParam String address) {JSONObject result = amapService.geoLocation(address);if (result != null && "1".equals(result.getString("status"))) {return R.ok(result); // 地理編碼不保存記錄}return R.fail(result != null ? result.getString("info") : "地理編碼服務不可用");}// 內部工具方法/*** 從IP定位結果提取經緯度并保存記錄* @param ip IP地址* @param result 高德API返回的完整結果*/private void saveLocationRecord(String ip, JSONObject result) {JSONObject locationObj = result.getJSONObject("location");if (locationObj != null) {saveLocationRecord(ip,locationObj.getDouble("lng"), // 經度字段locationObj.getDouble("lat"), // 緯度字段result);}}/*** 保存定位記錄到數據庫(核心方法)* @param ip 可能為null(當來源是逆地理編碼時)* @param longitude 經度(必填)* @param latitude 緯度(必填)* @param result 高德API原始結果(用于提取地址信息)*/private void saveLocationRecord(String ip,Double longitude,Double latitude,JSONObject result) {if (result == null) return;// 1. 構建定位記錄實體LocationRecord record = new LocationRecord();record.setIp(ip); // IP可能為nullrecord.setLongitude(longitude);record.setLatitude(latitude);// 2. 提取格式化地址(如"北京市海淀區中關村大街1號")String formattedAddress = result.getString("formatted_address");record.setAddress(formattedAddress);record.setFormattedAddress(formattedAddress);// 3. 提取結構化地址組件(省、市、區等)JSONObject addressComponent = result.getJSONObject("addressComponent");if (addressComponent != null) {record.setProvince(addressComponent.getString("province"));record.setCity(addressComponent.getString("city"));// 可擴展:district(區)、street(街道)等字段}// 4. 設置時間戳并保存record.setCreateTime(new Date());amapService.saveLocationRecord(record); // 調用MyBatis-Plus持久化}
}

下面就是啟動類:(首先不要忘記啟動類的掃描注解,還有就是本次用到的注解

@EnableConfigurationProperties({AmapConfig.class})// 啟用AmapConfig配置類)
package com.qfedu;import com.qfedu.config.AmapConfig;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;@SpringBootApplication
@MapperScan("com.qfedu.mapper")
@EnableConfigurationProperties({AmapConfig.class})// 啟用AmapConfig配置類public class MicroServeAmapApplication {public static void main(String[] args) {SpringApplication.run(MicroServeAmapApplication.class, args);}}

寫一個簡單的頁面展示吧,位置你們知道吧,我就不說詳細了

展示臺灣省地圖吧(中國一點都不能少)

下面就是展示的代碼,我只不過吧經緯度寫成死值了,

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>高德地圖展示測試:臺灣省臺北市地圖 - 臺北101</title><!-- 引入高德地圖JS API --><script src="https://webapi.amap.com/maps?v=2.0&key=你的高德地圖key"></script><style>#container {width: 100%;height: 600px;}</style>
</head>
<body>
<!-- 地圖容器 -->
<div id="container"></div><script>// 初始化地圖,中心點設為臺北市var map = new AMap.Map('container', {zoom: 14,          // 縮放級別center: [121.5654, 25.0330], // 臺北市坐標viewMode: '2D'     // 2D地圖});// 添加標記點(臺北101大樓)var marker = new AMap.Marker({position: [121.5654, 25.0330], // 臺北101坐標map: map});// 信息窗口內容var infoWindow = new AMap.InfoWindow({content: '<div style="padding:5px;">臺北101大樓</div>',offset: new AMap.Pixel(0, -30)});infoWindow.open(map, marker.getPosition());
</script>
</body>
</html>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84835.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84835.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84835.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鴻蒙開發-視頻學習及實用中的一些小結

1.extend 和 styles extend是在styles基礎上進行了升級 使用的時候extend是全局的。 styles不加function 局部 加了就是全局。 2.builder 中要引用comp組件 需要在外層嵌套布局 3.ability之間的跳轉 want需要加&#xff1b; 4. as 類型斷言 &#xff01;跟在xxx! 表示…

網盤直鏈解析網頁版

不支持百度網盤、阿里網盤。 123&#xff0c;藍奏云&#xff0c;可道云什么的都可以 源碼下載地址&#xff1a;https://www.123865.com/s/X91lVv-3l90v

AXI4-Stream Clock Converter IP

一、參考說明 1.沒有專門對AXI4-Stream Clock Converter IP說明的文檔&#xff1b; 2.可以參考PG085文檔&#xff1b; 3.可以參考PG035文檔&#xff1b; 二、IP的作用 1.用于stream數據流再不同的時鐘域之間的可靠性傳輸&#xff1b; 2.支持跨時鐘域的場景&#xff1b; 3.內部…

NineData 社區版 V4.2.0 發布!新增MySQL與PostgreSQL互相遷移,SQL管理Milvus,安裝更高效

NineData 社區版 V4.2.0 正式發布&#xff01;本次更新通過鏡像輕量化部署、新增 3 條遷移鏈路、新增支持 Milvus 向量數據庫等核心升級&#xff0c;輕松實現數據庫遷移容災、實時數據集成分析、AI 向量數據管理等場景需求。社區版支持本地離線部署&#xff0c;嚴格保障數據隱私…

如何安裝使用qmt腳本跟單聚寬策略

登錄知識星球&#xff0c;下載獲取 解壓后&#xff0c;登錄大qmt&#xff0c;將策略導入其中&#xff0c; 然后修改參數&#xff1a; 點擊免密改參 totalcash&#xff1a;該策略使用資金總量 per&#xff1a;每只股票占比資金額 舉例&#xff0c;當前出信號&#xff0c;每只…

什么是MongoDB

目錄 主要特點 MongoDB概念解析 完整術語列表 MongoDB安裝 MongoDB Shell 安裝MongoDB Shell 數據庫管理 查看數據庫列表 創建數據庫 刪除數據庫 默認數據庫 系統內置數據庫 集合管理 查看集合 創建集合 更新集合名 刪除集合 文檔操作 插入文檔 查詢文檔 …

【Docker基礎】Docker核心概念:容器(Container)與鏡像(Image)的區別與聯系

目錄 引言 1 Docker鏡像&#xff08;Image&#xff09; 1.1 鏡像的定義 1.2 鏡像的特點 1.3 鏡像的創建 1.4 鏡像的結構 1.5 鏡像結構描述 2 Docker容器&#xff08;Container&#xff09; 2.1 容器的定義 2.2 容器的特點 2.3 容器的創建與運行 2.4 容器的生命周期…

從零到一:構建企業級 Vue.js 3 組件庫

前言&#xff1a;為何要構建組件庫&#xff1f; 在現代前端工程化體系中&#xff0c;組件庫已不再是大型團隊的專屬。它是一個團隊設計規范、開發模式和技術沉淀的核心載體。構建一個組件庫&#xff0c;能夠帶來諸多優勢&#xff1a; 提升效率&#xff1a;提供可復用的高質量…

【2025 CVPR-Backbone】Building Vision Models upon Heat Conduction

摘要 利用注意力機制的視覺表示模型在追求大感受野時面臨著巨大的計算開銷。在本研究中&#xff0c;我們通過引入基于物理熱傳導原理的熱傳導算子&#xff08;Heat Conduction Operator, HCO&#xff09;來緩解這一挑戰這么高級咩(⊙o⊙)&#xff01;。HCO將圖像塊視為熱源&am…

Rust編寫Shop管理系統

Rust編寫Shop管理系統 Actix Web 是一個功能強大、實用且速度極快的 Rust Web 框架。編寫Shop管理系統 HelloKeny 首先是先編寫最簡單的例子,類似hello World可以檢查環境 Actix Web 是一個功能強大、實用且速度極快的 Rust Web 框架。 命令 cargo new hellokenycd hell…

安寶特案例丨Vuzix AR智能眼鏡集成專業軟件,助力盧森堡醫院藥房轉型,贏得輝瑞創新獎

在Vuzix M400 AR智能眼鏡的助力下&#xff0c;盧森堡羅伯特舒曼醫院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;憑借在無菌制劑生產流程中引入增強現實技術&#xff08;AR&#xff09;創新項目&#xff0c;榮獲了2024年6月7日由盧森堡醫院藥劑師協會&#xff0…

快速冪算法詳解:從暴力到優雅的數學優化

文章目錄 一、樸素冪運算的問題二、快速冪的數學原理三、快速冪的遞歸實現四、快速冪的迭代實現五、模運算下的快速冪六、快速冪的應用場景七、總結 快速冪是一種高效計算冪運算的算法&#xff0c;能夠將時間復雜度從樸素的 O (n) 降低到 O (log n)。本文將深入探討快速冪的原理…

HTML+CSS 動態菜單和登錄框

摘要 實現了一個現代化的登錄/注冊界面&#xff0c;包含導航欄和彈窗表單。 HTML結構采用了響應式設計&#xff0c;包含Logo、導航鏈接和登錄按鈕。 CSS樣式實現了背景圖片、導航欄懸浮效果和表單美化&#xff0c;使用偽元素實現鏈接下劃線動畫。 JavaScript實現了彈窗切換…

抖音AI數字人對口型軟件LatentSync最新版整合包,音頻驅動口型講話

本次和大家分享一個字節跳動開發的強大的音頻驅動口型數字人視頻制作軟件LatentSync&#xff0c;我以前也分享過不少類似軟件了&#xff0c;比如&#xff1a;EchoMimic、VideoReTalking、hallo。字節的推出的這個效果稍微更好一點&#xff0c;我制作了最新版的一鍵啟動整合包。…

深入理解 PyTorch:從基礎到高級應用

在深度學習的浪潮中&#xff0c;PyTorch 憑借其簡潔易用、動態計算圖等特性&#xff0c;迅速成為眾多開發者和研究人員的首選框架。本文將深入探討 PyTorch 的核心概念、基礎操作以及高級應用&#xff0c;帶你全面了解這一強大的深度學習工具。? 一、PyTorch 簡介? PyTorch…

Java 中的 synchronized 與 Lock:深度對比、使用場景及高級用法

&#x1f4a1; 前言 在多線程并發編程中&#xff0c;線程安全問題始終是開發者需要重點關注的核心內容之一。Java 提供了多種機制來實現同步控制&#xff0c;其中最常用的兩種方式是&#xff1a; 使用 synchronized 關鍵字使用 java.util.concurrent.locks.Lock 接口&#xf…

Notepad++如何列選

在 Notepad 中&#xff0c;你可以通過 列模式&#xff08;Column Mode&#xff09; 進行垂直選擇文本&#xff08;列選&#xff09;&#xff0c;以下是具體操作方法&#xff1a; 方法 1&#xff1a;鍵盤 鼠標列選 按住 Alt 鍵&#xff08;或 Alt Shift&#xff09;。 按住鼠…

華為OD機考-水仙花數Ⅰ-邏輯分析(JAVA 2025B卷)

import java.util.*; public static Integer get(int count,int c){if(count<3||count>7){return -1;}//存儲每位數的最高位……最低位int[] arr new int[count];List<Integer> res new ArrayList<>();for(int i(int) Math.pow(10,count-1);i<(int) Math…

基于 STL+VMD 二次分解的 Informer-LSTM 并行預測模型詳解與案例

一、背景與動機 在時間序列預測中,如電力負荷、風速、交通流量等復雜數據常表現為: 非線性:趨勢+季節+突變+噪聲 多尺度:高頻擾動與低頻變化共存 長時依賴:遠期信息也影響當前預測 傳統模型(如 ARIMA、LSTM)往往無法兼顧全局趨勢建模與局部擾動感知,因此我們提出一種 …

【Linux Learning】SSH連線出現警告:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

問題&#xff1a;WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is al…