ui-map-baidu

angularjs ui for baidu map (百度地图)

Download as .zip Download as .tar.gz View on GitHub

Angularjs ui for baidu map

Angularjs ui module for baidu map

Install

使用下面命令安装并保持依赖到bower.json文件

bower install angular-ui-map-baidu --save

Usage

添加依赖的javascript文件到你的页面

<script type="text/javascript" src="bower_components/angular/angular.js"></script>
<script type="text/javascript" src="bower_components/angular-ui-utils/modules/event/event.js "></script>
<script type="text/javascript" src="bower_components/angular-ui-map-baidu/ui-map.js"></script>

不使用异步加载地图,还需加入地图链接

<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.5&ak=您的密钥"></script>

在你的angular module中加入ui.map依赖,如下

var myAppModule = angular.module('myAppModule', ['ui.map']);

在你需要添加地图的地方加入ui-map directive

<section id="map" ng-controller="MapCtrl" >
    <div ui-map="myMap" ui-options="mapOptions" class="map-canvas"></div>
</section>

这里的myMap将是MapCtrl controller的$scope里的一个变量,它是BMap.Map class的一个实例对象。 mapOptions则是设置map配置选项的对象变量,它是一个BMap.MapOptions object,其中包含自定义选项。

注意:ui-map的dom要设置width height属性,如设置css .map-canvas {width: 100%; height: 500px;}

异步加载Map

方法1

加载baidu地图时添加异步加载地图的监听回调函数如下面代码, 函数命名为init,在init函数里加载angular app。关于angular.bootstrap参见angular.bootstrap

function init() {
    angular.bootstrap(document.getElementById("map"), ['myAppModule']);
}

方法2

如下在module config中加入加载地图链接所需要的参数

myAppModule.config(['uiMapLoadParamsProvider', function (uiMapLoadParamsProvider) {
    uiMapLoadParamsProvider.setParams({
        v: '2.0', // 版本号
        ak:'xxxx' // 你的地图密钥
    });
}]);

并在app的顶层dom中加上ui-map-async-load directive,使其包含ui-map

<body ng-controller="MapCtrl" ui-map-async-load>
    <div ui-map="myMap" ui-options="mapOptions" class="map-canvas"></div>
</body>

缓存Map

在使用angularjs的ui router时,经常需要在不同router之间切换,但不希望每次切换都重新创建地图对象。通常使用的方法是在controller destroy时保存地图各项状态参数(如level、center等)和地图覆盖物的参数(如marker的point位置),在下次创建地图时重新绘制; 此‘ui-map’directive提供一种简便的方式,在controller destroy时保存整个地图对象和对于的dom,在下次创建地图时直接使用缓存的地图对象:

在‘ui-map’directive上添加ui-map-cache属性,并设置值为缓存地图对象的名称(此名称应该是全局唯一的)。

<body ng-controller="MapCtrl" ui-map-async-load>
    <div ui-map="myMap" ui-map-cache="mapCacheName" ui-options="mapOptions" class="map-canvas"></div>
    </body>

Options

在controller里的$scope上设置BMap.MapOptions object可以通过ui-map directive的ui-options属性传给地图

myAppModule.controller('MapCtrl', ['$scope', function ($scope) {
    $scope.mapOptions = {
        mapType: BMap.MapType.BMAP_PERSPECTIVE_MAP
    };
}]);

ngCenter ngZoom

使用ngCenter属性设置地图初始化的中心坐标点,使用ngZoom属性设置地图初始化zoom

$scope.mapOptions = {
    mapType: BMap.MapType.BMAP_PERSPECTIVE_MAP,
    // ui map config
    ngCenter: {
        lat: 33,
        lng: 120
    },
    ngZoom: 5
};

UI.Event

使用UI.Event插件可以自定义用户操作事件的响应处理逻辑,只需要在原事件名前加上前缀'map-'以绑定响应事件。 例如地图Map的'click'或'moveend'事件可以使用UI.Event对象的key map-clickmap-moveend来绑定事件,如下代码

<div  ui-map="myMap"ui-options="mapOptions" class="map-canvas"
    ui-event="{'map-click': 'addMarker($event, $params)', 'map-moveend': 'setZoomMessage(myMap.getZoom())' }">
</div>

如需添加复杂逻辑,可以通过$scope.myMap获取地图对象后,对其进行复杂操作