【高德地图API】如何设置Icon的imageSize?

本文介绍如何在高德地图API中正确设置图标尺寸,确保在不同分辨率设备上的显示效果。通过使用AMap.Size方法来指定imageSize参数,可以有效适配高清屏幕。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://www.cnblogs.com/milkmap/p/6133502.html

在地图开发中,我们需要把标注换成各种各样的图片,以突显个性。

  

 

在高分辨率的手机下,图片尺寸需要压缩至一半,以保持图片清晰。让我们来看一看,应该如何实现。

 

有开发者为了改变图片的尺寸,直接写成了

imageSize: (64, 64)

或者

imageSize: "64px 64px"

 

是否有问题呢?

 

首先来看一下imageSize的类参考,看到类型是Size。

 

Size是高德API自定义的类型,并不是num。所以,直接写数字的做法是不对的。

 

那么正确的写法,应该是:

imageSize: new AMap.Size(64,64)

 

在高分辨率显示器上,应该把尺寸压缩一半。比如图片尺寸是128*128,那么imageSize需要把图片压缩一半,应为64*64。代码如下:

复制代码
    //添加点标记,并使用自己的icon
    new AMap.Marker({
        map: map,
        position: [116.47395,39.986058],
        icon: new AMap.Icon({            
            image: "marker128.png",
            size: new AMap.Size(128, 128),  //图标大小
            imageSize: new AMap.Size(64,64)
        })        
    });
复制代码

 

demo地址:http://zhaoziang.com/amap/imageSize.htm

 

全部示例代码:

复制代码
<!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.3&key=250860ccb5953fa5d655e8acf40ebb7"></script>
    <script type="text/javascript" src="http://cache.amap.com/lbs/static/addToolbar.js"></script>
</head>
<body>
<div id="container"></div>
<script type="text/javascript">
    //初始化地图对象,加载地图
    var map = new AMap.Map("container", {
        resizeEnable: true,
        zoom:11
    });
    //添加点标记,并使用自己的icon
    new AMap.Marker({
        map: map,
        position: [116.47395,39.986058],
        icon: new AMap.Icon({            
            image: "marker128.png",
            size: new AMap.Size(128, 128),  //图标大小
            imageSize: new AMap.Size(64,64)
        })        
    });
    
    //添加点标记,并使用自己的icon
    new AMap.Marker({
        map: map,
        position: [116.321514,39.91289],
        icon: new AMap.Icon({            
            image: "marker128.png",
            size: new AMap.Size(128, 128),  //图标大小
            imageSize: new AMap.Size(128,128)
        })        
    });
</script>
</body>
</html>                        
复制代码

### 高德地图 API 缩放时图标消失的解决方案 在 web 项目中使用高德地图 API 进行开发时,可能会遇到缩放地图过程中标注点丢失的问题。这通常是因为默认配置下,某些标记对象可能未被正确处理或更新其位置。 为了防止这种情况的发生,可以采取以下措施: #### 方法一:监听地图缩放事件并重新绘制标记 通过监听 `zoomend` 事件来检测用户的每一次缩放操作,并在此基础上刷新所有的 Marker 或者 OverlayLayer 实例[^3]。 ```javascript map.on('zoomend', function() { // 清除现有 marker 并创建新的实例 markers.forEach(marker => map.remove(marker)); initMarkers(); // 假设这是初始化所有marker的方法 }); ``` #### 方法二:调整 Marker 的属性设置 确保每次添加新 Marker 到地图上时都指定了合适的参数选项,特别是对于 icon 属性来说要指定大小尺寸以及 anchor 锚点等重要信息。 ```javascript var marker = new AMap.Marker({ position: lngLat, title: 'Marker', offset: new AMap.Pixel(-10,-20),// 设置偏移量使icon中心位于坐标处 icon: "http://webapi.amap.com/images/marker.png", draggable: false, raiseOnDrag: true }); function setIconSize(iconUrl, width, height){ var img = document.createElement("img"); img.src = iconUrl; img.width = width; img.height = height; return new AMap.Icon({ size:new AMap.Size(width,height), image:img.src, imageSize:new AMap.Size(width,height) }); } ``` 以上两种方式都可以有效解决由于缩放引起的数据展示异常情况。具体实现可根据实际需求选择合适的方式应用到项目当中去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值