本文将向大家介绍百度地图API的标注(Marker)的使用方法和一些实现细节。

标注概述

标注(Marker)是用来表示一个点位置的可见元素,每个标注自身都包含地理信息。比如你在西单商场位置添加了一个标注,不论地图移动、缩放,标注都会跟随一起移动,保证其始终指向正确的地理位置。

从上面的图可以看出,不论地图如何变化标注始终指向“西单商场”的位置。

如何知道某个点的坐标?

上例中我们在西单商场位置添加了一个标注,那么我是如何知道它的坐标点呢?可以通过API的事件机制来获取:

map.addEventListener('click', function(e){    console.log(e.point);});

我们在map对象上添加了一个click事件的监听函数,当点击地图上某个位置时,监听函数通过控制台把当前点击的位置输出出来(注意需要有控制台的支持,比如firebug,如果没有控制台则可使用alert把point的lng和lat属性输出出来)。此外,你也可以使用API提供的坐标拾取工具来完成(http://dev.baidu.com/wiki/static/map/API/tool/getPoint/),它支持检索并且点击地图上任意位置时会出现该位置的坐标。

标注元素组成

从DOM元素构成角度看,一个完整的标注是由以下几个部分组成的:

  • 标注点击区域
  • 标注图标
  • 标注阴影

下面是示意图:

在地图API实现中,这三个DOM元素分别位于不同的容器中,这些容器可以通过map.getPanes()方法获得,其中markerMouseTarget就是标注点击区域所在容器、markerPane为标注图标所在容器,markerShadow为标注阴影所在图层。你可能会在自定义覆盖物时需要这些容器对象,这里只需要知道Marker的各个部分是如何放置的即可。

自定义标注图标

标注的图标是可以自定义的,通过Icon类可以自定义标注的图标,比如我希望使用下面这个图片作为标注图标:

已知这个图标大小为20x32。我们初始化地图,接着定义Icon,并赋给一个Marker实例:

var map =new BMap.Map('container');map.centerAndZoom(new BMap.Point(116.380797, 39.918497), 18);

var icon = new BMap.Icon('pin.png', new BMap.Size(20, 32), {    anchor: new BMap.Size(10, 30)});

var mkr =new BMap.Marker(new BMap.Point(116.38075,39.918986), {    icon: icon});

map.addOverlay(mkr);

我们给定icon所需图片的url,接着是图片的尺寸,另外我们还增加了anchor属性,这个是干什么用的呢?在自定义标注图标时有一点需要注意的就是标注的定位点(anchor),通俗的讲就是要指定图片的哪个位置是与标注真正的位置对应在一起。我们通过下面的图示来说明:

我们获取到地图上一个位置(上图中标注下端所在的黑色小方块),那么我也希望我标注中间下端指向这个位置,这个就需要通过anchor来调节。anchor的意义如下图所示:

即定位点距离图片左上角的偏移量。

如果不给anchor的话,API会自动获取图片中心点作为anchor位置:

我们看到标注图片中心的位置覆盖在那个小方块区域。

除了anchor之外,还有一个infoWindowAnchor属性,它是用来控制信息窗口开启的位置的(注意这里调用的是Marker的openInfoWindow方法,而不是Map的openInfoWindow方法),默认情况下它和icon的anchor是一个位置:

标注被InfoWindow的底角挡住了,通过infoWindowAnchor属性就可以改变开启位置:

var icon =new BMap.Icon('pin.png', new BMap.Size(20, 32), {    anchor: new BMap.Size(10, 30),    infoWindowAnchor: new BMap.Size(10, 0)})

再看看效果:

尖角位置已经发生了改变。

标注拖拽

标注支持拖拽,并且可以配置是否有动画效果,我们修改创建标注的代码:

var mkr =new BMap.Marker(new BMap.Point(116.38075,39.918986), {    icon: icon,    enableDragging: true,    raiseOnDrag: true});

这里开启了拖拽功能以及响应的动画效果。如果此时拖拽地图你会得到如下效果:

通过监听标注的dragend事件,你可以知道拖拽结束后标注的地理位置:

mkr.addEventListener('dragend', function(e){    alert(e.point.lng +', '+ e.point.lat);})

标注阴影

为了增加立体感,可以单独给标注添加阴影,当然你也可以把阴影直接画在icon所用的图片上,但是由于阴影和标注本身在一起,所以就不建议使用任何动画效果,否则会缺乏真实感。阴影可以通过MarkerOptions的shadow属性配置,类型也是一个Icon实例。具体使用方法和icon属性一样,这里就不赘述了。

好文要顶 关注我 收藏该文  

百度地图API详解之地图标注(一)相关推荐

  1. 百度地图API详解之地图标注

    本文将向大家介绍百度地图API的标注(Marker)的使用方法和一些实现细节. 标注概述 标注(Marker)是用来表示一个点位置的可见元素,每个标注自身都包含地理信息.比如你在西单商场位置添加了一个 ...

  2. 百度地图API详解之地图标注覆盖物

    本文将向大家介绍百度地图API的标注(Marker)的使用方法和一些实现细节. 标注概述 标注(Marker)是用来表示一个点位置的可见元素,每个标注自身都包含地理信息.比如你在西单商场位置添加了一个 ...

  3. 百度地图API详解之地图坐标系统

    博客原文地址:http://www.jiazhengblog.com/blog/2011/07/02/289/ 我们都知道地球是圆的,电脑显示器是平的,要想让位于球面的形状显示在平面的显示器上就必然需 ...

  4. html加载百度地图,百度地图API详解之地图API加载方式

    本文将向大家介绍百度地图API的两种不同加载方式:同步加载和异步加载. 同步加载 这是最常见的加载方式,开发者需要在页面的head标签内添加一个script标签,标签的src属性填写为地图API的地址 ...

  5. 百度地图API详解之公交导航

    原文地址:http://blog.csdn.net/sup_heaven/article/details/8461593 只是作为备忘!!! 一次调试百度地图多marker事件监听的问题,不知如何解决 ...

  6. 百度地图API详解之自定义地图类型

    个人博客原文地址:http://www.jiazhengblog.com/blog/2011/10/08/422/ 今天的文章主要介绍如何利用地图API实现自定义地图. 百度地图API目前默认支持两种 ...

  7. android 百度地图驾车导航,百度地图API详解之驾车导航

    本文将向大家介绍如何使用百度地图API提供的驾车导航服务进行开发. 一个简单的示例 驾车导航服务根据传入的起点和终点信息给出从起点到终点的驾车路线,我们先从一个最简单的示例看起: var map = ...

  8. 百度地图api设置html5,百度地图API详解之自定义地图类型

    今天的文章主要介绍如何利用地图API实现自定义地图. 百度地图API目前默认支持两种地图类型(map type):普通图和三维图,它们分别通过常量BMAP_NORMAL_MAP和BMAP_PERSPE ...

  9. java 腾讯地图api,腾讯地图API详解

    最近项目中需要通过用户输入的地址来判断是否在选定的地址范围内,于是想到了使用百度地图的API来通过地址得到经纬度,不过看了半天发现百度的API太不好用了,于是又找了一下腾讯地图的API,功能都写的很清 ...

最新文章

  1. tensor和模型 保存与加载 PyTorch
  2. Atitit Java OpenCV 捕获视频
  3. 一种简单又有效的设置虚拟机网络的方法
  4. 以太网交换机与路由—Vecloud微云
  5. 12、MySQL逻辑运算符
  6. Java获取系统文件类型图标并显示在JSP上
  7. 怎么监听linux防火墙,linux怎么查看防火墙是否开启并清除防火墙规则?
  8. 利用Python实现定时发送邮件,实现一款营销工具
  9. Bootstrap禁用某个按钮组
  10. QTP 自动化测试--定义变量
  11. 正则化regularization
  12. 【回文串3】LeetCode 125. Valid Palindrome
  13. 深度学习 --- 优化入门五(Batch Normalization(批量归一化)二)
  14. 9. 工作区和暂存区
  15. hzk16 8 16c语言示例,[资料共享]汉字库HZK16的使用,强烈推荐: 486959c6.rar
  16. 华为荣耀8C安装Google play store的记录
  17. google书签删除了怎么恢复?谷歌浏览器删除的书签怎么恢复?
  18. ArcGIS之栅格地图配准
  19. scipy Matlab-style IIR 滤波器设计上(Butterworth\Chebyshev type I \Chebyshev type II )
  20. kubectl describe命令详解

热门文章

  1. (六)python网络爬虫(理论+实战)——常见数据格式及解析方法
  2. 移动联通和电信的号段判断
  3. 斯密斯圆图-学习笔记
  4. 直升机FPGA多路视频采集叠加OSD字符VGA-HDMI-DVI-SDI采集融合板卡设计
  5. 图像处理-机器学习一些科普材料汇集 - 持续更新中_拔剑-浆糊的传说_新浪博客...
  6. 货运APP雨后春笋 传统物流模式将被改变
  7. 最酷的windows后门
  8. 什么是Web 2.0
  9. Java后端基础知识笔记
  10. 密码学入门:几种简单的密码