自2018年10月18日起,高德开发者论坛除车机板块外,其他板块将停止发帖与维护,如您有使用问题请 提交工单 联系我们,感谢您的理解。

查看: 3308|回复: 6
打印 上一主题 下一主题

[应用案例] 使用Marker实现文本标注----[高德地图JavaScript API系列教程]

[复制链接]
最佳答案
5 

22

主题

760

帖子

1877

积分

超级版主

Rank: 8Rank: 8

积分
1877
QQ
跳转到指定楼层
楼主
发表于 2014-8-27 12:03:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
使用过Javascript API的开发者都知道,使用Marker对象,可以在地图上用图标表示一个坐标位置。但有时候应用中可能还会用名称来说明一个位置,也就是一个文本标注。Javascript API并没有提供文本标注类。这并不是说实现不了文本标注功能。Marker提供了content属性,这个属性可以是DOM对象。如果marker实例化时,content属性被设置,那么marker对象自动显示content属性的值,也即DOM对象。
下面我们将讲述如何通过content属性实现文本标注功能。
首先,定义好一个显示文本内容的DOM对象。
var m =document.createElement("div");
m.className ="label";//设置了样式类名,页面style标签中要定义名为label的样式类
var n =document.createElement("span");
n.innerHTML = "文本标注";//要显示的文本标注的内容
m.appendChild(n);
这样变量m即是要赋予content属性的DOM对象。
其次,然后为这个DOM对象中的元素设置风格,就是常用的CSS风格设置方式,这样用户可以通过CSS的控制,将文本显示为自己想要的风格。
<style>
.label{position:relative;}
.label span{background-color:#ffffff;color:#000;border:1pxsolid red;font-size:14px;white-space:nowrap}
</style>
注意:font-size设置自定义标注文字大小,本处设置为14px。如果要精确设置文本标注的偏移量,就需要用这个值。
最后,就是实例化Marker对象,并添加到地图上去。
var marker = newAMap.Marker({
       map:mapObj,
       position:newAMap.LngLat(116.374258,39.907415), //基点位置
       offset:new AMap.Pixel(-28,-14), //相对于基点的偏移位置
       //draggable:true,  //是否可拖动
       content:m   //自定义Marker的内容,即一个DOM对象
});
content属性被设置为m对象。
对偏移量offset的说明:因为默认情况下,文本块的左上角对准了基点,也即postion的值。我们要将文本块的底部中央位置对准基点,则需要设置offset。关于offset的计算:
自定义标注文字大小是14px,共4字,因此自定义标注的大小是(56,14)。如果要使自定义标注的底部中心位置和基点(例,西单)对齐,则需将自定义标注向左移动28px,向上移动14px,因此offset设置为(-28,-14)。如下图所示:

   
偏移前      偏移后
       以上3步,就是实现文本标注的关键步骤。现附上完整代码:
<!DOCTYPE HTML>
<html>
<head>
<metahttp-equiv="Content-Type" content="text/html;charset=utf-8">
<style>
.label{position:relative;}
.labelspan{background-color:#ffffff;color:#000;border:1px solidred;font-size:14px;white-space:nowrap}
</style>
<scriptlanguage="javascript"src="http://webapi.amap.com/maps?v=1.2&key=yourkey"></script>
<scriptlanguage="javascript">
var mapObj,tool;
function mapInit(){
       mapObj = new AMap.Map("map",{
              center:new AMap.LngLat(116.374258,39.907415),
              level:16
       });
       mapObj.plugin(["AMap.ToolBar"],function(){
              //加载工具条
              tool = new AMap.ToolBar({
                     direction:false,
                     ruler:true,
                     autoPosition:false//禁止自动定位
              });
              mapObj.addControl(tool);
       });
       addCustomMarker();
}
function addCustomMarker(){
       var m = document.createElement("div");
       m.className = "label";
       var n = document.createElement("span");
       n.innerHTML = "文本标注";
       m.appendChild(n);
       var marker = new AMap.Marker({
              map:mapObj,
              position:new AMap.LngLat(116.374258,39.907415), //基点位置
              offset:new AMap.Pixel(-28,-14), //相对于基点的偏移位置
              //draggable:true, //是否可拖动
              content:m   //自定义覆盖物内容
       });
}
</script>
</head>
<bodyonLoad="mapInit()">
<div id="map"style="width:600px;height:500px;"></div>
</body>
</html>

思考:请大家根据已有的网页编程知识,以及刚才介绍的自定义Marker的方法,思考一下:如何给文本标注的文字内容设置一个喜欢的图片作为背景?



回复

使用道具 举报

最佳答案
0 

0

主题

2

帖子

12

积分

新手上路

Rank: 1

积分
12
沙发
发表于 2015-2-6 11:31:48 | 只看该作者
我想请问一下如何在地图缩放时,保持 marker 标记位置,而不至于位置偏移过大呢?
回复 支持 反对

使用道具 举报

最佳答案
5 

22

主题

760

帖子

1877

积分

超级版主

Rank: 8Rank: 8

积分
1877
QQ
板凳
 楼主| 发表于 2015-2-6 11:34:09 | 只看该作者
LeeUp 发表于 2015-2-6 11:31
我想请问一下如何在地图缩放时,保持 marker 标记位置,而不至于位置偏移过大呢? ...

Q: 为什么点标记在地图缩放后,偏离原来的位置?

在地图上添加某个坐标的点标记,如果点标记的图片大小不是API默认图片大小(36*36),需要根据点标记图片大小设置偏移量。偏移量设置方法请参考开发指南。
http://lbs.amap.com/home/faq/web ... 8A%A1%E7%AB%AF/#Q04
回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

2

帖子

12

积分

新手上路

Rank: 1

积分
12
地板
发表于 2015-2-6 17:37:13 | 只看该作者
谢谢!
回复

使用道具 举报

最佳答案
0 

1

主题

3

帖子

15

积分

新手上路

Rank: 1

积分
15
5#
发表于 2015-9-6 09:17:58 | 只看该作者
能请教下marker里的setExtData(ext:Any)吗,我想给marker加一个isAdd的标注,判断它是否已经被添加,一直获取不到
回复 支持 反对

使用道具 举报

最佳答案
0 

14

主题

39

帖子

172

积分

新手上路

Rank: 1

积分
172
6#
发表于 2015-10-19 17:30:05 | 只看该作者
我在marker中输入下划线的时候地图会缩小,请问如何处理才能在给marker输入标题的时候让地图的缩小功能失效
回复 支持 反对

使用道具 举报

最佳答案
2 

11

主题

55

帖子

193

积分

新手上路

Rank: 1

积分
193
7#
发表于 2016-4-25 10:52:02 | 只看该作者
不错。。赞一个,多出点儿这样的技术贴
一撸香天下,做事不说话
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|高德开发者论坛

Copyright ©2014 高德开发者论坛.All Rights Reserved |京ICP证070711号

意见反馈 常见问题 服务条款 联系我们
快速回复 返回顶部 返回列表