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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...