代码

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
body, html {width: 100%;height: 100%;margin:0;font-family:"微软雅黑";}
#allmap{width:100%;height:500px;}
p{margin-left:5px; font-size:14px;}
</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=sSelQoVi2L3KofLo1HOobonW"></script>
<script type="text/javascript" src="http://api.map.baidu.com/library/AreaRestriction/1.2/src/AreaRestriction_min.js"></script>
<title>设置地图显示范围</title>
</head>
<body>
<div id="allmap"></div>
<p>将地图显示范围设定在指定区域,地图拖出该区域后会重新弹回。</p>
</body>
</html>
<script type="text/javascript">
//百度地图API功能
var map = new BMap.Map("allmap");
map.centerAndZoom(new BMap.Point(116.404, 39.915), 13);
// map.centerAndZoom(new BMap.Point(116.027143, 39.772348),13); // 测试为左下角的位置
// map.centerAndZoom(new BMap.Point(116.832025, 40.126349),13); // 测试为右上角的位置
map.enableScrollWheelZoom(); // 允许滚动
var b = new BMap.Bounds(new BMap.Point(116.027143, 39.772348),new BMap.Point(116.832025, 40.126349)); // 范围 左下角,右上角的点位置
try { // js中尽然还有try catch方法,可以避免bug引起的错误
BMapLib.AreaRestriction.setBounds(map, b); // 已map为中心,已b为范围的地图
} catch (e) {
// 捕获错误异常
alert(e);
}
</script>

引入更多的类AreaRestriction_min

/**
 * @fileoverview 百度地图浏览区域限制类,对外开放。
 * 允许开发者输入限定浏览的地图区域的Bounds值,
 * 则地图浏览者只能在限定区域内浏览地图。
 * 基于Baidu Map API 1.2。
 *
 * @author Baidu Map Api Group
 * @version 1.2
 */
 
  /**
   * @namespace BMap的所有library类均放在BMapLib命名空间下
   */
  var BMapLib = window.BMapLib = BMapLib || {};
 
  (function() {
 
      /**
       * @exports AreaRestriction as BMapLib.AreaRestriction
       */
      var AreaRestriction =
          /**
           * AreaRestriction类,静态类,不用实例化
           * @class AreaRestriction类提供的都是静态方法,勿需实例化即可使用。     
           */
          BMapLib.AreaRestriction = function(){
          }
      
      /**
       * 是否已经对区域进行过限定的标识
       * @private
       * @type {Boolean}
       */
      var _isRestricted = false;
 
      /**
       * map对象
       * @private
       * @type {BMap}
       */
      var _map = null;
 
      /**
       * 开发者需要限定的区域
       * @private
       * @type {BMap.Bounds}
       */
      var _bounds = null;
 
      /**
       * 对可浏览地图区域的限定方法
       * @param {BMap} map map对象
       * @param {BMap.Bounds} bounds 开发者需要限定的区域
       *
       * @return {Boolean} 完成了对区域的限制即返回true,否则为false
       */
      AreaRestriction.setBounds = function(map, bounds){
          // 验证输入值的合法性
          if (!map ||
              !bounds ||
              !(bounds instanceof BMap.Bounds)) {
                  throw "请检查传入参数值的合法性";
                  return false;
          }
          
          if (_isRestricted) {
              this.clearBounds();
          }
          _map = map;
          _bounds = bounds;
 
          // 添加地图的moving事件,用以对浏览区域的限制
          _map.addEventListener("moveend", this._mapMoveendEvent);
          _isRestricted = true;
          return true;
      };
 
      /**
       * 需要绑定在地图移动事件中的操作,主要控制出界时的地图重新定位
       * @param {Event} e e对象
       *
       * @return 无返回值
       */
      AreaRestriction._mapMoveendEvent = function(e) {
          // 如果当前完全没有出界,则无操作
          if (_bounds.containsBounds(_map.getBounds())) {
              return;
          }
 
          // 两个需要对比的bound区域的边界值
          var curBounds = _map.getBounds(),
                curBoundsSW = curBounds.getSouthWest(),
                curBoundsNE = curBounds.getNorthEast(),
                _boundsSW = _bounds.getSouthWest(),
                _boundsNE = _bounds.getNorthEast();
 
          // 需要计算定位中心点的四个边界
          var boundary = {n : 0, e : 0, s : 0, w : 0};
          
         // 计算需要定位的中心点的上方边界
         boundary.n = (curBoundsNE.lat < _boundsNE.lat) ?
                                     curBoundsNE.lat :
                                     _boundsNE.lat;
 
         // 计算需要定位的中心点的右边边界
         boundary.e = (curBoundsNE.lng < _boundsNE.lng) ?
                                     curBoundsNE.lng :
                                     _boundsNE.lng;
 
         // 计算需要定位的中心点的下方边界
         boundary.s = (curBoundsSW.lat < _boundsSW.lat) ?
                                     _boundsSW.lat :
                                     curBoundsSW.lat;
 
         // 计算需要定位的中心点的左边边界
         boundary.w = (curBoundsSW.lng < _boundsSW.lng) ?
                                     _boundsSW.lng :
                                     curBoundsSW.lng;
         
         // 设置新的中心点
        var center = new BMap.Point(boundary.w + (boundary.e - boundary.w) / 2,
                                                          boundary.s + (boundary.n - boundary.s) / 2);
        setTimeout(function() {
             _map.panTo(center, {noAnimation : "no"});
         }, 1);
     };
 
     /**
      * 清除对地图浏览区域限定的状态
      * @return 无返回值
      */
     AreaRestriction.clearBounds = function(){
         if (!_isRestricted) {
             return;
         }
         _map.removeEventListener("moveend", this._mapMoveendEvent);
         _isRestricted = false;
     };
 
 })();

