腾讯地图jsapi使用(地图定位搜索坐标解析计算距离)

腾讯地图jsapi使用(地图定位搜索坐标解析计算距离)

一个项目,需要打开地图后点击获取地址

用的腾讯地图开放平台,对着文档花了一上午弄出来了

2024 年 03 月 28 日更新:加入二个 坐标点之间的距离计算

代码:


<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>前端定位模块</title>
    <meta name="viewport" content="width =device-width,initial-scale =1,minimum-scale =1,maximum-scale =1,user-scalable =no">
    <style>
        #pos-area {
            height: 500px;
            width: 1200px;
        }

        #poi_lat {
            color: red;
        }

        #poi_lng {
            color: green;
        }

        #poi_address {
            color: blue;
        }
    </style>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=YORBZ-L2PKB-XLMUH-J7HWZ-E2I66-VUB5E"></script>
    <script type="text/javascript" src="https://3gimg.qq.com/lightmap/components/geolocation/geolocation.min.js"></script>
    <script src='https://map.qq.com/api/gljs?v=1.exp&key=YORBZ-L2PKB-XLMUH-J7HWZ-E2I66-VUB5E&libraries=geometry'></script>
</head>
<body>
    <h1>腾讯地图测试</h1>
    <div>
        示例坐标:纬度(latitude)39.984120, 经度(longitude)116.307484
    </div>
    <div>
    您在当的位置(纬度:<input type="text" id="now_lat" /> ,经度:<input type="text" id="now_lng" />)
    <button type="button" onclick="geolocation.getLocation(showPosition, showErr, options)">获取当前位置</button>
        <button type="button" onclick="showditu()">根据输入的坐标显示地图</button>
        </div>
    <div>
        您点击的位置(纬度:<span id="poi_lat"></span>,经度:<span id="poi_lng"></span>,解析出来的地址:<span id="poi_address"></span>)
        <button type="button" onclick="jiexiaddress()">解析地址</button>
        <button type="button" onclick="setdian(1)">设置点 1</button>
        <button type="button" onclick="setdian(2)">设置点 2</button>
    </div>
    <div>
        <input style="width:500px;" type="text" id="search_key" value="北京市海淀区彩和坊路海淀西大街74号" placeholder="需要包含省市,如:北京市海淀区彩和坊路海淀西大街74号" />
        <input type="button" value="搜索" onclick="search()" />
    </div>
    <div>
        坐标点 1:<span id="dian1"></span>
    坐标点 2:<span id="dian2"></span>
    <input type="button" value="计算距离" onclick="calc()" />
    </div>
    <div id="pos-area">        </div>
    <script type="text/JavaScript">
        var appkey = "YORBZ-L2PKB-XLMUH-J7HWZ-E2I66-VUB5E";
        var geolocation = new qq.maps.Geolocation(appkey, "myapp");
        var options = { timeout: 8000 }; $(function () {
            //加载完成后就取当前位置
            geolocation.getLocation(showPosition, showErr, options);
        })
        function showPosition(position) {
            console.log("position",position);
            $('#now_lat').val(position.lat);
            $('#now_lng').val(position.lng);
            $('#poi_lat').html(position.lat);
            $('#poi_lng').html(position.lng);
            //取出位置坐标了,设置地图显示出来
            var map = new qq.maps.Map(document.getElementById("pos-area"), {
                // 地图的中心地理坐标。
                center: new qq.maps.LatLng(position.lat, position.lng), zoom: 15
            });
            //添加标记
            var marker = new qq.maps.Marker({ position: new qq.maps.LatLng(position.lat, position.lng), map: map });
             
            //绑定地图点击事件
            qq.maps.event.addListener(map, "click", function (e) {
                $('#poi_lat').html(e.latLng.getLat().toFixed(6));
                $('#poi_lng').html(e.latLng.getLng().toFixed(6));
                //先移除标记,再添加标记
                marker.setMap(null);
                marker = new qq.maps.Marker({ position: new qq.maps.LatLng(e.latLng.getLat(), e.latLng.getLng()), map: map }); jiexiaddress(e.latLng.getLat(), e.latLng.getLng());
            });
        };

        function showErr() { alert("定位失败!"); };

        //经纬度-->地址
        function jiexiaddress() {
            var lat = $.trim($('#poi_lat').text()); //纬度
          
            var lng = $.trim($('#poi_lng').text()); //经度
            var url3 = encodeURI("https://apis.map.qq.com/ws/geocoder/v1/?location="+lat+","+lng+"&key=" + appkey + "&output=jsonp&&callback=?");
            console.log("解析地址:",url3);
            $.getJSON(url3, function (result) {
                console.log("解析地址返回 :",result)
                if (result.result != undefined) {
                    $('#poi_address').html(result.result.address);
                } else {
                    $('#poi_address').html('');
                }
            })
        }

        //根据输入坐标显示地图
        function showditu() {
            var lat = $('#now_lat').val();
            var lng = $('#now_lng').val();
            if (lat == '' || lng == '') {
                alert("请输入经纬度!!!");
                return;
            }
            var position = { lat: lat, lng: lng };
            showPosition(position);
        }

        //搜索,地址-->经纬度
        function search() {
            var key = $('#search_key').val();
            if (key == '') {
                alert('请输入搜索关键字!');
                return;
            }
            key = $.trim(key);
            var url = "https://apis.map.qq.com/ws/geocoder/v1/?address=" + key + "&key=" + appkey +"&output=jsonp&&callback=?";
            console.log(" 地址搜索url:",url);
            $.getJSON(url, function (res) {
                console.log("搜索地址返回:", res);
                if (res.status == 0) {
                    var lat = res.result.location.lat;
                    var lng = res.result.location.lng;
                    $('#poi_lat').html(lat);
                    $('#poi_lng').html(lng);
                    showPosition({ lat: lat, lng: lng });
                } else {
                    alert(res.message);
                }
            })
        }

        //设置点 1,点 2
        function setdian(i) {
            var lat = $('#poi_lat').html();
            var lng = $('#poi_lng').html();
            if (i == 1) {
                $('#dian1').text(lat + "," + lng);
            } else {
                $('#dian2').text(lat + "," + lng);
            }
        }

        //计算距离
        function calc() {
            var dian1 = $('#dian1').html();
            var dian2 = $('#dian2').html();
            if (dian1 == '' || dian2 == '') {
                alert('请设置点 1,点 2');
                return;
            }
            var dian1_lat = dian1.split(',')[0];
            var dian1_lng = dian1.split(',')[1]
            var dian2_lat = dian2.split(',')[0]
            var dian2_lng = dian2.split(',')[1]

            var startPoint = new TMap.LatLng(dian1_lat,dian1_lng);
            var endPoint = new TMap.LatLng(dian2_lat,dian2_lng);
            var path = [startPoint, endPoint]
            // 计算路径的实际距离
            var distance = TMap.geometry.computeDistance(path);
            alert('计算出的距离:' + distance);
        }
    </script>
</body>
</html>


效果图:


备注:微信里打的话需要用https地址才能取得权限,在手机浏览器打开就可以不用了,还有记得在腾讯控制台那里把webserviceapi打开并加上域名


预览地址:https://www.niunan.net/qqmapdemo.html