注意: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 = "编号:" + "  " + id + "<br>";
str = str + "名称:" + "  " + name + "<br>";
str = str + "经度:" + "  " + longitude + "<br>";
str = str + "纬度:" + "  " + 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>