百度地图API示例之设置地图显示范围的更多相关文章

  1. 百度地图API示例之设置地图最大、最小级别

    代码 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" cont ...

  2. 百度地图API示例之设置级别setZoom与禁止拖拽disableDragging

    百度地图API示例之设置级别setZoom与禁止拖拽disableDragging 设置级别 <html> <head> <meta http-equiv="C ...

  3. 百度地图API示例之移动地图

    级别为6 级别为8 级别为12 代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Conten ...

  4. 百度地图API示例之根据城市名设置地图中心点

    代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" con ...

  5. 【百度地图API】如何利用地图API制作汽车沿道路行驶的动画?——如何获得道路层数据

    原文:[百度地图API]如何利用地图API制作汽车沿道路行驶的动画?--如何获得道路层数据 有几个做汽车导航的朋友问我说,他们想在地图上制作一辆车沿着道路行驶的动画.可是,百度地图的道路数据并没有公开 ...

  6. 【百度地图API】如何自定义地图图层?实例:制作麻点图(自定义图层+热区)

    原文:[百度地图API]如何自定义地图图层?实例:制作麻点图(自定义图层+热区) 摘要:自定义地图图层的用途十分广泛.常见的应用,比如制作魔兽地图和清华校园地图(使用切图工具即可轻松实现).今天我们来 ...

  7. 【百度地图API】如何在地图上添加标注?——另有:坐标拾取工具+打车费用接口介绍

    原文:[百度地图API]如何在地图上添加标注?--另有:坐标拾取工具+打车费用接口介绍 摘要: 在这篇文章中,你将学会,如何利用百度地图API进行标注.如何使用API新增的打车费用接口. ------ ...

  8. 【百度地图API】多家地图API内存消耗对比测验(带源码)

    原文:[百度地图API]多家地图API内存消耗对比测验(带源码) 任务描述: 啊,美妙的春节结束了.酸奶小妹和妈妈的山西平遥之旅也宣告成功!距离平遥古城7km,有一个同样身为“世界文化遗产”的寺庙,叫 ...

  9. 百度地图api通过地址显示地图,白名单

    百度地图api通过地址显示地图,白名单 http://developer.baidu.com/map/jsdemo.htm#i7_1?qq-pf-to=pcqq.c2c---------------- ...

随机推荐

  1. [转]http://makefiletutorial.com/

    Intro This makefile will always run. The default target is some_binary, because it is first. some_bi ...

  2. 使用POSIX正则库匹配一行中多个结果

    正则匹配与正则表达式是什么东西我就不说了,在这里说下POSIX这个c语言正则库在对字符串进行正则匹配时取出多个结果的问题. 首先简单说明下POSIX正则库的几个函数和使用方法 第一个函数:int re ...

  3. js中有趣的闭包(closure)

    一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...

  4. macos下sed小试

    linux下替换是这么干的 sed -i "s/xxxxxxxxxx/video_capture_module/g" project.pbxproj 但是macos下略有不同,照搬 ...

  5. TortoiseGit 添加ssh key

    TortoiseGit 使用扩展名为ppk的密钥,而不是ssh-keygen生成的rsa密钥.使用命令ssh-keygen -C "邮箱地址" -t rsa产生的密钥在Tortoi ...

  6. 传递引用类型参数的两种方式(转自 MSDN)

    引用类型的变量不直接包含其数据:它包含的是对其数据的引用.当通过值传递引用类型的参数时,有可能更改引用所指向的数据,如某类成员的值(更改属性的值),但是无法更改引用本身的值:也就是说,不能使用相同的引 ...

  7. IOS5中的Safari不兼容Javascript中的Date问题

    在IOS5以上版本(不包含IOS5)中的Safari浏览器能正确解释出Javascript中的 new Date('2016-06-07') 的日期对象. 但是在IOS5版本里面的Safari解释ne ...

  8. 伪类after的使用

    .center-tc { text-align: center; position: relative; color:red; &:before{ content:''; width: 10p ...

  9. EDIUS中调整YUV曲线的教程

    本篇文章重点地讲解了EDIUS调整YUV曲线的方法,是一篇很详细的EDIUS教程文章,它能帮助新手小伙伴快速掌握EDIUS视频编辑软件的某一知识点.相信坚持学习小编推荐的教程文章,你们会很快入门EDI ...

  10. Python(SQLAlchemy-ORM)模块之mysql操作

    一.SQLAlchemy简单介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数 ...