Socket
Socket
Sign inDemoInstall

echarts-extension-gmap

Package Overview
Dependencies
0
Maintainers
1
Versions
13
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.4.0 to 1.5.0

dist/echarts-extension-gmap.cjs.js

422

dist/echarts-extension-gmap.js
/*!
* echarts-extension-gmap
* @version 1.4.0
* @version 1.5.0
* @author plainheart

@@ -8,3 +8,3 @@ *

*
* Copyright (c) 2020 Zhongxiang.Wang
* Copyright (c) 2020-2022 Zhongxiang Wang
*

@@ -31,34 +31,28 @@ * Permission is hereby granted, free of charge, to any person obtaining a copy

(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('echarts')) :
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('echarts/lib/echarts')) :
typeof define === 'function' && define.amd ? define(['exports', 'echarts'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.echarts = global.echarts || {}, global.echarts.gmap = {}), global.echarts));
}(this, (function (exports, echarts) { 'use strict';
})(this, (function (exports, echarts) { 'use strict';
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () {
return e[k];
}
});
}
});
}
n['default'] = e;
return Object.freeze(n);
var ecVer = echarts.version.split('.');
var isNewEC = ecVer[0] > 4;
var COMPONENT_TYPE = 'gmap';
function v2Equal(a, b) {
return a && b && a[0] === b[0] && a[1] === b[1];
}
var echarts__namespace = /*#__PURE__*/_interopNamespace(echarts);
var name = "echarts-extension-gmap";
var version = "1.4.0";
/* global google */
function dataToCoordSize(dataSize, dataItem) {
dataItem = dataItem || [0, 0];
return echarts.util.map([0, 1], function (dimIdx) {
var val = dataItem[dimIdx];
var halfSize = dataSize[dimIdx] / 2;
var p1 = [];
var p2 = [];
p1[dimIdx] = val - halfSize;
p2[dimIdx] = val + halfSize;
p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx];
return Math.abs(this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]);
}, this);
}
function GMapCoordSys(gmap, api) {

@@ -70,35 +64,23 @@ this._gmap = gmap;

}
var GMapCoordSysProto = GMapCoordSys.prototype;
// exclude private and unsupported options
var excludedOptions = [
'echartsLayerZIndex',
'renderOnMoving'
];
GMapCoordSysProto.dimensions = ['lng', 'lat'];
GMapCoordSysProto.setZoom = function(zoom) {
var excludedOptions = ['echartsLayerZIndex', 'renderOnMoving'];
GMapCoordSysProto.setZoom = function (zoom) {
this._zoom = zoom;
};
GMapCoordSysProto.setCenter = function(center) {
GMapCoordSysProto.setCenter = function (center) {
var latlng = new google.maps.LatLng(center[1], center[0]);
this._center = latLngToPixel(latlng, this._gmap);
};
GMapCoordSysProto.setMapOffset = function(mapOffset) {
GMapCoordSysProto.setMapOffset = function (mapOffset) {
this._mapOffset = mapOffset;
};
GMapCoordSysProto.setGoogleMap = function(gmap) {
GMapCoordSysProto.setGoogleMap = function (gmap) {
this._gmap = gmap;
};
GMapCoordSysProto.getGoogleMap = function() {
GMapCoordSysProto.getGoogleMap = function () {
return this._gmap;
};
GMapCoordSysProto.dataToPoint = function(data) {
GMapCoordSysProto.dataToPoint = function (data) {
var latlng = new google.maps.LatLng(data[1], data[0]);

@@ -109,27 +91,19 @@ var px = latLngToPixel(latlng, this._gmap);

};
GMapCoordSysProto.pointToData = function(pt) {
GMapCoordSysProto.pointToData = function (pt) {
var mapOffset = this._mapOffset;
var latlng = pixelToLatLng(
new google.maps.Point(pt[0] + mapOffset[0], pt[1] + mapOffset[1]),
this._gmap
);
var latlng = pixelToLatLng(new google.maps.Point(pt[0] + mapOffset[0], pt[1] + mapOffset[1]), this._gmap);
return [latlng.lng(), latlng.lat()];
};
GMapCoordSysProto.getViewRect = function() {
GMapCoordSysProto.getViewRect = function () {
var api = this._api;
return new echarts.graphic.BoundingRect(0, 0, api.getWidth(), api.getHeight());
};
GMapCoordSysProto.getRoamTransform = function() {
GMapCoordSysProto.getRoamTransform = function () {
return echarts.matrix.create();
};
GMapCoordSysProto.prepareCustoms = function(data) {
GMapCoordSysProto.prepareCustoms = function () {
var rect = this.getViewRect();
return {
coordSys: {
// The name exposed to user is always 'cartesian2d' but not 'grid'.
type: 'gmap',
type: COMPONENT_TYPE,
x: rect.x,

@@ -146,41 +120,22 @@ y: rect.y,

};
function dataToCoordSize(dataSize, dataItem) {
dataItem = dataItem || [0, 0];
return echarts.util.map(
[0, 1],
function(dimIdx) {
var val = dataItem[dimIdx];
var halfSize = dataSize[dimIdx] / 2;
var p1 = [];
var p2 = [];
p1[dimIdx] = val - halfSize;
p2[dimIdx] = val + halfSize;
p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx];
return Math.abs(
this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]
);
},
this
);
}
// For deciding which dimensions to use when creating list data
GMapCoordSys.dimensions = GMapCoordSysProto.dimensions;
GMapCoordSys.create = function(ecModel, api) {
GMapCoordSysProto.convertToPixel = function (ecModel, finder, value) {
// here we don't use finder as only one google map component is allowed
return this.dataToPoint(value);
};
GMapCoordSysProto.convertFromPixel = function (ecModel, finder, value) {
// here we don't use finder as only one google map component is allowed
return this.pointToData(value);
};
GMapCoordSys.create = function (ecModel, api) {
var gmapCoordSys;
var root = api.getDom();
ecModel.eachComponent('gmap', function(gmapModel) {
ecModel.eachComponent(COMPONENT_TYPE, function (gmapModel) {
var painter = api.getZr().painter;
var viewportRoot = painter.getViewportRoot();
if (typeof google === 'undefined'
|| typeof google.maps === 'undefined'
|| typeof google.maps.Map === 'undefined') {
throw new Error('It seems that Google Map API has not been loaded completely yet.');
if (typeof google === 'undefined' || !google.maps || !google.maps.Map) {
throw new Error('Google Map API is not loaded');
}
Overlay = Overlay || createOverlayCtor();
if (gmapCoordSys) {
throw new Error('Only one google map component can exist');
throw new Error('Only one google map component is allowed');
}

@@ -190,58 +145,50 @@ var gmap = gmapModel.getGoogleMap();

// Not support IE8
var gmapRoot = root.querySelector('.ec-extension-google-map');
var className = 'ec-extension-google-map';
var gmapRoot = root.querySelector('.' + className);
if (gmapRoot) {
// Reset viewport left and top, which will be changed
// in moving handler in GMapView
viewportRoot.style.left = '0px';
viewportRoot.style.top = '0px';
viewportRoot.style.width = '100%';
viewportRoot.style.height = '100%';
viewportRoot.style.left = '0';
viewportRoot.style.top = '0';
root.removeChild(gmapRoot);
}
gmapRoot = document.createElement('div');
gmapRoot.className = 'ec-extension-google-map';
gmapRoot.style.cssText = 'position:absolute;top:0;left:0;right:0;bottom:0;';
gmapRoot.className = className;
gmapRoot.style.cssText = 'position:absolute;top:0;left:0;right:0;bottom:0';
root.appendChild(gmapRoot);
var options = echarts.util.clone(gmapModel.get());
var echartsLayerZIndex = options.echartsLayerZIndex;
// delete excluded options
echarts.util.each(excludedOptions, function(key) {
echarts.util.each(excludedOptions, function (key) {
delete options[key];
});
var center = options.center;
var _center = options.center;
// normalize center
if (echarts.util.isArray(center)) {
if (echarts.util.isArray(_center)) {
options.center = {
lng: center[0],
lat: center[1]
lng: _center[0],
lat: _center[1]
};
}
gmap = new google.maps.Map(gmapRoot, options);
gmapModel.setGoogleMap(gmap);
gmapModel.__projectionChangeListener && gmapModel.__projectionChangeListener.remove();
gmapModel.__projectionChangeListener = google.maps.event.addListener(gmap, 'projection_changed',
function() {
var layer = gmapModel.getEChartsLayer();
layer && layer.setMap(null);
gmapModel.__projectionChangeListener = google.maps.event.addListener(gmap, 'projection_changed', function () {
var layer = gmapModel.getEChartsLayer();
layer && layer.setMap(null);
var overlay = new Overlay(viewportRoot, gmap);
overlay.setZIndex(echartsLayerZIndex);
gmapModel.setEChartsLayer(overlay);
});
var overlay = new Overlay(viewportRoot, gmap);
overlay.setZIndex(echartsLayerZIndex);
gmapModel.setEChartsLayer(overlay);
}
);
// Override
painter.getViewportRootOffset = function() {
return { offsetLeft: 0, offsetTop: 0 };
painter.getViewportRootOffset = function () {
return {
offsetLeft: 0,
offsetTop: 0
};
};
}
var center = gmapModel.get('center');
var normalizedCenter = [
center.lng != null ? center.lng : center[0],
center.lat != null ? center.lat : center[1]
];
var normalizedCenter = [center.lng != null ? center.lng : center[0], center.lat != null ? center.lat : center[1]];
var zoom = gmapModel.get('zoom');

@@ -260,3 +207,2 @@ if (center && zoom) {

}
gmapCoordSys = new GMapCoordSys(gmap, api);

@@ -266,52 +212,44 @@ gmapCoordSys.setMapOffset(gmapModel.__mapOffset || [0, 0]);

gmapCoordSys.setCenter(normalizedCenter);
gmapModel.coordinateSystem = gmapCoordSys;
});
ecModel.eachSeries(function(seriesModel) {
if (seriesModel.get('coordinateSystem') === 'gmap') {
ecModel.eachSeries(function (seriesModel) {
if (seriesModel.get('coordinateSystem') === COMPONENT_TYPE) {
seriesModel.coordinateSystem = gmapCoordSys;
}
});
// return created coordinate systems
return gmapCoordSys && [gmapCoordSys];
};
var Overlay;
function createOverlayCtor() {
function Overlay(root, gmap) {
this._root = root;
this.setMap(gmap);
}
function Overlay(root, gmap) {
this._root = root;
this.setMap(gmap);
}
Overlay.prototype = new google.maps.OverlayView();
Overlay.prototype.onAdd = function () {
var gmap = this.getMap();
gmap.__overlayProjection = this.getProjection();
gmap.getDiv().querySelector('.gm-style > div').appendChild(this._root);
};
Overlay.prototype = new google.maps.OverlayView();
Overlay.prototype.onAdd = function() {
var gmap = this.getMap();
gmap.__overlayProjection = this.getProjection();
gmap.getDiv().querySelector('.gm-style > div').appendChild(this._root);
};
/**
* @override
*/
Overlay.prototype.draw = function() {
google.maps.event.trigger(this.getMap(), 'gmaprender');
};
Overlay.prototype.onRemove = function() {
this._root.parentNode.removeChild(this._root);
this._root = null;
};
Overlay.prototype.setZIndex = function(zIndex) {
this._root.style.zIndex = zIndex;
};
Overlay.prototype.getZIndex = function() {
return this._root.style.zIndex;
};
return Overlay;
/**
* @override
*/
Overlay.prototype.draw = function () {
google.maps.event.trigger(this.getMap(), 'gmaprender');
};
Overlay.prototype.onRemove = function () {
this._root.parentNode.removeChild(this._root);
this._root = null;
};
Overlay.prototype.setZIndex = function (zIndex) {
this._root.style.zIndex = zIndex;
};
Overlay.prototype.getZIndex = function () {
return this._root.style.zIndex;
};
return Overlay;
}
function latLngToPixel(latLng, map) {

@@ -322,6 +260,4 @@ var projection = map.__overlayProjection;

}
return projection.fromLatLngToContainerPixel(latLng);
}
function pixelToLatLng(pixel, map) {

@@ -332,44 +268,36 @@ var projection = map.__overlayProjection;

}
return projection.fromContainerPixelToLatLng(pixel);
}
GMapCoordSysProto.dimensions = GMapCoordSys.dimensions = ['lng', 'lat'];
GMapCoordSysProto.type = COMPONENT_TYPE;
function v2Equal(a, b) {
return a && b && a[0] === b[0] && a[1] === b[1];
}
echarts__namespace.extendComponentModel({
type: 'gmap',
setGoogleMap: function(gmap) {
var GMapModel = {
type: COMPONENT_TYPE,
setGoogleMap: function setGoogleMap(gmap) {
this.__gmap = gmap;
},
getGoogleMap: function() {
getGoogleMap: function getGoogleMap() {
// __gmap is set when creating GMapCoordSys
return this.__gmap;
},
setEChartsLayer: function(layer) {
setEChartsLayer: function setEChartsLayer(layer) {
this.__echartsLayer = layer;
},
getEChartsLayer: function() {
getEChartsLayer: function getEChartsLayer() {
return this.__echartsLayer;
},
setCenterAndZoom: function(center, zoom) {
setCenterAndZoom: function setCenterAndZoom(center, zoom) {
this.option.center = center;
this.option.zoom = zoom;
},
centerOrZoomChanged: function(center, zoom) {
centerOrZoomChanged: function centerOrZoomChanged(center, zoom) {
var option = this.option;
return !(v2Equal(center, option.center) && zoom === option.zoom);
},
defaultOption: {
center: { lat: 39.90923, lng: 116.397428 },
center: {
lat: 39.90923,
lng: 116.397428
},
zoom: 5,
// extension options

@@ -381,12 +309,10 @@ // since v1.4.0

}
});
};
var GMapModel$1 = isNewEC ? echarts.ComponentModel.extend(GMapModel) : GMapModel;
/* global google */
echarts__namespace.extendComponentView({
type: 'gmap',
render: function(gmapModel, ecModel, api) {
var GMapView = {
type: COMPONENT_TYPE,
render: function render(gmapModel, ecModel, api) {
var rendering = true;
var gmap = gmapModel.getGoogleMap();

@@ -399,8 +325,6 @@ var viewportRoot = api.getZr().painter.getViewportRoot();

var oldHeight = offsetEl.clientHeight;
gmap.setOptions({
gestureHandling: gmapModel.get('roam') ? 'auto' : 'none'
});
var renderHandler = function() {
var renderHandler = function renderHandler() {
if (rendering) {

@@ -416,15 +340,9 @@ return;

}
var mapOffset = [
-parseInt(offsetEl.style.left, 10) || 0,
-parseInt(offsetEl.style.top, 10) || 0
];
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);
gmapModel.__mapOffset = mapOffset;
api.dispatchAction({
type: 'gmapRoam',
type: COMPONENT_TYPE + 'Roam',
animation: {

@@ -438,30 +356,22 @@ // in ECharts 5.x,

};
var resizeHandler = function() {
echarts__namespace.getInstanceByDom(api.getDom()).resize();
var resizeHandler = function resizeHandler() {
echarts.getInstanceByDom(api.getDom()).resize();
};
this._oldRenderHandler && this._oldRenderHandler.remove();
if (!renderOnMoving) {
renderHandler = echarts__namespace.throttle(renderHandler, 100, true);
resizeHandler = echarts__namespace.throttle(resizeHandler, 100, true);
// TODO hide layer when moving
renderHandler = echarts.throttle(renderHandler, 100, true);
resizeHandler = echarts.throttle(resizeHandler, 100, true);
}
this._oldRenderHandler = google.maps.event.addListener(gmap, 'gmaprender', renderHandler);
rendering = false;
},
dispose: function(ecModel, api) {
dispose: function dispose() {
this._oldRenderHandler && this._oldRenderHandler.remove();
this._oldRenderHandler = null;
var component = ecModel.getComponent('gmap');
var component = this.__model;
if (!component) {
return;
}
var gmapInstance = component.getGoogleMap();
if (gmapInstance) {

@@ -478,6 +388,4 @@ // remove injected projection

}
component.setGoogleMap(null);
component.setEChartsLayer(null);
if (component.coordinateSystem) {

@@ -488,4 +396,8 @@ component.coordinateSystem.setGoogleMap(null);

}
});
};
var GMapView$1 = isNewEC ? echarts.ComponentView.extend(GMapView) : GMapView;
var name = "echarts-extension-gmap";
var version = "1.5.0";
/**

@@ -495,13 +407,45 @@ * Google Map component extension

echarts__namespace.registerCoordinateSystem('gmap', GMapCoordSys);
/**
* @typedef {import('../export').EChartsExtensionRegisters} EChartsExtensionRegisters
*/
// Action
echarts__namespace.registerAction(
{
type: 'gmapRoam',
event: 'gmapRoam',
/**
* Google Map extension installer
* @param {EChartsExtensionRegisters} registers
*/
function install(registers) {
// add coordinate system support for pie series for ECharts < 5.4.0
if (!isNewEC || ecVer[0] == 5 && ecVer[1] < 4) {
registers.registerLayout(function (ecModel) {
ecModel.eachSeriesByType('pie', function (seriesModel) {
var coordSys = seriesModel.coordinateSystem;
var data = seriesModel.getData();
var valueDim = data.mapDimension('value');
if (coordSys && coordSys.type === COMPONENT_TYPE) {
var center = seriesModel.get('center');
var point = coordSys.dataToPoint(center);
var cx = point[0];
var cy = point[1];
data.each(valueDim, function (value, idx) {
var layout = data.getItemLayout(idx);
layout.cx = cx;
layout.cy = cy;
});
}
});
});
}
// Model
isNewEC ? registers.registerComponentModel(GMapModel$1) : registers.extendComponentModel(GMapModel$1);
// View
isNewEC ? registers.registerComponentView(GMapView$1) : registers.extendComponentView(GMapView$1);
// Coordinate System
registers.registerCoordinateSystem(COMPONENT_TYPE, GMapCoordSys);
// Action
registers.registerAction({
type: COMPONENT_TYPE + 'Roam',
event: COMPONENT_TYPE + 'Roam',
update: 'updateLayout'
},
function(payload, ecModel) {
ecModel.eachComponent('gmap', function(gmapModel) {
}, function (payload, ecModel) {
ecModel.eachComponent(COMPONENT_TYPE, function (gmapModel) {
var gmap = gmapModel.getGoogleMap();

@@ -511,5 +455,7 @@ var center = gmap.getCenter();

});
}
);
});
}
isNewEC ? echarts.use(install) : install(echarts);
exports.name = name;

@@ -520,3 +466,3 @@ exports.version = version;

})));
}));
//# sourceMappingURL=echarts-extension-gmap.js.map
/*!
* echarts-extension-gmap
* @version 1.4.0
* @version 1.5.0
* @author plainheart

@@ -8,3 +8,3 @@ *

*
* Copyright (c) 2020 Zhongxiang.Wang
* Copyright (c) 2020-2022 Zhongxiang Wang
*

@@ -30,2 +30,3 @@ * Permission is hereby granted, free of charge, to any person obtaining a copy

*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("echarts")):"function"==typeof define&&define.amd?define(["exports","echarts"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).echarts=e.echarts||{},e.echarts.gmap={}),e.echarts)}(this,(function(e,t){"use strict";function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(o){if("default"!==o){var n=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,n.get?n:{enumerable:!0,get:function(){return e[o]}})}})),t["default"]=e,Object.freeze(t)}var n=o(t);function r(e,t){this._gmap=e,this.dimensions=["lng","lat"],this._mapOffset=[0,0],this._api=t}var i,a=r.prototype,s=["echartsLayerZIndex","renderOnMoving"];function g(e,o){return o=o||[0,0],t.util.map([0,1],(function(t){var n=o[t],r=e[t]/2,i=[],a=[];return i[t]=n-r,a[t]=n+r,i[1-t]=a[1-t]=o[1-t],Math.abs(this.dataToPoint(i)[t]-this.dataToPoint(a)[t])}),this)}function p(e,t){var o=t.__overlayProjection;return o?o.fromLatLngToContainerPixel(e):new google.maps.Point(-Infinity,-Infinity)}a.dimensions=["lng","lat"],a.setZoom=function(e){this._zoom=e},a.setCenter=function(e){var t=new google.maps.LatLng(e[1],e[0]);this._center=p(t,this._gmap)},a.setMapOffset=function(e){this._mapOffset=e},a.setGoogleMap=function(e){this._gmap=e},a.getGoogleMap=function(){return this._gmap},a.dataToPoint=function(e){var t=p(new google.maps.LatLng(e[1],e[0]),this._gmap),o=this._mapOffset;return[t.x-o[0],t.y-o[1]]},a.pointToData=function(e){var t=this._mapOffset,o=function(e,t){var o=t.__overlayProjection;if(!o)return new google.maps.Point(-Infinity,-Infinity);return o.fromContainerPixelToLatLng(e)}(new google.maps.Point(e[0]+t[0],e[1]+t[1]),this._gmap);return[o.lng(),o.lat()]},a.getViewRect=function(){var e=this._api;return new t.graphic.BoundingRect(0,0,e.getWidth(),e.getHeight())},a.getRoamTransform=function(){return t.matrix.create()},a.prepareCustoms=function(e){var o=this.getViewRect();return{coordSys:{type:"gmap",x:o.x,y:o.y,width:o.width,height:o.height},api:{coord:t.util.bind(this.dataToPoint,this),size:t.util.bind(g,this)}}},r.dimensions=a.dimensions,r.create=function(e,o){var n,a=o.getDom();e.eachComponent("gmap",(function(e){var g=o.getZr().painter,p=g.getViewportRoot();if("undefined"==typeof google||"undefined"==typeof google.maps||"undefined"==typeof google.maps.Map)throw new Error("It seems that Google Map API has not been loaded completely yet.");if(i=i||function(){function e(e,t){this._root=e,this.setMap(t)}return e.prototype=new google.maps.OverlayView,e.prototype.onAdd=function(){var e=this.getMap();e.__overlayProjection=this.getProjection(),e.getDiv().querySelector(".gm-style > div").appendChild(this._root)},e.prototype.draw=function(){google.maps.event.trigger(this.getMap(),"gmaprender")},e.prototype.onRemove=function(){this._root.parentNode.removeChild(this._root),this._root=null},e.prototype.setZIndex=function(e){this._root.style.zIndex=e},e.prototype.getZIndex=function(){return this._root.style.zIndex},e}(),n)throw new Error("Only one google map component can exist");var l=e.getGoogleMap();if(!l){var c=a.querySelector(".ec-extension-google-map");c&&(p.style.left="0px",p.style.top="0px",p.style.width="100%",p.style.height="100%",a.removeChild(c)),(c=document.createElement("div")).className="ec-extension-google-map",c.style.cssText="position:absolute;top:0;left:0;right:0;bottom:0;",a.appendChild(c);var d=t.util.clone(e.get()),f=d.echartsLayerZIndex;t.util.each(s,(function(e){delete d[e]}));var m=d.center;t.util.isArray(m)&&(d.center={lng:m[0],lat:m[1]}),l=new google.maps.Map(c,d),e.setGoogleMap(l),e.__projectionChangeListener&&e.__projectionChangeListener.remove(),e.__projectionChangeListener=google.maps.event.addListener(l,"projection_changed",(function(){var t=e.getEChartsLayer();t&&t.setMap(null);var o=new i(p,l);o.setZIndex(f),e.setEChartsLayer(o)})),g.getViewportRootOffset=function(){return{offsetLeft:0,offsetTop:0}}}var u=[null!=(m=e.get("center")).lng?m.lng:m[0],null!=m.lat?m.lat:m[1]],h=e.get("zoom");if(m&&h){var y=l.getCenter(),v=l.getZoom();if(e.centerOrZoomChanged([y.lng(),y.lat()],v)){var _=new google.maps.LatLng(u[1],u[0]);l.setOptions({center:_,zoom:h})}}(n=new r(l,o)).setMapOffset(e.__mapOffset||[0,0]),n.setZoom(h),n.setCenter(u),e.coordinateSystem=n})),e.eachSeries((function(e){"gmap"===e.get("coordinateSystem")&&(e.coordinateSystem=n)}))},n.extendComponentModel({type:"gmap",setGoogleMap:function(e){this.__gmap=e},getGoogleMap:function(){return this.__gmap},setEChartsLayer:function(e){this.__echartsLayer=e},getEChartsLayer:function(){return this.__echartsLayer},setCenterAndZoom:function(e,t){this.option.center=e,this.option.zoom=t},centerOrZoomChanged:function(e,t){var o,n,r=this.option;return o=e,n=r.center,!(o&&n&&o[0]===n[0]&&o[1]===n[1]&&t===r.zoom)},defaultOption:{center:{lat:39.90923,lng:116.397428},zoom:5,roam:!0,echartsLayerZIndex:2e3,renderOnMoving:!0}}),n.extendComponentView({type:"gmap",render:function(e,t,o){var r=!0,i=e.getGoogleMap(),a=o.getZr().painter.getViewportRoot(),s=e.coordinateSystem,g=i.getDiv(),p=e.get("renderOnMoving"),l=g.clientWidth,c=g.clientHeight;i.setOptions({gestureHandling:e.get("roam")?"auto":"none"});var d=function(){if(!r){var t=g.clientWidth,n=g.clientHeight;if(t!==l||n!==c)return f.call(this);var i=[-parseInt(g.style.left,10)||0,-parseInt(g.style.top,10)||0];a.style.left=i[0]+"px",a.style.top=i[1]+"px",s.setMapOffset(i),e.__mapOffset=i,o.dispatchAction({type:"gmapRoam",animation:{duration:0}})}},f=function(){n.getInstanceByDom(o.getDom()).resize()};this._oldRenderHandler&&this._oldRenderHandler.remove(),p||(d=n.throttle(d,100,!0),f=n.throttle(f,100,!0)),this._oldRenderHandler=google.maps.event.addListener(i,"gmaprender",d),r=!1},dispose:function(e,t){this._oldRenderHandler&&this._oldRenderHandler.remove(),this._oldRenderHandler=null;var o=e.getComponent("gmap");if(o){var n=o.getGoogleMap();if(n){delete n.__overlayProjection,google.maps.event.clearInstanceListeners(n);var r=n.getDiv();r.parentNode&&r.parentNode.removeChild(r)}o.setGoogleMap(null),o.setEChartsLayer(null),o.coordinateSystem&&(o.coordinateSystem.setGoogleMap(null),o.coordinateSystem=null)}}}),n.registerCoordinateSystem("gmap",r),n.registerAction({type:"gmapRoam",event:"gmapRoam",update:"updateLayout"},(function(e,t){t.eachComponent("gmap",(function(e){var t=e.getGoogleMap(),o=t.getCenter();e.setCenterAndZoom([o.lng(),o.lat()],t.getZoom())}))})),e.name="echarts-extension-gmap",e.version="1.4.0",Object.defineProperty(e,"__esModule",{value:!0})}));
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("echarts/lib/echarts")):"function"==typeof define&&define.amd?define(["exports","echarts"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).echarts=e.echarts||{},e.echarts.gmap={}),e.echarts)}(this,(function(e,t){"use strict";var o=t.version.split("."),n=o[0]>4,r="gmap";function i(e,o){return o=o||[0,0],t.util.map([0,1],(function(t){var n=o[t],r=e[t]/2,i=[],a=[];return i[t]=n-r,a[t]=n+r,i[1-t]=a[1-t]=o[1-t],Math.abs(this.dataToPoint(i)[t]-this.dataToPoint(a)[t])}),this)}function a(e,t){this._gmap=e,this.dimensions=["lng","lat"],this._mapOffset=[0,0],this._api=t}var s,l=a.prototype,p=["echartsLayerZIndex","renderOnMoving"];function g(e,t){var o=t.__overlayProjection;return o?o.fromLatLngToContainerPixel(e):new google.maps.Point(-1/0,-1/0)}l.setZoom=function(e){this._zoom=e},l.setCenter=function(e){var t=new google.maps.LatLng(e[1],e[0]);this._center=g(t,this._gmap)},l.setMapOffset=function(e){this._mapOffset=e},l.setGoogleMap=function(e){this._gmap=e},l.getGoogleMap=function(){return this._gmap},l.dataToPoint=function(e){var t=g(new google.maps.LatLng(e[1],e[0]),this._gmap),o=this._mapOffset;return[t.x-o[0],t.y-o[1]]},l.pointToData=function(e){var t=this._mapOffset,o=function(e,t){var o=t.__overlayProjection;if(!o)return new google.maps.Point(-1/0,-1/0);return o.fromContainerPixelToLatLng(e)}(new google.maps.Point(e[0]+t[0],e[1]+t[1]),this._gmap);return[o.lng(),o.lat()]},l.getViewRect=function(){var e=this._api;return new t.graphic.BoundingRect(0,0,e.getWidth(),e.getHeight())},l.getRoamTransform=function(){return t.matrix.create()},l.prepareCustoms=function(){var e=this.getViewRect();return{coordSys:{type:r,x:e.x,y:e.y,width:e.width,height:e.height},api:{coord:t.util.bind(this.dataToPoint,this),size:t.util.bind(i,this)}}},l.convertToPixel=function(e,t,o){return this.dataToPoint(o)},l.convertFromPixel=function(e,t,o){return this.pointToData(o)},a.create=function(e,o){var n,i=o.getDom();return e.eachComponent(r,(function(e){var r=o.getZr().painter,l=r.getViewportRoot();if("undefined"==typeof google||!google.maps||!google.maps.Map)throw new Error("Google Map API is not loaded");if(s=s||function(){function e(e,t){this._root=e,this.setMap(t)}return e.prototype=new google.maps.OverlayView,e.prototype.onAdd=function(){var e=this.getMap();e.__overlayProjection=this.getProjection(),e.getDiv().querySelector(".gm-style > div").appendChild(this._root)},e.prototype.draw=function(){google.maps.event.trigger(this.getMap(),"gmaprender")},e.prototype.onRemove=function(){this._root.parentNode.removeChild(this._root),this._root=null},e.prototype.setZIndex=function(e){this._root.style.zIndex=e},e.prototype.getZIndex=function(){return this._root.style.zIndex},e}(),n)throw new Error("Only one google map component is allowed");var g=e.getGoogleMap();if(!g){var c="ec-extension-google-map",d=i.querySelector("."+c);d&&(l.style.left="0",l.style.top="0",i.removeChild(d)),(d=document.createElement("div")).className=c,d.style.cssText="position:absolute;top:0;left:0;right:0;bottom:0",i.appendChild(d);var u=t.util.clone(e.get()),h=u.echartsLayerZIndex;t.util.each(p,(function(e){delete u[e]}));var m=u.center;t.util.isArray(m)&&(u.center={lng:m[0],lat:m[1]}),g=new google.maps.Map(d,u),e.setGoogleMap(g),e.__projectionChangeListener&&e.__projectionChangeListener.remove(),e.__projectionChangeListener=google.maps.event.addListener(g,"projection_changed",(function(){var t=e.getEChartsLayer();t&&t.setMap(null);var o=new s(l,g);o.setZIndex(h),e.setEChartsLayer(o)})),r.getViewportRootOffset=function(){return{offsetLeft:0,offsetTop:0}}}var f=e.get("center"),y=[null!=f.lng?f.lng:f[0],null!=f.lat?f.lat:f[1]],v=e.get("zoom");if(f&&v){var _=g.getCenter(),C=g.getZoom();if(e.centerOrZoomChanged([_.lng(),_.lat()],C)){var L=new google.maps.LatLng(y[1],y[0]);g.setOptions({center:L,zoom:v})}}(n=new a(g,o)).setMapOffset(e.__mapOffset||[0,0]),n.setZoom(v),n.setCenter(y),e.coordinateSystem=n})),e.eachSeries((function(e){e.get("coordinateSystem")===r&&(e.coordinateSystem=n)})),n&&[n]},l.dimensions=a.dimensions=["lng","lat"],l.type=r;var c={type:r,setGoogleMap:function(e){this.__gmap=e},getGoogleMap:function(){return this.__gmap},setEChartsLayer:function(e){this.__echartsLayer=e},getEChartsLayer:function(){return this.__echartsLayer},setCenterAndZoom:function(e,t){this.option.center=e,this.option.zoom=t},centerOrZoomChanged:function(e,t){var o,n,r=this.option;return n=r.center,!((o=e)&&n&&o[0]===n[0]&&o[1]===n[1]&&t===r.zoom)},defaultOption:{center:{lat:39.90923,lng:116.397428},zoom:5,roam:!0,echartsLayerZIndex:2e3,renderOnMoving:!0}},d=n?t.ComponentModel.extend(c):c,u={type:r,render:function(e,o,n){var r=!0,i=e.getGoogleMap(),a=n.getZr().painter.getViewportRoot(),s=e.coordinateSystem,l=i.getDiv(),p=e.get("renderOnMoving"),g=l.clientWidth,c=l.clientHeight;i.setOptions({gestureHandling:e.get("roam")?"auto":"none"});var d=function(){if(!r){if(l.clientWidth!==g||l.clientHeight!==c)return u.call(this);var t=[-parseInt(l.style.left,10)||0,-parseInt(l.style.top,10)||0];a.style.left=t[0]+"px",a.style.top=t[1]+"px",s.setMapOffset(t),e.__mapOffset=t,n.dispatchAction({type:"gmapRoam",animation:{duration:0}})}},u=function(){t.getInstanceByDom(n.getDom()).resize()};this._oldRenderHandler&&this._oldRenderHandler.remove(),p||(d=t.throttle(d,100,!0),u=t.throttle(u,100,!0)),this._oldRenderHandler=google.maps.event.addListener(i,"gmaprender",d),r=!1},dispose:function(){this._oldRenderHandler&&this._oldRenderHandler.remove(),this._oldRenderHandler=null;var e=this.__model;if(e){var t=e.getGoogleMap();if(t){delete t.__overlayProjection,google.maps.event.clearInstanceListeners(t);var o=t.getDiv();o.parentNode&&o.parentNode.removeChild(o)}e.setGoogleMap(null),e.setEChartsLayer(null),e.coordinateSystem&&(e.coordinateSystem.setGoogleMap(null),e.coordinateSystem=null)}}},h=n?t.ComponentView.extend(u):u;function m(e){(!n||5==o[0]&&o[1]<4)&&e.registerLayout((function(e){e.eachSeriesByType("pie",(function(e){var t=e.coordinateSystem,o=e.getData(),n=o.mapDimension("value");if(t&&t.type===r){var i=e.get("center"),a=t.dataToPoint(i),s=a[0],l=a[1];o.each(n,(function(e,t){var n=o.getItemLayout(t);n.cx=s,n.cy=l}))}}))})),n?e.registerComponentModel(d):e.extendComponentModel(d),n?e.registerComponentView(h):e.extendComponentView(h),e.registerCoordinateSystem(r,a),e.registerAction({type:"gmapRoam",event:"gmapRoam",update:"updateLayout"},(function(e,t){t.eachComponent(r,(function(e){var t=e.getGoogleMap(),o=t.getCenter();e.setCenterAndZoom([o.lng(),o.lat()],t.getZoom())}))}))}n?t.use(m):m(t),e.name="echarts-extension-gmap",e.version="1.5.0",Object.defineProperty(e,"__esModule",{value:!0})}));
//# sourceMappingURL=echarts-extension-gmap.min.js.map
{
"name": "echarts-extension-gmap",
"version": "1.4.0",
"version": "1.5.0",
"description": "A Google Map(https://www.google.com/maps) extension for Apache ECharts (https://github.com/apache/echarts)",
"main": "dist/echarts-extension-gmap.min.js",
"module": "dist/echarts-extension-gmap.esm.js",
"files": [
"dist",
"src",
"index.js",
"index.d.ts",
"export.js",
"export.d.ts",
"types.d.ts",
"examples/*.html"
],
"types": "types.d.ts",
"scripts": {
"dev": "node build/build.js",
"watch": "node build/build.js -w",
"build": "node build/build.js --min",
"release": "node build/build.js --release",
"help": "node build/build.js --help",
"test": "echo \"Error: no test specified\" && exit 1"
"dev": "rollup -wc --environment NODE_ENV:development",
"build": "rollup -c --environment NODE_ENV:production",
"postbuild": "node build/post-build.js",
"release": "npm run build && npm run generate:example",
"generate:example": "node build/generateExamples.js"
},

@@ -27,3 +33,3 @@ "repository": {

"google",
"echarts-extention",
"echarts-extension",
"data-visualization",

@@ -44,10 +50,13 @@ "map",

"devDependencies": {
"@rollup/plugin-commonjs": "^15.1.0",
"@babel/core": "^7.19.3",
"@babel/preset-env": "^7.19.3",
"@rollup/plugin-babel": "^5.3.1",
"@rollup/plugin-commonjs": "^22.0.2",
"@rollup/plugin-json": "^4.1.0",
"@rollup/plugin-node-resolve": "^9.0.0",
"commander": "^6.1.0",
"fs-extra": "^9.0.1",
"rollup": "^2.28.2",
"@rollup/plugin-node-resolve": "^14.1.0",
"echarts": "^5.4.0",
"chalk": "^4.1.2",
"rollup": "^2.79.1",
"rollup-plugin-terser": "^7.0.2"
}
}
[![NPM version](https://img.shields.io/npm/v/echarts-extension-gmap.svg?style=flat)](https://www.npmjs.org/package/echarts-extension-gmap)
[![Build Status](https://github.com/plainheart/echarts-extension-gmap/actions/workflows/ci.yml/badge.svg)](https://github.com/plainheart/echarts-extension-gmap/actions/workflows/ci.yml)
[![Build Status](https://github.com/plainheart/echarts-extension-gmap/actions/workflows/build.yml/badge.svg)](https://github.com/plainheart/echarts-extension-gmap/actions/workflows/build.yml)
[![NPM Downloads](https://img.shields.io/npm/dm/echarts-extension-gmap.svg)](https://npmcharts.com/compare/echarts-extension-gmap?minimal=true)
[![jsDelivr Downloads](https://data.jsdelivr.com/v1/package/npm/echarts-extension-gmap/badge?style=rounded)](https://www.jsdelivr.com/package/npm/echarts-extension-gmap)
[![License](https://img.shields.io/npm/l/echarts-extension-gmap.svg)](https://www.npmjs.com/package/echarts-extension-gmap)
[![License](https://img.shields.io/npm/l/echarts-extension-gmap.svg)](https://github.com/plainheart/echarts-extension-gmap/blob/master/LICENSE)

@@ -13,10 +13,16 @@ ## Google Map extension for Apache ECharts

This is a Google Map extension for [ECharts](https://echarts.apache.org/en/index.html) which is used to display visualizations such as [Scatter](https://echarts.apache.org/en/option.html#series-scatter), [Lines](https://echarts.apache.org/en/option.html#series-lines), [Heatmap](https://echarts.apache.org/en/option.html#series-heatmap).
This is a Google Map extension for [Apache ECharts](https://echarts.apache.org/en/index.html) which is used to display visualizations such as [Scatter](https://echarts.apache.org/en/option.html#series-scatter), [Lines](https://echarts.apache.org/en/option.html#series-lines), [Heatmap](https://echarts.apache.org/en/option.html#series-heatmap), and [Pie](https://echarts.apache.org/en/option.html#series-pie).
### Examples
Refer to [examples/index.html](https://github.com/plainheart/echarts-extension-gmap/blob/master/examples/index.html)
[Scatter](https://github.com/plainheart/echarts-extension-gmap/tree/master/examples/scatter.html)
![Preview](https://user-images.githubusercontent.com/26999792/83968392-86cc1200-a8fb-11ea-8326-47d62627dfc9.png)
[Lines](https://github.com/plainheart/echarts-extension-gmap/tree/master/examples/lines.html)
[Heatmap](https://github.com/plainheart/echarts-extension-gmap/tree/master/examples/heatmap.html)
[Pie](https://github.com/plainheart/echarts-extension-gmap/tree/master/examples/pie.html)
![Preview](https://user-images.githubusercontent.com/26999792/202892350-5a7df14e-18ea-4f98-9a62-f55d29ad9a49.png)
### Installation

@@ -88,3 +94,3 @@

// since v1.4.0
roam: false
roam: true

@@ -119,4 +125,4 @@ // More initial options...

// Add TrafficLayer to map
var trafficLayer = new google.maps.TrafficLayer();
trafficLayer.setMap(gmap);
// var trafficLayer = new google.maps.TrafficLayer();
// trafficLayer.setMap(gmap);
```
[![NPM version](https://img.shields.io/npm/v/echarts-extension-gmap.svg?style=flat)](https://www.npmjs.org/package/echarts-extension-gmap)
[![Build Status](https://github.com/plainheart/echarts-extension-gmap/actions/workflows/ci.yml/badge.svg)](https://github.com/plainheart/echarts-extension-gmap/actions/workflows/ci.yml)
[![Build Status](https://github.com/plainheart/echarts-extension-gmap/actions/workflows/build.yml/badge.svg)](https://github.com/plainheart/echarts-extension-gmap/actions/workflows/build.yml)
[![NPM Downloads](https://img.shields.io/npm/dm/echarts-extension-gmap.svg)](https://npmcharts.com/compare/echarts-extension-gmap?minimal=true)
[![jsDelivr Downloads](https://data.jsdelivr.com/v1/package/npm/echarts-extension-gmap/badge?style=rounded)](https://www.jsdelivr.com/package/npm/echarts-extension-gmap)
[![License](https://img.shields.io/npm/l/echarts-extension-gmap.svg)](https://www.npmjs.com/package/echarts-extension-gmap)
[![License](https://img.shields.io/npm/l/echarts-extension-gmap.svg)](https://github.com/plainheart/echarts-extension-gmap/blob/master/LICENSE)

@@ -13,10 +13,16 @@ ## Apache ECharts 谷歌地图扩展

[ECharts](https://echarts.apache.org/zh/index.html) 谷歌地图扩展,可以在高德地图上展现 [点图](https://echarts.apache.org/zh/option.html#series-scatter),[线图](https://echarts.apache.org/zh/option.html#series-lines),[热力图](https://echarts.apache.org/zh/option.html#series-heatmap) 等可视化。
[Apache ECharts](https://echarts.apache.org/zh/index.html) 谷歌地图扩展,可以在谷歌地图上展现 [点图](https://echarts.apache.org/zh/option.html#series-scatter),[线图](https://echarts.apache.org/zh/option.html#series-lines),[热力图](https://echarts.apache.org/zh/option.html#series-heatmap),[饼图](https://echarts.apache.org/zh/option.html#series-pie) 等可视化。
### 示例
参见 [examples/index_zh_CN.html](https://github.com/plainheart/echarts-extension-gmap/blob/master/examples/index_zh_CN.html)
[Scatter 散点图](https://github.com/plainheart/echarts-extension-gmap/tree/master/examples/scatter_zh_CN.html)
![示例](https://user-images.githubusercontent.com/26999792/83968392-86cc1200-a8fb-11ea-8326-47d62627dfc9.png)
[Lines 线图](https://github.com/plainheart/echarts-extension-gmap/tree/master/examples/lines_zh_CN.html)
[Heatmap 热力图](https://github.com/plainheart/echarts-extension-gmap/tree/master/examples/heatmap_zh_CN.html)
[Pie 饼图](https://github.com/plainheart/echarts-extension-gmap/tree/master/examples/pie_zh_CN.html)
![示例](https://user-images.githubusercontent.com/26999792/202892350-5a7df14e-18ea-4f98-9a62-f55d29ad9a49.png)
### 安装

@@ -91,3 +97,3 @@

type: 'scatter',
// 使用高德地图坐标系
// 使用谷歌地图坐标系
coordinateSystem: 'gmap',

@@ -114,4 +120,4 @@ // 数据格式跟在 geo 坐标系上一样,每一项都是 [经度,纬度,数值大小,其它维度...]

// 添加交通图层
var trafficLayer = new google.maps.TrafficLayer();
trafficLayer.setMap(gmap);
// var trafficLayer = new google.maps.TrafficLayer();
// trafficLayer.setMap(gmap);
```
/* global google */
import { util as zrUtil, graphic, matrix } from 'echarts';
import { util as zrUtil, graphic, matrix } from 'echarts/lib/echarts'
import { COMPONENT_TYPE } from './helper'
function dataToCoordSize(dataSize, dataItem) {
dataItem = dataItem || [0, 0]
return zrUtil.map(
[0, 1],
function(dimIdx) {
const val = dataItem[dimIdx]
const halfSize = dataSize[dimIdx] / 2
const p1 = []
const p2 = []
p1[dimIdx] = val - halfSize
p2[dimIdx] = val + halfSize
p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx]
return Math.abs(
this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]
)
},
this
)
}
function GMapCoordSys(gmap, api) {
this._gmap = gmap;
this.dimensions = ['lng', 'lat'];
this._mapOffset = [0, 0];
this._api = api;
this._gmap = gmap
this.dimensions = ['lng', 'lat']
this._mapOffset = [0, 0]
this._api = api
}
var GMapCoordSysProto = GMapCoordSys.prototype;
const GMapCoordSysProto = GMapCoordSys.prototype
// exclude private and unsupported options
var excludedOptions = [
const excludedOptions = [
'echartsLayerZIndex',
'renderOnMoving'
];
]
GMapCoordSysProto.dimensions = ['lng', 'lat'];
GMapCoordSysProto.setZoom = function(zoom) {
this._zoom = zoom;
};
this._zoom = zoom
}
GMapCoordSysProto.setCenter = function(center) {
var latlng = new google.maps.LatLng(center[1], center[0]);
this._center = latLngToPixel(latlng, this._gmap);
};
const latlng = new google.maps.LatLng(center[1], center[0])
this._center = latLngToPixel(latlng, this._gmap)
}
GMapCoordSysProto.setMapOffset = function(mapOffset) {
this._mapOffset = mapOffset;
};
this._mapOffset = mapOffset
}
GMapCoordSysProto.setGoogleMap = function(gmap) {
this._gmap = gmap;
};
this._gmap = gmap
}
GMapCoordSysProto.getGoogleMap = function() {
return this._gmap;
};
return this._gmap
}
GMapCoordSysProto.dataToPoint = function(data) {
var latlng = new google.maps.LatLng(data[1], data[0]);
var px = latLngToPixel(latlng, this._gmap);
var mapOffset = this._mapOffset;
return [px.x - mapOffset[0], px.y - mapOffset[1]];
};
const latlng = new google.maps.LatLng(data[1], data[0])
const px = latLngToPixel(latlng, this._gmap)
const mapOffset = this._mapOffset
return [px.x - mapOffset[0], px.y - mapOffset[1]]
}
GMapCoordSysProto.pointToData = function(pt) {
var mapOffset = this._mapOffset;
var latlng = pixelToLatLng(
const mapOffset = this._mapOffset
const latlng = pixelToLatLng(
new google.maps.Point(pt[0] + mapOffset[0], pt[1] + mapOffset[1]),
this._gmap
);
return [latlng.lng(), latlng.lat()];
};
)
return [latlng.lng(), latlng.lat()]
}
GMapCoordSysProto.getViewRect = function() {
var api = this._api;
return new graphic.BoundingRect(0, 0, api.getWidth(), api.getHeight());
};
const api = this._api
return new graphic.BoundingRect(0, 0, api.getWidth(), api.getHeight())
}
GMapCoordSysProto.getRoamTransform = function() {
return matrix.create();
};
return matrix.create()
}
GMapCoordSysProto.prepareCustoms = function(data) {
var rect = this.getViewRect();
GMapCoordSysProto.prepareCustoms = function() {
const rect = this.getViewRect()
return {
coordSys: {
// The name exposed to user is always 'cartesian2d' but not 'grid'.
type: 'gmap',
type: COMPONENT_TYPE,
x: rect.x,

@@ -83,69 +101,53 @@ y: rect.y,

}
};
};
}
}
function dataToCoordSize(dataSize, dataItem) {
dataItem = dataItem || [0, 0];
return zrUtil.map(
[0, 1],
function(dimIdx) {
var val = dataItem[dimIdx];
var halfSize = dataSize[dimIdx] / 2;
var p1 = [];
var p2 = [];
p1[dimIdx] = val - halfSize;
p2[dimIdx] = val + halfSize;
p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx];
return Math.abs(
this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]
);
},
this
);
GMapCoordSysProto.convertToPixel = function(ecModel, finder, value) {
// here we don't use finder as only one google map component is allowed
return this.dataToPoint(value);
}
// For deciding which dimensions to use when creating list data
GMapCoordSys.dimensions = GMapCoordSysProto.dimensions;
GMapCoordSysProto.convertFromPixel = function(ecModel, finder, value) {
// here we don't use finder as only one google map component is allowed
return this.pointToData(value);
}
GMapCoordSys.create = function(ecModel, api) {
var gmapCoordSys;
var root = api.getDom();
let gmapCoordSys
const root = api.getDom()
ecModel.eachComponent('gmap', function(gmapModel) {
var painter = api.getZr().painter;
var viewportRoot = painter.getViewportRoot();
if (typeof google === 'undefined'
|| typeof google.maps === 'undefined'
|| typeof google.maps.Map === 'undefined') {
throw new Error('It seems that Google Map API has not been loaded completely yet.');
ecModel.eachComponent(COMPONENT_TYPE, function(gmapModel) {
const painter = api.getZr().painter
const viewportRoot = painter.getViewportRoot()
if (typeof google === 'undefined' || !google.maps || !google.maps.Map) {
throw new Error('Google Map API is not loaded')
}
Overlay = Overlay || createOverlayCtor();
Overlay = Overlay || createOverlayCtor()
if (gmapCoordSys) {
throw new Error('Only one google map component can exist');
throw new Error('Only one google map component is allowed')
}
var gmap = gmapModel.getGoogleMap();
let gmap = gmapModel.getGoogleMap()
if (!gmap) {
// Not support IE8
var gmapRoot = root.querySelector('.ec-extension-google-map');
const className = 'ec-extension-google-map'
let gmapRoot = root.querySelector('.' + className)
if (gmapRoot) {
// Reset viewport left and top, which will be changed
// in moving handler in GMapView
viewportRoot.style.left = '0px';
viewportRoot.style.top = '0px';
viewportRoot.style.width = '100%';
viewportRoot.style.height = '100%';
root.removeChild(gmapRoot);
viewportRoot.style.left = '0'
viewportRoot.style.top = '0'
root.removeChild(gmapRoot)
}
gmapRoot = document.createElement('div');
gmapRoot.className = 'ec-extension-google-map';
gmapRoot.style.cssText = 'position:absolute;top:0;left:0;right:0;bottom:0;';
root.appendChild(gmapRoot);
gmapRoot = document.createElement('div')
gmapRoot.className = className
gmapRoot.style.cssText = 'position:absolute;top:0;left:0;right:0;bottom:0'
root.appendChild(gmapRoot)
var options = zrUtil.clone(gmapModel.get());
var echartsLayerZIndex = options.echartsLayerZIndex;
const options = zrUtil.clone(gmapModel.get())
const echartsLayerZIndex = options.echartsLayerZIndex
// delete excluded options
zrUtil.each(excludedOptions, function(key) {
delete options[key];
});
var center = options.center;
delete options[key]
})
const center = options.center
// normalize center

@@ -156,75 +158,78 @@ if (zrUtil.isArray(center)) {

lat: center[1]
};
}
}
gmap = new google.maps.Map(gmapRoot, options);
gmapModel.setGoogleMap(gmap);
gmap = new google.maps.Map(gmapRoot, options)
gmapModel.setGoogleMap(gmap)
gmapModel.__projectionChangeListener && gmapModel.__projectionChangeListener.remove();
gmapModel.__projectionChangeListener && gmapModel.__projectionChangeListener.remove()
gmapModel.__projectionChangeListener = google.maps.event.addListener(gmap, 'projection_changed',
function() {
var layer = gmapModel.getEChartsLayer();
layer && layer.setMap(null);
const layer = gmapModel.getEChartsLayer()
layer && layer.setMap(null)
var overlay = new Overlay(viewportRoot, gmap);
overlay.setZIndex(echartsLayerZIndex);
gmapModel.setEChartsLayer(overlay);
const overlay = new Overlay(viewportRoot, gmap)
overlay.setZIndex(echartsLayerZIndex)
gmapModel.setEChartsLayer(overlay)
}
);
)
// Override
painter.getViewportRootOffset = function() {
return { offsetLeft: 0, offsetTop: 0 };
};
return { offsetLeft: 0, offsetTop: 0 }
}
}
var center = gmapModel.get('center');
var normalizedCenter = [
const center = gmapModel.get('center')
const normalizedCenter = [
center.lng != null ? center.lng : center[0],
center.lat != null ? center.lat : center[1]
];
var zoom = gmapModel.get('zoom');
]
const zoom = gmapModel.get('zoom')
if (center && zoom) {
var gmapCenter = gmap.getCenter();
var gmapZoom = gmap.getZoom();
var centerOrZoomChanged = gmapModel.centerOrZoomChanged([gmapCenter.lng(), gmapCenter.lat()], gmapZoom);
const gmapCenter = gmap.getCenter()
const gmapZoom = gmap.getZoom()
const centerOrZoomChanged = gmapModel.centerOrZoomChanged([gmapCenter.lng(), gmapCenter.lat()], gmapZoom)
if (centerOrZoomChanged) {
var pt = new google.maps.LatLng(normalizedCenter[1], normalizedCenter[0]);
const pt = new google.maps.LatLng(normalizedCenter[1], normalizedCenter[0])
gmap.setOptions({
center: pt,
zoom: zoom
});
})
}
}
gmapCoordSys = new GMapCoordSys(gmap, api);
gmapCoordSys.setMapOffset(gmapModel.__mapOffset || [0, 0]);
gmapCoordSys.setZoom(zoom);
gmapCoordSys.setCenter(normalizedCenter);
gmapCoordSys = new GMapCoordSys(gmap, api)
gmapCoordSys.setMapOffset(gmapModel.__mapOffset || [0, 0])
gmapCoordSys.setZoom(zoom)
gmapCoordSys.setCenter(normalizedCenter)
gmapModel.coordinateSystem = gmapCoordSys;
});
gmapModel.coordinateSystem = gmapCoordSys
})
ecModel.eachSeries(function(seriesModel) {
if (seriesModel.get('coordinateSystem') === 'gmap') {
seriesModel.coordinateSystem = gmapCoordSys;
if (seriesModel.get('coordinateSystem') === COMPONENT_TYPE) {
seriesModel.coordinateSystem = gmapCoordSys
}
});
};
})
var Overlay;
// return created coordinate systems
return gmapCoordSys && [gmapCoordSys]
}
let Overlay
function createOverlayCtor() {
function Overlay(root, gmap) {
this._root = root;
this.setMap(gmap);
this._root = root
this.setMap(gmap)
}
Overlay.prototype = new google.maps.OverlayView();
Overlay.prototype = new google.maps.OverlayView()
Overlay.prototype.onAdd = function() {
var gmap = this.getMap();
gmap.__overlayProjection = this.getProjection();
gmap.getDiv().querySelector('.gm-style > div').appendChild(this._root);
};
const gmap = this.getMap()
gmap.__overlayProjection = this.getProjection()
gmap.getDiv().querySelector('.gm-style > div').appendChild(this._root)
}

@@ -235,39 +240,43 @@ /**

Overlay.prototype.draw = function() {
google.maps.event.trigger(this.getMap(), 'gmaprender');
};
google.maps.event.trigger(this.getMap(), 'gmaprender')
}
Overlay.prototype.onRemove = function() {
this._root.parentNode.removeChild(this._root);
this._root = null;
};
this._root.parentNode.removeChild(this._root)
this._root = null
}
Overlay.prototype.setZIndex = function(zIndex) {
this._root.style.zIndex = zIndex;
};
this._root.style.zIndex = zIndex
}
Overlay.prototype.getZIndex = function() {
return this._root.style.zIndex;
};
return this._root.style.zIndex
}
return Overlay;
return Overlay
}
function latLngToPixel(latLng, map) {
var projection = map.__overlayProjection;
const projection = map.__overlayProjection
if (!projection) {
return new google.maps.Point(-Infinity, -Infinity);
return new google.maps.Point(-Infinity, -Infinity)
}
return projection.fromLatLngToContainerPixel(latLng);
return projection.fromLatLngToContainerPixel(latLng)
}
function pixelToLatLng(pixel, map) {
var projection = map.__overlayProjection;
const projection = map.__overlayProjection
if (!projection) {
return new google.maps.Point(-Infinity, -Infinity);
return new google.maps.Point(-Infinity, -Infinity)
}
return projection.fromContainerPixelToLatLng(pixel);
return projection.fromContainerPixelToLatLng(pixel)
}
export default GMapCoordSys;
GMapCoordSysProto.dimensions = GMapCoordSys.dimensions = ['lng', 'lat']
GMapCoordSysProto.type = COMPONENT_TYPE
export default GMapCoordSys

@@ -1,35 +0,32 @@

import * as echarts from 'echarts';
import { ComponentModel } from 'echarts/lib/echarts'
import { COMPONENT_TYPE, isNewEC, v2Equal } from './helper'
function v2Equal(a, b) {
return a && b && a[0] === b[0] && a[1] === b[1];
}
const GMapModel = {
type: COMPONENT_TYPE,
export default echarts.extendComponentModel({
type: 'gmap',
setGoogleMap: function(gmap) {
this.__gmap = gmap;
setGoogleMap(gmap) {
this.__gmap = gmap
},
getGoogleMap: function() {
getGoogleMap() {
// __gmap is set when creating GMapCoordSys
return this.__gmap;
return this.__gmap
},
setEChartsLayer: function(layer) {
this.__echartsLayer = layer;
setEChartsLayer(layer) {
this.__echartsLayer = layer
},
getEChartsLayer: function() {
return this.__echartsLayer;
getEChartsLayer() {
return this.__echartsLayer
},
setCenterAndZoom: function(center, zoom) {
this.option.center = center;
this.option.zoom = zoom;
setCenterAndZoom(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);
centerOrZoomChanged(center, zoom) {
const option = this.option
return !(v2Equal(center, option.center) && zoom === option.zoom)
},

@@ -47,2 +44,6 @@

}
});
}
export default isNewEC
? ComponentModel.extend(GMapModel)
: GMapModel
/* global google */
import * as echarts from 'echarts';
import { ComponentView, getInstanceByDom, throttle } from 'echarts/lib/echarts'
import { isNewEC, COMPONENT_TYPE } from './helper'
export default echarts.extendComponentView({
type: 'gmap',
const GMapView = {
type: COMPONENT_TYPE,
render: function(gmapModel, ecModel, api) {
var rendering = true;
render(gmapModel, ecModel, api) {
let rendering = true
var gmap = gmapModel.getGoogleMap();
var viewportRoot = api.getZr().painter.getViewportRoot();
var coordSys = gmapModel.coordinateSystem;
var offsetEl = gmap.getDiv();
var renderOnMoving = gmapModel.get('renderOnMoving');
var oldWidth = offsetEl.clientWidth;
var oldHeight = offsetEl.clientHeight;
const gmap = gmapModel.getGoogleMap()
const viewportRoot = api.getZr().painter.getViewportRoot()
const coordSys = gmapModel.coordinateSystem
const offsetEl = gmap.getDiv()
const renderOnMoving = gmapModel.get('renderOnMoving')
const oldWidth = offsetEl.clientWidth
const oldHeight = offsetEl.clientHeight
gmap.setOptions({
gestureHandling: gmapModel.get('roam') ? 'auto' : 'none'
});
})
var renderHandler = function() {
let renderHandler = function() {
if (rendering) {
return;
return
}
// need resize?
var width = offsetEl.clientWidth;
var height = offsetEl.clientHeight;
const width = offsetEl.clientWidth
const height = offsetEl.clientHeight
if (width !== oldWidth || height !== oldHeight) {
return resizeHandler.call(this);
return resizeHandler.call(this)
}
var mapOffset = [
const 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';
]
viewportRoot.style.left = mapOffset[0] + 'px'
viewportRoot.style.top = mapOffset[1] + 'px'
coordSys.setMapOffset(mapOffset);
gmapModel.__mapOffset = mapOffset;
coordSys.setMapOffset(mapOffset)
gmapModel.__mapOffset = mapOffset
api.dispatchAction({
type: 'gmapRoam',
type: COMPONENT_TYPE + 'Roam',
animation: {

@@ -53,52 +54,57 @@ // in ECharts 5.x,

}
});
};
})
}
var resizeHandler = function() {
echarts.getInstanceByDom(api.getDom()).resize();
};
let resizeHandler = function() {
getInstanceByDom(api.getDom()).resize()
}
this._oldRenderHandler && this._oldRenderHandler.remove();
this._oldRenderHandler && this._oldRenderHandler.remove()
if (!renderOnMoving) {
renderHandler = echarts.throttle(renderHandler, 100, true)
resizeHandler = echarts.throttle(resizeHandler, 100, true)
// TODO hide layer when moving
renderHandler = throttle(renderHandler, 100, true)
resizeHandler = throttle(resizeHandler, 100, true)
}
this._oldRenderHandler = google.maps.event.addListener(gmap, 'gmaprender', renderHandler);
this._oldRenderHandler = google.maps.event.addListener(gmap, 'gmaprender', renderHandler)
rendering = false;
rendering = false
},
dispose: function(ecModel, api) {
this._oldRenderHandler && this._oldRenderHandler.remove();
this._oldRenderHandler = null;
dispose() {
this._oldRenderHandler && this._oldRenderHandler.remove()
this._oldRenderHandler = null
var component = ecModel.getComponent('gmap');
const component = this.__model
if (!component) {
return;
return
}
var gmapInstance = component.getGoogleMap();
const gmapInstance = component.getGoogleMap()
if (gmapInstance) {
// remove injected projection
delete gmapInstance.__overlayProjection;
delete gmapInstance.__overlayProjection
// clear all listeners of map instance
google.maps.event.clearInstanceListeners(gmapInstance);
google.maps.event.clearInstanceListeners(gmapInstance)
// remove DOM of map instance
var mapDiv = gmapInstance.getDiv();
mapDiv.parentNode && mapDiv.parentNode.removeChild(mapDiv);
const mapDiv = gmapInstance.getDiv()
mapDiv.parentNode && mapDiv.parentNode.removeChild(mapDiv)
}
component.setGoogleMap(null);
component.setEChartsLayer(null);
component.setGoogleMap(null)
component.setEChartsLayer(null)
if (component.coordinateSystem) {
component.coordinateSystem.setGoogleMap(null);
component.coordinateSystem = null;
component.coordinateSystem.setGoogleMap(null)
component.coordinateSystem = null
}
}
});
}
export default isNewEC
? ComponentView.extend(GMapView)
: GMapView

@@ -5,28 +5,64 @@ /**

import { version, name } from '../package.json';
import GMapCoordSys from './GMapCoordSys'
import GMapModel from './GMapModel'
import GMapView from './GMapView'
import { isNewEC, ecVer, COMPONENT_TYPE } from './helper'
import * as echarts from 'echarts';
import GMapCoordSys from './GMapCoordSys';
export { version, name } from '../package.json';
import './GMapModel';
import './GMapView';
/**
* @typedef {import('../export').EChartsExtensionRegisters} EChartsExtensionRegisters
*/
echarts.registerCoordinateSystem('gmap', GMapCoordSys);
// Action
echarts.registerAction(
{
type: 'gmapRoam',
event: 'gmapRoam',
update: 'updateLayout'
},
function(payload, ecModel) {
ecModel.eachComponent('gmap', function(gmapModel) {
var gmap = gmapModel.getGoogleMap();
var center = gmap.getCenter();
gmapModel.setCenterAndZoom([center.lng(), center.lat()], gmap.getZoom());
});
/**
* Google Map extension installer
* @param {EChartsExtensionRegisters} registers
*/
export function install(registers) {
// add coordinate system support for pie series for ECharts < 5.4.0
if (!isNewEC || (ecVer[0] == 5 && ecVer[1] < 4)) {
registers.registerLayout(function(ecModel) {
ecModel.eachSeriesByType('pie', function (seriesModel) {
const coordSys = seriesModel.coordinateSystem
const data = seriesModel.getData()
const valueDim = data.mapDimension('value')
if (coordSys && coordSys.type === COMPONENT_TYPE) {
const center = seriesModel.get('center')
const point = coordSys.dataToPoint(center)
const cx = point[0]
const cy = point[1]
data.each(valueDim, function (value, idx) {
const layout = data.getItemLayout(idx)
layout.cx = cx
layout.cy = cy
})
}
})
})
}
);
export { version, name };
// Model
isNewEC
? registers.registerComponentModel(GMapModel)
: registers.extendComponentModel(GMapModel)
// View
isNewEC
? registers.registerComponentView(GMapView)
: registers.extendComponentView(GMapView)
// Coordinate System
registers.registerCoordinateSystem(COMPONENT_TYPE, GMapCoordSys)
// Action
registers.registerAction(
{
type: COMPONENT_TYPE + 'Roam',
event: COMPONENT_TYPE + 'Roam',
update: 'updateLayout'
},
function(payload, ecModel) {
ecModel.eachComponent(COMPONENT_TYPE, function(gmapModel) {
const gmap = gmapModel.getGoogleMap()
const center = gmap.getCenter()
gmapModel.setCenterAndZoom([center.lng(), center.lat()], gmap.getZoom())
})
}
)
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc