百度地圖中靜態(tài)軌跡的實現(xiàn)

后端php返回json數(shù)據(jù)
public function check_ajax(){
        if(request()->isAjax()){
            $phone_str = $this->request->post('phone_str');
            $start_time = $this->request->post('start_time');
            $end_time = $this->request->post('end_time');
            $phone = substr($phone_str,7);
            $data0 = Db::name('ship') -> where(['phone' => $phone]) ->select();
            foreach ($data0 as $key => $value){
                $id = $value['id'];
            }
            //條件查詢
            $map['cmf_ship.id'] = ['=',"$id"];
            $map['cmf_locus.time'] = array('between',array("$start_time","$end_time"));
            $map['cmf_locus.position'] = ['=',"定位"];
            $map['cmf_locus.alarm'] = ['=',"一切正常"];
            $data = Db::name('locus')
                ->alias('a')
                ->join('cmf_ship b','a.ship_id = b.id','left')
                ->field('a.id,a.time,a.ship_id,a.latitude,a.longitude,a.speed,a.height,a.direction,b.id,b.phone,b.captain,b.name')
                ->where($map)
                ->order('time' )
                ->select();
            return $data ;
        }
    }
前端html代碼
<head>
    <title>百度</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="viewport"
          content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script>
    <script type="text/javascript"
            src="http://api.map.baidu.com/api?v=2.0&ak=地圖密鑰"></script>
    <script type="text/javascript"
            src="http://api.map.baidu.com/library/DistanceTool/1.2/src/DistanceTool_min.js"></script>
</head>
<body>
<div id="map"></div>
</body>
</html>
前端js代碼
點擊通過ajax獲取數(shù)據(jù)
$("#btn").click(function () {
      $(".bottom_div").hide();
      var phone_str = $("#phone").text();
      var start_time = $("#start").val();
      var end_time = $("#end").val();
      var jsonData = {
            "phone_str": phone_str,
            "start_time": start_time,
            "end_time": end_time
      };
      $.post("{:url('Main/check_ajax')}", jsonData, function (data) {
            trackCheck(data);
      }, 'json');
})
地圖軌跡js代碼
<script>
    //GPS坐標轉換成火星坐標
    var M_PI = 3.14159265358979324;
    var a = 6378245.0;
    var ee = 0.00669342162296594323;
    var x_pi = M_PI * 3000.0 / 180.0;

    function wgs2gcj_lat(x, y) {
        var ret1 = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));
        ret1 += (20.0 * Math.sin(6.0 * x * M_PI) + 20.0 * Math.sin(2.0 * x * M_PI)) * 2.0 / 3.0;
        ret1 += (20.0 * Math.sin(y * M_PI) + 40.0 * Math.sin(y / 3.0 * M_PI)) * 2.0 / 3.0;
        ret1 += (160.0 * Math.sin(y / 12.0 * M_PI) + 320 * Math.sin(y * M_PI / 30.0)) * 2.0 / 3.0;
        return ret1;
    }

    function wgs2gcj_lng(x, y) {
        var ret2 = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));
        ret2 += (20.0 * Math.sin(6.0 * x * M_PI) + 20.0 * Math.sin(2.0 * x * M_PI)) * 2.0 / 3.0;
        ret2 += (20.0 * Math.sin(x * M_PI) + 40.0 * Math.sin(x / 3.0 * M_PI)) * 2.0 / 3.0;
        ret2 += (150.0 * Math.sin(x / 12.0 * M_PI) + 300.0 * Math.sin(x / 30.0 * M_PI)) * 2.0 / 3.0;
        return ret2;
    }

    function wgs2gcj(lat, lng) {
        var poi2 = {};
        var dLat = wgs2gcj_lat(lng - 105.0, lat - 35.0);
        var dLon = wgs2gcj_lng(lng - 105.0, lat - 35.0);
        var radLat = lat / 180.0 * M_PI;
        var magic = Math.sin(radLat);
        magic = 1 - ee * magic * magic;
        var sqrtMagic = Math.sqrt(magic);
        dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * M_PI);
        dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * M_PI);
        poi2.lat = lat + dLat;
        poi2.lng = lng + dLon;
        return poi2;
    }

    //火星坐標轉百度坐標
    function gcj2bd(lat, lng) {
        var poi2 = {};
        var x = lng,
            y = lat;
        var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
        var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
        poi2.lng = z * Math.cos(theta) + 0.0065;
        poi2.lat = z * Math.sin(theta) + 0.006;
        return poi2;
    }
