Spring Boot 集成高德地圖電子圍欄

摘要:本文手把手教你通過 Spring Boot 調用高德地圖 API 實現電子圍欄功能,涵蓋云端圍欄創建設備位置監控本地算法校驗,附帶完整代碼和避坑經驗!


一、電子圍欄核心原理

1.1 什么是電子圍欄?

  • 虛擬地理邊界:在地圖上劃定區域(圓形/多邊形),觸發進出事件
  • 應用場景:員工考勤、物流圍欄、兒童安全區域監控
  • 技術核心:基于 GPS/北斗坐標的位置判斷(射線法或API調用)

1.2 高德地圖API能力

  • 云端圍欄管理:創建、刪除、查詢圍欄
  • 實時狀態檢測:設備進入/離開圍欄時觸發回調
  • 坐標系支持:GCJ-02(火星坐標系)

二、Spring Boot 集成高德API實戰

2.1 環境準備

(1)添加 Maven 依賴
<!-- Web 基礎依賴 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 高德API HTTP 客戶端 -->
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version>
</dependency>
(2)配置高德 Key

application.yml 中配置:

amap:key: your_amap_key  # 前往高德開放平臺申請geo-fence-url: https://restapi.amap.com/v4/geofence/meta

2.2 核心代碼實現

(1)高德API服務封裝
@Service
public class AmapGeoFenceService {@Value("${amap.key}")private String amapKey;/*** 創建電子圍欄(支持多邊形)* @param name 圍欄名稱* @param points 坐標點(格式:lng1_lat1,lng2_lat2,...)* @return 圍欄ID*/public String createGeoFence(String name, String points) {RestTemplate restTemplate = new RestTemplate();String url = String.format("%s?key=%s&name=%s&points=%s", geoFenceUrl, amapKey, URLEncoder.encode(name), points);ResponseEntity<String> response = restTemplate.postForEntity(url, null, String.class);// 解析返回結果獲取 fence_idJsonNode root = JsonUtils.parse(response.getBody());return root.get("data").get("fence_id").asText();}
}
(2)業務邏輯層
@Service
@RequiredArgsConstructor
public class GeoFenceService {private final AmapGeoFenceService amapService;private final GeoFenceRepository fenceRepository;/*** 創建圍欄并保存到數據庫*/@Transactionalpublic String createFence(GeoFenceDTO dto) {// 坐標點格式轉換String pointsStr = dto.getPoints().stream().map(p -> p.getLng() + "_" + p.getLat()).collect(Collectors.joining(","));// 調用高德APIString fenceId = amapService.createGeoFence(dto.getName(), pointsStr);// 保存到數據庫GeoFence fence = new GeoFence();fence.setFenceId(fenceId);fence.setName(dto.getName());fenceRepository.save(fence);return fenceId;}
}

2.3 實現效果演示

(1)創建圍欄 API 請求
POST /api/fences
Content-Type: application/json{"name": "公司安全區","points": [{"lng": 116.397504, "lat": 39.89619},{"lng": 116.407504, "lat": 39.89619},{"lng": 116.397504, "lat": 39.90619}]
}
(2)返回結果
{"fenceId": "1234567890"
}

三、避坑指南

3.1 常見問題排查

問題現象原因分析解決方案
API返回INVALID_USER_KEY高德Key未配置或錯誤檢查application.yml
圍欄未觸發通知設備未開啟定位權限引導用戶授權定位
坐標偏移嚴重坐標系不一致(如WGS-84)調用高德坐標轉換API

3.2 性能優化建議

