qt显示高德地图
阅读原文时间:2021年04月23日阅读:1

注意:1.4.3版本高德地图似乎存在内存泄漏的情况,地图不断缩放之后,内存减少,不会恢复,最终耗尽内存,卡死系统,使用webview加载的此版本高德地图,将webview所在的widget删除,地图占用的内存也不释放,存在严重问题。另外使用QWebSettings::globalSettings()->clearMemoryCaches()等API(参考:http://juke.outofmemory.cn/entry/146265)设置或清除内存均无效。 最终换用最新版1.4.15的API后,未再发现此问题。

与显示百度地图类似,只需要将对应的地图html文件显示高德地图就可以了:
在webview中加载html:

ui->webView->load(QUrl("qrc:/images/Gaode.html"));

html:

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <title>给多个点添加信息窗体</title>
    <link rel="stylesheet" href="http://cache.amap.com/lbs/static/main1119.css"/>
    <script type="text/javascript"
            src="http://webapi.amap.com/maps?v=1.4.3&key=9eaa110d1034e9e62a1ce026035d62ed"></script>
    <script type="text/javascript" src="http://cache.amap.com/lbs/static/addToolbar.js"></script>
</head>
<body>
<div id="container"></div>
<script>
    var mymap = new AMap.Map('container', {
        resizeEnable: true,
        zoom:11
    });
    function fitView() {
        mymap.setFitView();
    }
    function loadfinishtip() {
        alert("amap load finish.");
    }
    var infoWindow = new AMap.InfoWindow({offset: new AMap.Pixel(0, -30)});
    function markerClick(e) {
        if(infoWindow.getIsOpen()){
            infoWindow.close();
        }else{
            infoWindow.setContent(e.target.content);
            infoWindow.open(mymap, e.target.getPosition());
        }
    }
    var markers = [];
    var str;
    function addMarker(id,name,latitude,longitude,iconPath){
        var gps = [longitude,latitude];
        AMap.convertFrom(gps, 'gps', function (status, result) {
            var lnglats = gps;
            if (result.info === 'ok') {
                var lnglats = result.locations; // Array.<LngLat>
                latitude = lnglats[0]["lat"];
                longitude = lnglats[0]["lng"];
            }
            var marker = new AMap.Marker({
                position: [longitude,latitude],
                icon: new AMap.Icon({
                   image: iconPath,
                   size: new AMap.Size(128, 128), //图标大小
                   imageSize: new AMap.Size(64,64)
                })
            });
            marker.setLabel({
                   offset: new AMap.Pixel(60, 40),
                   content: name
            });
            str = "编号:" + "&nbsp&nbsp" + id + "<br>";
            str = str + "名称:" + "&nbsp&nbsp" + name + "<br>";
            str = str + "经度:" + "&nbsp&nbsp" + longitude + "<br>";
            str = str + "纬度:" + "&nbsp&nbsp" + latitude + "<br>";
            marker.title = name;
            marker.content = str;
            marker.on('mousedown', markerClick);
            mymap.add(marker);
            markers.push(marker);
       });
    }
    function delMarker(info){
        for(var i = 0;i< markers.length; i++){
            if(markers[i].title == info){
                mymap.remove(markers[i]);
                markers.splice(i,1);
                --i;
            }
        }
        if(infoWindow.getIsOpen()){
            infoWindow.close();
        }
    }
    function delAllMarker(){
        mymap.remove(markers);
        markers = [];
    }
    function boost(){
        mymap.zoomIn();
    }
    function reduce(){
        mymap.zoomOut();
    }
    function updateMarker(){
        marker.setPosition([108.761462, 34.452136]);
        mymap.setCenter([108.761462, 34.452136]);
    }
    mymap.on('click', function(e) {
        var lng = e.lnglat.getLng();
        var lat = e.lnglat.getLat();
        infoWindow.close();
    });
</script>
</body>
</html>

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器