如何使用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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...