(function webpackUniversalModuleDefinition(root, factory) {
	if(typeof exports === 'object' && typeof module === 'object')
		module.exports = factory(require("echarts"));
	else if(typeof define === 'function' && define.amd)
		define(["echarts"], factory);
	else if(typeof exports === 'object')
		exports["bmap"] = factory(require("echarts"));
	else
		root["echarts"] = root["echarts"] || {}, root["echarts"]["bmap"] = factory(root["echarts"]);
})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};

/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {

/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId])
/******/ 			return installedModules[moduleId].exports;

/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			exports: {},
/******/ 			id: moduleId,
/******/ 			loaded: false
/******/ 		};

/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);

/******/ 		// Flag the module as loaded
/******/ 		module.loaded = true;

/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}


/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;

/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;

/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";

/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_RESULT__;/**
	 * BMap component extension
	 */
	!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {

	    __webpack_require__(1).registerCoordinateSystem(
	        'bmap', __webpack_require__(2)
	    );
	    __webpack_require__(3);
	    __webpack_require__(4);

	    // Action
	    __webpack_require__(1).registerAction({
	        type: 'bmapRoam',
	        event: 'bmapRoam',
	        update: 'updateLayout'
	    }, function (payload, ecModel) {
	        ecModel.eachComponent('bmap', function (bMapModel) {
	            var bmap = bMapModel.getBMap();
	            var center = bmap.getCenter();
	            bMapModel.setCenterAndZoom([center.lng, center.lat], bmap.getZoom());
	        });
	    });

	    return {
	        version: '1.0.0'
	    };
	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));

/***/ },
/* 1 */
/***/ function(module, exports) {

	module.exports = __WEBPACK_EXTERNAL_MODULE_1__;

/***/ },
/* 2 */
/***/ function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {

	    var echarts = __webpack_require__(1);

	    function BMapCoordSys(bmap, api) {
	        this._bmap = bmap;
	        this.dimensions = ['lng', 'lat'];
	        this._mapOffset = [0, 0];

	        this._api = api;
	    }

	    BMapCoordSys.prototype.dimensions = ['lng', 'lat'];

	    BMapCoordSys.prototype.setMapOffset = function (mapOffset) {
	        this._mapOffset = mapOffset;
	    };

	    BMapCoordSys.prototype.getBMap = function () {
	        return this._bmap;
	    };

	    BMapCoordSys.prototype.dataToPoint = function (data) {
	        var point = new BMap.Point(data[0], data[1]);
	        var px = this._bmap.pointToOverlayPixel(point);
	        var mapOffset = this._mapOffset;
	        return [px.x - mapOffset[0], px.y - mapOffset[1]];
	    };

	    BMapCoordSys.prototype.pointToData = function (pt) {
	        var mapOffset = this._mapOffset;
	        var pt = this._bmap.overlayPixelToPoint({
	            x: pt[0] + mapOffset[0],
	            y: pt[1] + mapOffset[1]
	        });
	        return [pt.lng, pt.lat];
	    };

	    BMapCoordSys.prototype.getViewRect = function () {
	        var api = this._api;
	        return new echarts.graphic.BoundingRect(0, 0, api.getWidth(), api.getHeight());
	    };

	    BMapCoordSys.prototype.getRoamTransform = function () {
	        return echarts.matrix.create();
	    };

	    var Overlay;

	    // For deciding which dimensions to use when creating list data
	    BMapCoordSys.dimensions = BMapCoordSys.prototype.dimensions;

	    function createOverlayCtor() {
	        function Overlay(root) {
	            this._root = root;
	        }

	        Overlay.prototype = new BMap.Overlay();
	        /**
	         * 初始化
	         *
	         * @param {BMap.Map} map
	         * @override
	         */
	        Overlay.prototype.initialize = function (map) {
	            map.getPanes().labelPane.appendChild(this._root);
	            return this._root;
	        };
	        /**
	         * @override
	         */
	        Overlay.prototype.draw = function () {};

	        return Overlay;
	    }

	    BMapCoordSys.create = function (ecModel, api) {
	        var bmapCoordSys;
	        var root = api.getDom();

	        // TODO Dispose
	        ecModel.eachComponent('bmap', function (bmapModel) {
	            var viewportRoot = api.getZr().painter.getViewportRoot();
	            if (typeof BMap === 'undefined') {
	                throw new Error('BMap api is not loaded');
	            }
	            Overlay = Overlay || createOverlayCtor();
	            if (bmapCoordSys) {
	                throw new Error('Only one bmap component can exist');
	            }
	            if (!bmapModel.__bmap) {
	                // Not support IE8
	                var bmapRoot = root.querySelector('.ec-extension-bmap');
	                if (bmapRoot) {
	                    // Reset viewport left and top, which will be changed
	                    // in moving handler in BMapView
	                    viewportRoot.style.left = '0px';
	                    viewportRoot.style.top = '0px';
	                    root.removeChild(bmapRoot);
	                }
	                bmapRoot = document.createElement('div');
	                bmapRoot.style.cssText = 'width:100%;height:100%';
	                // Not support IE8
	                bmapRoot.classList.add('ec-extension-bmap');
	                root.appendChild(bmapRoot);
	                var bmap = bmapModel.__bmap = new BMap.Map(bmapRoot);

	                var overlay = new Overlay(viewportRoot);
	                bmap.addOverlay(overlay);
	            }
	            var bmap = bmapModel.__bmap;

	            // Set bmap options
	            // centerAndZoom before layout and render
	            var center = bmapModel.get('center');
	            var zoom = bmapModel.get('zoom');
	            if (center && zoom) {
	                var pt = new BMap.Point(center[0], center[1]);
	                bmap.centerAndZoom(pt, zoom);
	            }

	            bmapCoordSys = new BMapCoordSys(bmap, api);
	            bmapCoordSys.setMapOffset(bmapModel.__mapOffset || [0, 0]);
	            bmapModel.coordinateSystem = bmapCoordSys;
	        });

	        ecModel.eachSeries(function (seriesModel) {
	            if (seriesModel.get('coordinateSystem') === 'bmap') {
	                seriesModel.coordinateSystem = bmapCoordSys;
	            }
	        });
	    };

	    return BMapCoordSys;
	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));