</script>
<script>
    function Position1(res) {
        var last_point = 0.0;
        var data_info = [];   //標注信息數(shù)組
        var position = [];
        var res_leng = res.length;
        var tmp = "";
        for (i = 0; i < res_leng; i++) {
            var angle = 0;
            var t;
            t =  wgs2gcj(res[i]['latitude'], res[i]['longitude']);
            tmp = gcj2bd(t.lat, t.lng);
            lat_bd = tmp.lat.toFixed(6);
            lng_bd = tmp.lng.toFixed(6);
            point = new BMap.Point(lng_bd, lat_bd);
            if (i !== 0){
                t = wgs2gcj(res[i-1]['latitude'], res[i-1]['longitude']);
                var tmp0 = gcj2bd(t.lat, t.lng);
                lat_bd0 = tmp.lat.toFixed(6);
                lng_bd0 = tmp.lng.toFixed(6);
                point0 = new BMap.Point(lng_bd0, lat_bd0);
                angle = getAngle2(getAngle(tmp,tmp0));
            }
            last_point = point
            //標注信息
            data_info[i] = [
                lng_bd,
                lat_bd,
                "里程:" + res[i]['nm'] + "nm" + "<br/>經(jīng)度:" + lng_bd + "  " + "緯度:" + lat_bd + "<br/>時間:" + res[i]['time'] + "<br/>速度:" + res[i]['speed'] + "nm/h" + "<br/>方向:" + angle + "度"
            ];
            position.push(point);
        }
        addLine(position, data_info,res);
    }
    //劃線
    function addLine(position, data_info,res) {
        var polyline = new BMap.Polyline(position, {
            strokeColor: "red", //設置顏色
            strokeWeight: 2, //寬度
            strokeOpacity: 0.8 //透明度
        });
        map.addOverlay(polyline);
        addMarker(position, data_info,res);
    }
    //畫點
    function addMarker(position, data_info,res) {
        //方向箭頭
        var positiomSize = position.length - 1;
        for (var i = positiomSize; i > 0; i--) {
            var angle = getAngle(position[i], position[i - 1]);
            drawMarker(position[i], angle);
        }
        //標注信息窗口顯示
        var opts = {
            width: 100, // 信息窗口寬度
            height: 100, // 信息窗口高度
            enableMessage: true //設置允許信息窗發(fā)送短息
        };
        var info_len = data_info.length;
        for (var i = 0; i < info_len; i++) {
            var path = "__STATIC__/images";
            var myIcon = new BMap.Icon(path + "/" + "round.png", new BMap.Size(10, 10), {
                anchor: new BMap.Size(5, 5), // 指定定位位置
                imageOffset: new BMap.Size(0, 0) // 設置圖片偏移
            });
            if (data_info[i][0] == data_info[0][0] || data_info[i][1] == data_info[0][0]) {
                var marker = new BMap.Marker(new BMap.Point(data_info[0][0], data_info[0][1]));
                var label = new BMap.Label("起點", {
                    offset: new BMap.Size(15, -25)
                });
                label.setStyle({
                    width: "30px",
                    textAlign: "center",
                    height: "20px",
                    lineHeight: "20px",
                    maxWidth: "none"
                });
                marker.setLabel(label);
            } else if (data_info[i][0] == data_info[data_info.length - 1][0] || data_info[i][1] == data_info[data_info.length - 1][0]) {
                var marker = new BMap.Marker(new BMap.Point(data_info[data_info.length - 1][0], data_info[data_info.length - 1][1]));
                var label = new BMap.Label("終點", {
                    offset: new BMap.Size(15, -25)
                });
                label.setStyle({
                    width: "30px",
                    textAlign: "center",
                    height: "20px",
                    lineHeight: "20px",
                    maxWidth: "none"
                });
                marker.setLabel(label);
            } else {
                var marker = new BMap.Marker(new BMap.Point(data_info[i][0], data_info[i][1]), {
                    icon: myIcon
                }); // 創(chuàng)建標注
                 //每個點的時間做成label
                /*var label = new BMap.Label(res[i]['time'], {
                    offset: new BMap.Size(0, -25)
                });
                label.setStyle({
                    width: "120px",
                    textAlign: "center",
                    height: "20px",
                    lineHeight: "20px",
                    maxWidth: "none"
                });
                marker.setLabel(label);*/
            }
            var content = data_info[i][2];
            map.addOverlay(marker); // 將標注添加到地圖中
            addOnmouseoverHandler(content, marker);
        }

        function addOnmouseoverHandler(content, marker) {
            marker.addEventListener("onmouseover", function (e) {
                openInfo(content, e)
            });
        }
        function openInfo(content, e) {
            var p = e.target;
            var point = new BMap.Point(p.getPosition().lng, p.getPosition().lat);
            var infoWindow = new BMap.InfoWindow(content, opts); //創(chuàng)建信息窗口對象
            map.openInfoWindow(infoWindow, point);
        }
    }
    function trackCheck(rew) {
        var req = rew;
        showMap(req);
        Position1(req);
    }
