echarts-extension-gmap
Advanced tools
Comparing version 1.4.0 to 1.5.0
/*! | ||
* 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
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
No tests
QualityPackage does not have any tests. This is a strong signal of a poorly maintained or low quality package.
Found 1 instance in 1 package
199127
28
1817
1
126
10
1