MongoDB+SignalR+Hangfire+Vue2+百度地圖實現GPS實時定位

来源:https://www.cnblogs.com/Iflifecouldctrlz/archive/2023/11/03/17806518.html
-Advertisement-
Play Games

MongoDB+SignalR+Hangfire+Vue2+百度地圖實現GPS實時定位 一、實現效果 二、安裝MongoDB 可以自行參考菜鳥鏈接:MongoDB 教程 | 菜鳥教程 (runoob.com) 1.下載mongodb資料庫安裝包: 網盤鏈接:https://pan.baidu.com ...


MongoDB+SignalR+Hangfire+Vue2+百度地圖實現GPS實時定位

一、實現效果

二、安裝MongoDB

可以自行參考菜鳥鏈接:MongoDB 教程 | 菜鳥教程 (runoob.com)

1.下載mongodb資料庫安裝包:

網盤鏈接:https://pan.baidu.com/s/4rb1fOkc

2.進入\mongodb-win32-x86_64-windows-5.0.9\bin路徑下創建db文件夾

3.啟動服務

在bin目錄下輸入cmd+回車,輸入命令:mongod --dbpath+你自己的db文件夾路徑

比如我的文件目錄為:E:\MongoDB\mongodb-win32-x86_64-windows-5.0.9\bin\db

4.測試是否啟動服務
上一個黑框不要關!!!!!!!

在bin目錄下再次輸入cmd+回車,輸入命令:mongo.exe將會看到如下畫面2+2=4就證明連接成功了!!!(你太棒了)

三、向MongoDb中添加坐標數據
1.我這裡使用是的WindowsForm模擬GPS向mongod添加的數據,大家可以自行克隆源碼

git地址:https://gitee.com/ctrlzs/indowsforms.git

2.如何使用程式:
  • 坐標數據來源:你需要一個txt文本,將坐標數據放入文檔中,然後將文件路徑複製下來

  • 最好和你的WindowsForm項目放在一起

  • 進入WindowsForm項目找到From1的設計隨便雙擊個控制項
  • 找到下麵這段代碼
        private void button3_Click(object sender, EventArgs e)
        {

            //文件路徑
            //string filePath = @"C:\D盤\新建 文本文檔.txt";
            string filePath = @"D:\桌面\代碼\winfrom\坐標數據.txt";

            //文本讀取器
            using (TextReader reader = new StreamReader(filePath, System.Text.Encoding.UTF8))
            {
                //一次性讀完
                string textContent = reader.ReadToEnd();

                //輸出讀取的內容
                //Console.WriteLine(textContent);

                textBox1.Text = textContent;
            }

        }
  • 將filePath的參數路徑換成你的txt文檔位置

    然後運行項目點擊獲取坐標你將會獲得一大批數據,也就是你txt里的坐標數據

    然後點擊添加就會自動在你的mongodb中創建一個名為myDB06的文檔資料庫和名為tutorial0文檔,你會發現有個進度條我這裡有428條所以設置進度條數據最大為428,你可以根據自己的數據量進行自己更改,這裡就不浪費時間了,自己百度如何更改

    到這裡MongoDb基本配置完畢!!!!

四、打開項目配置MongoDb

我這裡是伺服器端使用的是ABP項目

1.下載包:MongoDB.Driver

2.引用命名空間

using MongoDB.Bson;
using MongoDB.Driver;

讀取mongodb數據代碼如下:

這裡有個MongoDto,你需要自行創建

        public async Task GetLatService()
        {
            //連接mongodb資料庫
            string connectionString = "mongodb://127.0.0.1:27017";

            //創建了一個MongoClient對象 mongoClient,並傳入連接字元串作為構造函數參數,以創建與 MongoDB 伺服器的連接。
            MongoClient mongoClient = new MongoClient(connectionString);

            //通過GetDatabase方法從mongoClient 獲取了一個名為 "myDB06" 的資料庫的引用,並將其賦值給 database。
            IMongoDatabase database = mongoClient.GetDatabase("myDB06");

            //定義了一個常量字元串collectionName,表示要查詢的集合的名稱,這裡是 "tutorial0"。
            const string collectionName = "tutorial0";

            //使用 GetCollection<BsonDocument>方法從database 中獲取了一個名為 collectionName 的集合的引用,並將其賦值給 collection。這裡的 BsonDocument 表示查詢結果的文檔類型。
            var collection = database.GetCollection<BsonDocument>(collectionName);

            //創建了一個空的 BsonDocument 對象 filter,用作查詢的過濾條件。
            var filter = new BsonDocument();

            //使用collection 的 Find 方法,結合 filter 對象執行查詢操作,並通過 ToListAsync 方法返回查詢結果的一個非同步可枚舉集合。
            var list = Task.Run(async () => await collection.Find(filter).ToListAsync()).Result;

            var resultList = list.Select(bsonDocument => bsonDocument.ToDictionary()).Select(dictionary => new MongoDto
            {
                x = dictionary.GetValueOrDefault("x").ToString(),
                y = dictionary.GetValueOrDefault("y").ToString()
            }).ToList();

            foreach (var item in resultList)
            { 
                //這裡是所有配置完後通過SignalR發送消息(所有配置完畢後把註釋刪掉!!)
                
                //var a = (item.y).Replace("\r", "");
                //x:經度 y:緯度
                //await _hub.Clients.All.SendAsync("ReceiveLog", item.x,a);    

                //Thread.Sleep(2000);
            }
        }