</script>
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末怜跑,一起剝皮案震驚了整個濱河市巢音,隨后出現(xiàn)的幾起案子奏瞬,更是在濱河造成了極大的恐慌,老刑警劉巖瞪慧,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡爆办,警方通過查閱死者的電腦和手機雷绢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門泛烙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人翘紊,你說我怎么就攤上這事蔽氨。” “怎么了帆疟?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵鹉究,是天一觀的道長。 經(jīng)常有香客問我踪宠,道長自赔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任柳琢,我火速辦了婚禮匿级,結果婚禮上蟋滴,老公的妹妹穿的比我還像新娘。我一直安慰自己痘绎,他們只是感情好津函,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著孤页,像睡著了一般尔苦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上行施,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天允坚,我揣著相機與錄音,去河邊找鬼蛾号。 笑死稠项,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的鲜结。 我是一名探鬼主播展运,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼精刷!你這毒婦竟也來了拗胜?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤怒允,失蹤者是張志新(化名)和其女友劉穎埂软,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纫事,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡勘畔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了丽惶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咖杂。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蚊夫,靈堂內(nèi)的尸體忽然破棺而出诉字,到底是詐尸還是另有隱情,我是刑警寧澤知纷,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布壤圃,位于F島的核電站,受9級特大地震影響琅轧,放射性物質(zhì)發(fā)生泄漏伍绳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一乍桂、第九天 我趴在偏房一處隱蔽的房頂上張望冲杀。 院中可真熱鬧效床,春花似錦、人聲如沸权谁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旺芽。三九已至沪猴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間采章,已是汗流浹背运嗜。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悯舟,地道東北人担租。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像抵怎,于是被迫代替她去往敵國和親奋救。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 其他文章:安卓百度離線地圖的下載以及使用安卓百度地圖(一)定位功能的實現(xiàn)冗荸、周邊POI的檢索安卓百度地圖(二)地圖顯...
    Active_Loser閱讀 5,697評論 3 8
  • 一個人承璃,坐在行駛的公交車上,雙手懷抱著一個藍色編織袋蚌本,里面裝滿了報紙和其他的東西盔粹,頭發(fā)泛白,有些凌亂程癌,帶著一臉的疲...
    Luckoo閱讀 247評論 0 0
  • 今天下午兒子回來還是趕緊的寫作業(yè)舷嗡,寫完作業(yè)我們就開飯了,吃著飯兒子說嵌莉,媽媽我可能參加不了縣里的比賽了进萄,明天要從...
    元溪媽咪閱讀 115評論 0 0
  • (接上封信) 我巴不得現(xiàn)在就和你生活在一起,你俊美锐峭、大方的臉容中鼠、嫵媚的身姿、悅耳動聽的言談沿癞,給人一種健康向上的美的...
    伊艾閱讀 190評論 0 0