/***/ },
/* 3 */
/***/ function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {

	    function v2Equal(a, b) {
	        return a && b && a[0] === b[0] && a[1] === b[1];
	    }

	    return __webpack_require__(1).extendComponentModel({
	        type: 'bmap',

	        getBMap: function () {
	            // __bmap is injected when creating BMapCoordSys
	            return this.__bmap;
	        },

	        setCenterAndZoom: function (center, zoom) {
	            this.option.center = center;
	            this.option.zoom = zoom;
	        },

	        centerOrZoomChanged: function (center, zoom) {
	            var option = this.option;
	            return !(v2Equal(center, option.center) && zoom === option.zoom);
	        },

	        defaultOption: {
	            center: null,

	            zoom: 1,

	            mapStyle: {},

	            roam: false
	        }
	    });
	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));

/***/ },
/* 4 */
/***/ function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {

	    return __webpack_require__(1).extendComponentView({
	        type: 'bmap',

	        render: function (bMapModel, ecModel, api) {
	            var rendering = true;

	            var bmap = bMapModel.getBMap();
	            var viewportRoot = api.getZr().painter.getViewportRoot();
	            var coordSys = bMapModel.coordinateSystem;
	            var moveHandler = function (type, target) {
	                if (rendering) {
	                    return;
	                }
	                var offsetEl = viewportRoot.parentNode.parentNode.parentNode;
	                var mapOffset = [
	                    -parseInt(offsetEl.style.left, 10) || 0,
	                    -parseInt(offsetEl.style.top, 10) || 0
	                ];
	                viewportRoot.style.left = mapOffset[0] + 'px';
	                viewportRoot.style.top = mapOffset[1] + 'px';

	                coordSys.setMapOffset(mapOffset);
	                bMapModel.__mapOffset = mapOffset;

	                api.dispatchAction({
	                    type: 'bmapRoam'
	                });
	            };

	            function zoomEndHandler() {
	                if (rendering) {
	                    return;
	                }
	                api.dispatchAction({
	                    type: 'bmapRoam'
	                });
	            }

	            bmap.removeEventListener('moving', this._oldMoveHandler);
	            // FIXME
	            // Moveend may be triggered by centerAndZoom method when creating coordSys next time
	            // bmap.removeEventListener('moveend', this._oldMoveHandler);
	            bmap.removeEventListener('zoomend', this._oldZoomEndHandler);
	            bmap.addEventListener('moving', moveHandler);
	            // bmap.addEventListener('moveend', moveHandler);
	            bmap.addEventListener('zoomend', zoomEndHandler);

	            this._oldMoveHandler = moveHandler;
	            this._oldZoomEndHandler = zoomEndHandler;

	            var roam = bMapModel.get('roam');
	            if (roam && roam !== 'scale') {
	                bmap.enableDragging();
	            }
	            else {
	                bmap.disableDragging();
	            }
	            if (roam && roam !== 'move') {
	                bmap.enableScrollWheelZoom();
	                bmap.enableDoubleClickZoom();
	                bmap.enablePinchToZoom();
	            }
	            else {
	                bmap.disableScrollWheelZoom();
	                bmap.disableDoubleClickZoom();
	                bmap.disablePinchToZoom();
	            }

	            var originalStyle = bMapModel.__mapStyle;

	            var newMapStyle = bMapModel.get('mapStyle') || {};
	            // FIXME, Not use JSON methods
	            var mapStyleStr = JSON.stringify(newMapStyle);
	            if (JSON.stringify(originalStyle) !== mapStyleStr) {
	                bmap.setMapStyle(newMapStyle);
	                bMapModel.__mapStyle = JSON.parse(mapStyleStr);
	            }

	            rendering = false;
	        }
	    });
	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));

/***/ }
/******/ ])
});
;