五、配置SignalR實現實時發送消息

1.常規操作下載包ABP項目下載:Volo.Abp.AspNetCore.SignalR

2.進入配置項配置SignalR
  • 首先將依賴加入項目中

    以下內容漂紅線的同學看這裡!!

    1.檢查是否安裝成功上面這個包

    2.試試引用命名空間using Volo.Abp.AspNetCore.SignalR;

    3.看看包版本是否匹配

    typeof(AbpAspNetCoreSignalRModule)
    

  • 打開配置項註入服務: services.AddSignalR();

  • 創建一個類繼承Hub類來作為客戶端和服務端的通信中心

    繼承飄紅線的引用命名空間:

    using Microsoft.AspNetCore.SignalR;
    

  • 然後找到Program.cs

    app.MapHub<ChatHub>("/Chat");
    

  • 馬上了不要著急哦,我們回到你Mongodb數據獲取的方法中,使用構造函數將SignalR引過來,就可以使用了

            readonly IHubContext<ChatHub> _hub;
    
            public MapService(IHubContext<ChatHub> hub)
            {
                _hub = hub;
            }
    

像這樣:

  • 然後可以運行你的項目在地址欄中輸入上面Program.cs中你自己寫的地址,我這裡是/Chat,看到這段話恭喜你配置成功!!!(你太棒了)

六、配置Hangfire定時任務

1.下載NuGet包(註意:這裡你如果使用的是其他資料庫請參閱其他文檔,本項目是MySql)

2.配置Hangfire
  • 首先將包依加進去(看清楚是Hangfire那一行)

        typeof(AbpBackgroundWorkersHangfireModule),//Hangfire
    

  • 然後進入appsettings.json配置連接字元串

    換成你自己的連接字元串:

        "HangfireConnection": "Server=10.31.60.8;Database=hangfiretest;uid=root;pwd=2334362423;port=3306;Allow User Variables=true;"
    

  • 配置連接

    代碼在這可以直接複製粘貼

    
    ConfigureHangfire(context, configuration);//將配置寫入項目中
    
        //配置Hangfire資料庫連接
        private void ConfigureHangfire(ServiceConfigurationContext context, IConfiguration configuration)
        {
            context.Services.AddHangfire(config =>
            {
                config.UseStorage(new MySqlStorage(configuration.GetConnectionString("HangfireConnection"), new MySqlStorageOptions { }));
            });
        }
    

  • 打開儀錶盤、調用需要執行的方法

            //授權Hangfire儀錶盤
            app.UseHangfireDashboard();
    
            var jobId = BackgroundJob.Enqueue<MapService>(
                x => x.GetLatService());
    

3.配置完成後運行項目,在地址欄輸入/hangfire即可看到如下畫面(恭喜你hangfire配置成功!!!)

七、配置前端項目

1.vue2中引入百度地圖

百度地圖博客地址:vue&百度地圖繪製行進路線/路書/路線規劃/線路展示_vue 百度地圖路書代碼-CSDN博客

signalr博客地址:vue +signalR - 飛天豬皮怪 - 博客園 (cnblogs.com)

自行配置這裡就不教了

2.各位大佬我代碼直接奉上,就不做講解了(粘過去就能用),覺得移動圖片醜的聯繫我更換QQ:2362933015

記得改signalR廣播地址和標識改成自己的