  • 本地緩存:使用 Redis 緩存圍欄坐標數據,減少數據庫查詢
  • 批量校驗:多個設備位置通過高德 batch/status 接口批量查詢
  • 圍欄簡化:對多邊形頂點做道格拉斯-普克抽稀算法處理

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

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

相關文章

hadoop偽分布式搭建--啟動過程中如果發現某個datanode出現問題,如何處理?

一、問題定位&#xff1a; &#xff08;1&#xff09;檢查DataNode日志&#xff1a; DataNode日志通常位于$HADOOP_HOME/logs/或/var/log/hadoop-hdfs/目錄下&#xff0c;文件名為hadoop-hdfs-datanode-<hostname>.log。重點關注以下錯誤類型&#xff1a; ——Incompa…

微軟開源神器OmniParser V2.0 介紹

微軟開源的OmniParser V2.0是一款基于純視覺技術的GUI智能體解析工具&#xff0c;旨在將用戶界面&#xff08;UI&#xff09;截圖轉換為結構化數據&#xff0c;從而實現對計算機屏幕上的可交互元素的高效識別和操控。這一工具通過結合先進的視覺解析技術和大型語言模型&#xf…

DLMS電能表通訊協議學習筆記

本文是對于IEC62056協議族&#xff0c;即DLMS協議族的中文說明手冊。本文并沒有包含DLMS協議族的全部&#xff0c;但解釋了在應用中可能出現的大多數情況。本文的目的是為電能量數據采集終端提供與使用DLMS協議族的電能表通訊的協議說明。 本文參考文獻如下&#xff1a; &#…

browser_use 自動化瀏覽器agent使用案例

參考&#xff1a; https://github.com/browser-use/browser-use/tree/577e15c963f7e3c499aac312ecb8da6e1f4733fe 瀏覽器啟動后&#xff0c;頁面一直空白問題解決&#xff1a; https://github.com/browser-use/browser-use/issues/986 安裝&#xff1a; pip install browser…

【Go】無法訪問 proxy.golang.org 進行依賴下載

golang.org/x/net/context: golang.org/x/netv0.37.0: Get "https://proxy.golang.org/golang.org/x/net/v/v0.37.0.zip": dial tcp 142.251.215.241:443: connect: connection refused解決方案&#xff1a; 使用國內的 Go 代理&#xff0c;如 goproxy.cn 或 gopro…

RocketMQ 性能優化與調優策略(二)

實戰演練&#xff1a;全方位調優策略 &#xff08;一&#xff09;細致入微的配置優化 生產者配置&#xff1a; sendMsgTimeout&#xff1a;此參數定義了生產者發送消息時等待 Broker 返回確認的最長時間&#xff0c;默認值為 3000 毫秒。若在該時間段內未收到確認&#xff0c…

React前端開發中實現斷點續傳

在前端開發中&#xff0c;斷點續傳是指在上傳文件時&#xff0c;如果上傳過程中中斷&#xff08;如網絡斷開、頁面刷新等&#xff09;&#xff0c;可以從斷點處繼續上傳&#xff0c;而不是重新上傳整個文件。這種功能在大文件上傳場景中非常有用。 以下是實現斷點續傳的思路和具…

Spring 框架中常用注解和使用方法

Spring 框架中常用注解的詳細解釋與應用場景&#xff0c;結合核心功能和實際開發需求進行分類說明&#xff1a; 1.組件定義注解 1.1 Component 作用&#xff1a;通用注解&#xff0c;將普通 Java 類標記為 Spring 管理的 Bean&#xff0c;由容器實例化和管理&#xff0c;相當…

使用 PaddlePaddle 官方提供的 Docker 鏡像

CUDA版本高PaddlePaddle不支持時&#xff0c;可以使用 PaddlePaddle 官方提供的 Docker 鏡像 1. 安裝 Docker Desktop1.1 下載 Docker Desktop1.2 安裝 Docker Desktop1.3 啟用 WSL 2 或 Hyper-V1.4 啟動 Docker Desktop1.5 Docker不運行解決方法 2. 拉取 PaddlePaddle Docker …

VSCode C/C++ 環境搭建指南

VSCode C/C 環境搭建指南 第一步&#xff1a;下載并安裝VSCode 訪問官方網站 打開瀏覽器&#xff0c;訪問Visual Studio Code官網。 選擇平臺 根據您的操作系統&#xff08;Windows、Mac、Linux&#xff09;選擇對應的版本進行下載。 下載和安裝 下載完成后&#xff0c;雙擊…

項目中使用柯里化函數

在項目中使用**柯里化函數&#xff08;Currying&#xff09;**可以顯著提高代碼的靈活性、可復用性和可讀性。柯里化是一種將多參數函數轉換為一系列單參數函數的技術。通過柯里化&#xff0c;可以將函數的調用方式從一次性傳遞所有參數改為分步傳遞參數&#xff0c;從而實現部…

Golang Channel 使用詳解、注意事項與死鎖分析

#作者&#xff1a;西門吹雪 文章目錄 一、引言&#xff1a;Channel 在 Go 并發編程中的關鍵地位二、Channel 基礎概念深度剖析2.1 獨特特性2.2 類型與分類細解 三、Channel 基本使用實操指南3.1 聲明與初始化3.3 單向 Channel 的運用 四、Channel 典型使用場景實戰案例4.1 協程…

C語言經典代碼題

1.輸入一個4位數&#xff1a;輸出這個輸的個位 十位 百位 千位 #include <stdio.h> int main(int argc, char const *argv[]) {int a;printf("輸入一個&#xff14;位數&#xff1a;");scanf("%d",&a);printf("個位&#xff1a;%d\n"…

stable-diffusion-webui-docker 構建 comfy-ui

Ubuntu 安裝 stable-diffusion-webui-docker 常見問題處理方法 這篇文章介紹了在 Ubuntu 上安裝 stable-diffusion-webui-docker&#xff0c;運行 docker compose --profile auto up --build 構建出的界面是 stable-diffusion-webui&#xff0c;如果運行 docker compose --prof…

【AI學習從零至壹】Pytorch神經?絡

Pytorch神經?絡 神經網絡簡介神經元激活函數 神經網絡神經?絡的?作過程前向傳播(forward) 反向傳播(backward)訓練神經?絡 Pytorch搭建并訓練神經?絡神經?絡構建和訓練過程數據預處理構建模型優化器&提取訓練數據訓練樣本 神經網絡簡介 神經元 在深度學習中&#x…

stm32 L432KC(mbed)入門第一課

目錄 一. 前言 二. 專欄意義 三. MS入門第一課 一. 前言 新的一年MS課程又開始了&#xff0c;同時也到了該專欄的第三個年頭。在前兩年中&#xff0c;該專欄幫助了很多第一次接觸單片機的同學。其中&#xff0c;有的同學訂閱專欄是為了更好的完成并且通過MS這門課程&#xf…

如何創建HTML自定義元素:使用 Web Component 的最佳實踐

什么是 Web Component&#xff1f; Web Component 是一組允許開發者創建可復用、自定義 HTML 元素的技術。它們使得我們可以像原生 HTML 標簽一樣使用這些自定義元素&#xff0c;從而提升代碼的模塊化和復用性。Web Component 的核心技術有以下三部分&#xff1a; Custom Ele…

【系統架構設計師】操作系統 - 文件管理 ② ( 位示圖 | 空閑區域 管理 | 位號 | 字號 )

文章目錄 一、空閑區域 管理1、空閑區域分配2、空閑區域 管理方式 簡介 二、位示圖 簡介1、位示圖 表示2、位示圖 字號3、位示圖 位號4、位示圖 中 比特位 分組管理 三、位示圖 考點1、計算磁盤 位示圖 的大小2、位示圖 位置計算 一、空閑區域 管理 1、空閑區域分配 在 索引文件…

基于 Docker 和 Flask 構建高并發微服務架構

基于 Docker 和 Flask 構建高并發微服務架構 一、微服務架構概述 &#xff08;一&#xff09;微服務架構的優點 微服務架構是一種將應用程序拆分為多個小型、自治服務的架構風格&#xff0c;在當今的軟件開發領域具有顯著的優勢。 高度可擴展性&#xff1a;每個微服務可以獨…

搭建Django開發環境

搭建Django開發環境 文章目錄 搭建Django開發環境[toc]一、安裝Python語言環境二、安裝Visual Studio Code三、安裝setuptools工具四、安裝Django框架 一、安裝Python語言環境 1.測試當前系統環境是否存在Python語言解釋器 python --version2.打開PowerShell終端&#xff0c;…