1. 程式人生 > >讀取本地座標檔案,在百度地圖畫運動軌跡(2018新華三“物聯網終端行為分析”第三題)

讀取本地座標檔案,在百度地圖畫運動軌跡(2018新華三“物聯網終端行為分析”第三題)

目錄

問題描述

解決思路

1.註冊百度金鑰

2.建立本地TXT檔案。

3.編寫HTML程式碼

4.搭建本地HTML伺服器

5.在百度地圖顯示運動軌跡

參考文獻


問題描述

該部分內容來自新華三NAVIGATE創客節-黑客鬆“物聯網終端行為分析”第三題:已知一系列經緯度座標點,在百度地圖上畫出該座標點對應的運動軌跡。

注意:文中所有的檔案和原始碼都可以在CSDN上下載(點選進入下載介面);沒有積分的小夥伴,請在評論區留下郵箱,我會通過郵箱傳送給你;考慮到個人隱私,程式碼中沒有給出本人AK,請讀者自行補上自己的AK。

解決思路

呼叫百度地圖API來完成,讀取本地txt檔案,並將讀取到的經緯度座標值用折線圖的形式顯示在百度地圖中。本人是人生第一次接觸前端,在完成這個任務中多次查詢資料並向專業人士求教,現將完整的過程記錄如下:

1.註冊百度金鑰

具體註冊方法可以參考百度經驗:https://jingyan.baidu.com/article/3f16e0031ed1522591c103ea.html。我們的目的是得到金鑰,即AK。

2.建立本地TXT檔案。

TXT檔案中存放的是電動車的經緯度座標,由新華三提供,經過與新華三溝通,該部分內容可以公開使用,該檔案和本文的原始碼都可以在CSDN上下載到。下面是本文所用的txt文字資料:

datatag,devId,nlat,nlon,is_value
t4_2,35FE4445,30.1920196093,120.203011802,1
t4_2,35FE4445,30.1920196093,120.203011802,1
t4_2,35FE4445,30.1920196093,120.203011802,1
t4_2,35FE4445,30.1920196093,120.203011802,1
t4_2,35FE4445,30.1920196093,120.203011802,1
t4_2,35FE4445,30.1920196093,120.203011802,1
t4_2,35FE4445,30.1920196093,120.203011802,1
t4_2,35FE4445,30.1921179444,120.203013372,1
t4_2,35FE4445,30.1921596238,120.203014991,1
t4_2,35FE4445,30.1922078431,120.203006669,1
t4_2,35FE4445,30.1922976792,120.202994998,1
t4_2,35FE4445,30.1924257995,120.202979982,1
t4_2,35FE4445,30.1925189059,120.202963341,1
t4_2,35FE4445,30.1925854971,120.202958315,1
t4_2,35FE4445,30.1926886019,120.202941665,1
t4_2,35FE4445,30.1927451535,120.202933336,1
t4_2,35FE4445,30.1928282417,120.202915047,1
t4_2,35FE4445,30.1928766282,120.202919974,1
t4_2,35FE4445,30.1929317427,120.202929863,1
t4_2,35FE4445,30.1930634051,120.202931406,1
t4_2,35FE4445,30.1931248517,120.202914792,1
t4_2,35FE4445,30.1932096691,120.202901471,1
t4_2,35FE4445,30.1932660962,120.202883206,1

3.編寫HTML程式碼

讀取本地TXT檔案,獲取一系列經緯度座標,並在百度地圖api中顯示運動軌跡。

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no"/>
  <style type="text/css">
    body, html, #allmap {
      width: 100%;
      height: 100%;
      overflow: hidden;
      margin: 0;
      font-family: "微軟雅黑";
    }
  </style>
  <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的金鑰"></script>
  <title>在百度地圖中顯示電動車的運動軌跡</title>
</head>
<body>
<div id="allmap"></div>
</body>
</html>
<script type="text/javascript">
    function readTextFile(file) {
        var rawFile = new XMLHttpRequest();
        rawFile.open("GET", file, false);
        rawFile.onreadystatechange = function() {
            if (rawFile.readyState === 4) {
                if (rawFile.status === 200 || rawFile.status == 0) {
                    var arr = [];
                    var allText = rawFile.responseText;
                    allText = allText.split('\n');
                    window.allText = allText;
                    for (var x in allText) {
                        if (Number(x) === 0) {
                            continue;
                        }
                        var _ele = allText[x].split(',');
                        arr.push({x: _ele[3], y: _ele[2]});

                    }
                    mapIni(arr)
                }
            }
        };
        rawFile.send(null);
    }

    readTextFile("tmp.txt");

    function mapIni(arr) {
        // 百度地圖API功能
        var map = new BMap.Map("allmap");    // 建立Map例項
        map.centerAndZoom(new BMap.Point(120.202914, 30.193124), 22);  // 初始化地圖,設定中心點座標和地圖級別
        map.enableScrollWheelZoom(true);     //開啟滑鼠滾輪縮放
        var sy = new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW, {
            scale: 0.6,//圖示縮放大小
            strokeColor: '#fff',//設定向量圖示的線填充顏色
            strokeWeight: '2'//設定線寬
        });
        var icons = new BMap.IconSequence(sy, '10', '30');
// 建立polyline物件
        var pois=[];
        for(var i in arr){
            var _data=new BMap.Point(arr[i].x, arr[i].y)
            pois.push(_data)
        }
        var polyline = new BMap.Polyline(pois, {
            enableEditing: false,//是否啟用線編輯,預設為false
            enableClicking: true,//是否響應點選事件,預設為true
            icons: [icons],
            strokeWeight: '8',//折線的寬度,以畫素為單位
            strokeOpacity: 0.8,//折線的透明度,取值範圍0 - 1
            strokeColor: "#18a45b" //折線顏色
        });

        map.addOverlay(polyline);          //增加折線
    }


</script>

4.搭建本地HTML伺服器

經過多次試驗後,最終找到了一個最簡單的方法,那就是使用HFS搭建本地HTML檔案伺服器。

(1)下載並開啟HFS軟體

下載地址:http://www.rejetto.com/hfs/?f=dl

(2)更改埠號

預設埠號是80,為了防止埠號衝突,將埠號改為8080。

 (3)新增檔案

將前面的生成的TXT檔案和HTML檔案都用滑鼠拖進HFS介面中即可。

5.在百度地圖顯示運動軌跡

上一步完成後會在HFS軟體的位址列中出現一個地址,把這個地址輸進瀏覽器或者直接單擊該位址列左邊的“在瀏覽器中開啟”按鈕既可在百度地圖中顯示電動車運動軌跡。以下是實際的顯示效果,反應了新華三附近的一輛電動車橫穿濱安路的情形。

 

參考文獻

[1]NAVIGATE創客節-黑客鬆“物聯網終端行為分析”賽題:https://zhiliao.h3c.com/Developer/huati/40

[2]註冊百度金鑰:https://jingyan.baidu.com/article/3f16e0031ed1522591c103ea.html

[3]在百度地圖畫折線示例:http://lbsyun.baidu.com/jsdemo.htm#c1_25

[4]搭建本地HTML伺服器:https://www.cnblogs.com/1024zy/p/6402534.html