npm install vue-baidu-map --save     //下載百度地圖依賴包
npm install @aspnet/signalr          //下載signalr依賴包
<template>
  <div>
    <baidu-map
      class="map"
      :scroll-wheel-zoom="true"
      :center="{ lng: 116.404, lat: 39.915 }"
      :zoom="15"
    >
      <bm-marker
        :position="{ lng: lng, lat: lat }"
        :dragging="true"
        animation="BMAP_ANIMATION_DROP"
        :icon="{
          url: 'https://i.postimg.cc/BQpNQLd9/JVOG-OY-6-J7-M3-ZXU-IX6-7.gif',
          size: { width: 300, height: 157 },
        }"
      ></bm-marker>
    </baidu-map>
  </div>
</template>
<script>
import BaiduMap from "vue-baidu-map/components/map/Map.vue";
import BmMarker from "vue-baidu-map/components/overlays/Marker.vue";
import * as signalR from "@aspnet/signalr";
export default {
  computed: {},
  components: {
    BmMarker,
    BaiduMap,
  },
  data() {
    return {
      lng: "", //經度
      lat: "", //緯度
      connection: "", //signalr連接
      messages: [], //返回消息
      play: false,
      path: [],
    };
  },
  methods: {},
  created: function () {
    let thisVue = this;
    this.connection = new signalR.HubConnectionBuilder()
      .withUrl("http://localhost:44382/Chat", {
        //這裡的地址要輸入自己的signalR廣播地址
        skipNegotiation: true,
        transport: signalR.HttpTransportType.WebSockets,
      })
      .configureLogging(signalR.LogLevel.Information)
      .build();
      //這裡的ReceiveLog改成自己的廣播地址標識
    this.connection.on("ReceiveLog", function (user, message) {
      thisVue.messages.push({ user, message });
      //經度
      thisVue.lng = user;
      //緯度
      thisVue.lat = message;

      console.log(thisVue.lng, thisVue.lat);
    });
    this.connection.start();
  },
};
</script>
 
<style scoped>
.map {
  height: 800px;
  width: 100%;
}
</style>

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JMM 請你談談對Volatile的理解 Volatile是java虛擬機提供的輕量級的同步機制 1、保證可見性 2、不保證原子性 3、禁止指令重排 什麼是JMM JVM->java虛擬機 JMM->java記憶體模型,不存在的東西,概念!約定 關於JMM的一些同步的約定: 線程解鎖前,必須把共用變數 ...
  • Go 介面-契約介紹 目錄Go 介面-契約介紹一、介面基本介紹1.1 介面類型介紹1.2 為什麼要使用介面1.3 面向介面編程1.4 介面的定義二、空介面2.1 空介面的定義2.2 空介面的應用2.2.1 空介面作為函數的參數2.2.2 空介面作為map的值2.3 介面類型變數2.4 類型斷言三、盡 ...
  • 實踐環境 Python 3.6.2 confluent-kafka 2.2.0 confluent-kafka簡介 Confluent在GitHub上開發和維護的confluent-kafka-python,Apache Kafka®的一個python客戶端,提供了一個與所有brokers>=v0. ...
  • 一:背景 1. 講故事 這段時間分析了幾個和網路故障有關的.NET程式之後,真的越來越體會到電腦基礎課的重要,比如 電腦網路 課,如果沒有對 tcpip協議 的深刻理解,解決這些問題真的很難,因為你只能在高層做黑盒測試,你無法看到 tcp 層面的握手和psh通訊。 這篇我們通過兩個小例子來理解一 ...
  • Span 提供任意記憶體的連續區域的類型安全和記憶體安全表示形式。它是在堆棧而不是托管堆上分配的ref結構,是對任意記憶體塊的抽象 。 1.關於Span 在NET Core 2.1中首次引入 提供對任意記憶體上的連續區域的讀寫視圖 利用索引/迭代來修改範圍內的記憶體 幾乎無開銷 2.和記憶體的關係 Span 表 ...
  • Nexus 是支持 Nuget、Docker、Npm 等多種包的倉庫管理器,可用做私有包的存儲分發,緩存官方包。本篇將手把手教學使用 Nexus 搭建自己的 NuGe t& Docker 私有倉庫。 ...
  • 有的時候我們會對程式進行單元測試, 為了測試的效果以及後期的維護, 我一般會將各個測試拆開, 根據需要測試的類分到各個類型中, 不過在實際操作的時候就出現了一些意想不到的問題, 各個測試的執行是亂序的, 按照我自己寫測試的習慣, 假如我需要測試新寫的增刪改查的功能, 我會將增刪改查分開測試, 會按照 ...
  • 接上篇 docker-bind 的使用搭建了一個 dns 服務,本篇將介紹另外一款 DnsServer 的部署和使用,更專註,更輕量。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...