如何使用JS來開發室內地圖商場停車場車位管理系統

来源:https://www.cnblogs.com/esmap/archive/2019/02/25/10414479.html
-Advertisement-
Play Games

對於經常逛商場的MM來說,哪裡有什麼商店,停車在哪裡,電梯、廁所在哪裡,找這些都是一些費力的事情,如果有一個商場地圖可以整體全局預覽,那是很方便的。目前就根據商場停車項目需求,先如何找到一個商場停車場車位的事情說起。商場停車場車位管理系統其實上是一個很大的系統,首先需要從車位是否被占用的事情說起,方... ...


     線上體驗到室內地圖的功能後,手機對室內地圖載入一個字,要顯示“快”,目前微信和電腦都可以打開室內地圖的要求是3秒內打開,能有定位導航的功能最好,這樣方便找到要去的地方。

對於經常逛商場的MM來說,哪裡有什麼商店,停車在哪裡,電梯、廁所在哪裡,找這些都是一些費力的事情,如果有一個商場地圖可以整體全局預覽,那是很方便的。

目前就根據商場停車項目需求,先如何找到一個商場停車場車位的事情說起。

  商場停車場車位管理系統其實上是一個很大的系統,首先需要從車位是否被占用的事情說起,

方案1:最簡單的方案採用攝像頭識別車位是否被占用,然後最好能夠識別出車牌,這樣反向尋車的事情就好搞多了

有了車位狀態,後臺管理系統進行管理就方便多了,所有的數據全部存儲到資料庫中,有攝像頭,還可以實現查看全程錄像,保證停車的安全性。

方案2:採用車位探測器,向後臺送數據,然後用戶開車找到車位後,自己在地圖界面上打卡記錄停車位置坐標到後臺資料庫,這樣找車的時候再來反向尋車。

 

此次我們就先講下容易實現的車位狀態如何在地圖上進行開發展示流程進行紀錄一下。

商場停車場車位實時更新狀況進行了開發,開發過程中使用到了ESMap地圖編輯器及應用實例:

    首先,創建好的地圖進行顯示出來,可以多層全部展示出來,還有上下兩層連接通道三維模型,看起來效果不錯:

   

其次,設計的開發流程圖:

 

準備工作都做好後開始實施:

第一步:獲取車位信息,創建json模擬數據(投入使用後直接接入後臺停車場車位信息數據);

  為了方便開發先創建兩份json模擬數據交替使用來模擬停車場車位實時更新的情況。首先根據地圖點擊事件採集停車位信息,並將車位隨機分配為有車、無車和固定車位三種車位情況,然後創建json數據,我分別命名為data0.json和data1.json。採集車位信息代碼如下(點擊地圖後臺獲取到的直接是json格式數據,是不是老方便了):

        //根據地圖點擊事件 採集停車位信息
        map.on('mapClickNode', function (event) {
            var k = Math.random() > 0.5 ? 1 : 2;
            //點擊車位獲取車位 ID,name,樓層,隨機分配狀態
            console.log("{" + '\n' + '"ID": ' + event.ID + "," + "\n" + '"name": ' + '"' + event.name + '"' +
                "," + "\n" + '"fnum": ' + event.FloorNum + "," + "\n" + '"status": ' + k + "\n" + "}");
        });

我創建的json數據對象有“車位ID”、“車位name”、車位所在樓層“fnum”和車位狀態(“status”:[0,1,2],0是灰色,1是紅色,2是綠色),獲取的json數據如下:

{
    "put": [{
        "ID": …,
        "name": "車位…",
        "fnum": ,
        "status":
    }, {
      …
}]
}

第二步:開啟定時器 不斷刷新數據 (這裡交替變換模擬數據)

開啟定時器,使用定時器不斷刷新數據使停車位處於動態刷新的狀態,從而達到模擬現實生活中停車場的情況。

 var pos = 0;           
setInterval(function () {
          CallLoadData(++pos % 2);
    }, 1500);

第三部:載入數據到地圖並解析數據

將數據載入到地圖後:

1.解析數據:根據車位信息,按車位所在樓層(fnum)、停車狀態(status)將車位id分裝到創建的二維數組中,待下一步使用;

2.更新車位顏色:利用for...of遍歷mydata構造函數,獲取分裝後的樓層(fnum)和其所對應二維車位id數組(idlist),然後使用ESMap sdk中的map.changeModelColor()函數更新各個車位狀態;

到此95%的工程就基本完成啦!

3.更新統計顯示:車位的狀態都實時更新了,數據顯示也得跟上節奏不是!

      var parkData = null;
        var color = ["#7eacca", "#ff0000", "#00ff00"];
        function CallLoadData(pos) {
            var mydata=new Map();
            var fileName = 'data' + pos + '.json'; //json數據切換  pos是0是載入data0.json,是1載入data1.json
            $.getJSON(fileName, function (data) {
                parkData = data.put;
                //1.解析數據
                var total =  0;
                for (var i = 0, len = parkData.length; i < len; ++i) {
                    var m = parkData[i];
                    var d = mydata.get(m.fnum);//map的get方法讀取對應的鍵名(key),如果找不到key則返回undefined                
                    if(d == undefined)
                    {//如果d為undefined就創建一個對象  分裝車位id
                        d = {"idlist":[[],[],[]]};
                    }
                    total++;
                    d.idlist[m.status].push(m.ID);
                    mydata.set(m.fnum,d);
                }
                var showtext="";
                //2.更新車位顏色
                for (var d1 of mydata) {
                    var fnum = d1[0];//鍵名key => fnum(樓層數)
                    var Obj = d1[1];//鍵值value => 對象數組{idlist:[[...],[...],[...]]}
                    for(var j=0;j<color.length;j++)
                    {
                        map.changeModelColor({
                            id:Obj.idlist[j], //更新車位id數組
                            fnum, //樓層
                            color: color[j]
                        });
                    }
                    showtext += map.floorNames[fnum-1]+":"+d.idlist[2].length+"個  ";
                }              
                //3.更新統計顯示
                $("#freedata").html(showtext); //滾動字幕 相應樓層剩餘停車位數          
                $("#total").html(total);
            });
        }

為了使界面更加的形象生動又美觀,我用jQuery做了一個字幕滾動條,讓顯示的數據動起來,代碼

        //滾動字幕
        function marquee() {
       //最外層大盒子(div)寬
            var scrollWidth = $('#i-test-tip').width();
       //字幕寬
            var textWidth = $('.test-tip').width();
            var i = scrollWidth;
            setInterval(function () {
                i--;
                if (i < -textWidth) {
                    i = scrollWidth;
                }
                $('.test-tip').animate({
                    'left': i + 'px'
                }, 8);
            }, 8);
        }

效(高大)果(上)如下:

 

數據載入後可點擊停車位查看停車位信息和當時的停車情況。代碼↓:

        var statusname=["固定車位","有車","無車"];
        //地圖點擊事件
        map.on("mapClickNode", function (event) {
            if (//只有點擊停車位才會顯示信息
                event.nodeType == esmap.ESNodeType.NONE ||
                event.nodeType == esmap.ESNodeType.FLOOR ||
                event.name == "樓梯"
            )
                return;
            $("#carname").css("color", "rgb(255, 255, 0)").html(event.name); //停車位name
            for (var i = 0; i < parkData.length; ++i) {
                if (event.ID == parkData[i].ID) {
                    $("#YorN").html(statusname[parkData[i].status]);                  
                }
            }
        });

到此停車場車位實時更新的功能就完成啦,最終效果如圖:

 

最後還是放出商場停車場線上體驗鏈接:訪問鏈接

所有線上的室內功能體驗鏈接:API-DEMO

歡迎留言交流!


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

-Advertisement-
Play Games
更多相關文章
  • windows powershell基礎 目錄: 1.管道和重定向 2.命令執行 3.變數 4.數組和哈希表 #@()創建數組,使用","把每個值分隔開,@{}創建哈希表,用";"把每個值分隔開 5.常用命令 get-help 查看幫助 get-command 查詢命令 get-member 查看對 ...
  • 轉自:https://blog.csdn.net/xcntime/article/details/51746148 導讀:對於Windows內置安全主體特別需要註意的是:你無法創建、重命名和刪除它們,並且它們在任何一個Windows系統中都是一樣的。 在上期雜誌的“理解Windows內置安全主體(上 ...
  • 前言 開心一刻 一個女人自朋友圈寫道:我家老公昨天和別人家的老婆出去旅游,迄今未歸,我則被別人家的老公折騰了一天,好累哦! 圈子下麵,評論無數,老公在下麵評論到:能不能好好說話,我只不過陪女兒去畢業旅游行,而你負責在家留守,照顧三歲兒子,要不要寫的這麼刺激、讓人浮想聯翩的? 你是不是有點虎? 諾維斯 ...
  • 我們知道一般圖書館都會建書目索引,可以提高數據檢索的效率,降低資料庫的IO成本。MySQL在300萬條記錄左右性能開始逐漸下降,雖然官方文檔說500~800w記錄,所以大數據量建立索引是非常有必要的。MySQL提供了Explain,用於顯示SQL執行的詳細信息,可以進行索引的優化。 一、導致SQL執 ...
  • Redis常用數據類型有字元串String、字典disct、列表List、集合Set、有序集合SortedSet,List常用於獲取最新topN條新聞等類似問題和生產者消費者模式,集合set可以求對象的共同標簽,而有序集合SortedSet用於游戲中的分數排名,SortedSet底層採用壓縮列表zi... ...
  • 一、獲取SDK 1.進入ArcFace2.0的申請地址 https://ai.arcsoft.com.cn/product/arcface.html 2.填寫信息申請並提交 申請通過後即可下載SDK,查看APP_ID和SDK_KEY 二、功能介紹 虹軟ArcFace 2.0 Android包含人臉檢 ...
  • 最近面試時,面試官問了一個列表倒計時效果如何實現,然後腦袋突然懵的了O(∩_∩)O,現在記錄一下。 運行效果圖 實現思路 實現方法主要有兩個: 1.為每個開始倒計時的item啟動一個定時器,再做更新item處理; 2.只啟動一個定時器,然後遍曆數據,再做再做更新item處理。 經過思考,包括性能、實 ...
  • 前言 Android常用知識體系是什麼鬼?所謂常用知識體系,就是指對項目中重覆使用率較高的功能點進行梳理。註意哦,不是Android知識體系。 古語道:學而不思則罔,思而不學則殆。如果將做項目類比為“學”,那麼整理就可以類比為“思”。 在做項目過程中總是會遇到使用相同的功能,比如toast、對話框、 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...