Spaces:
Running
Running
/* | |
* Licensed to the Apache Software Foundation (ASF) under one | |
* or more contributor license agreements. See the NOTICE file | |
* distributed with this work for additional information | |
* regarding copyright ownership. The ASF licenses this file | |
* to you under the Apache License, Version 2.0 (the | |
* "License"); you may not use this file except in compliance | |
* with the License. You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, | |
* software distributed under the License is distributed on an | |
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
* KIND, either express or implied. See the License for the | |
* specific language governing permissions and limitations | |
* under the License. | |
*/ | |
// @ts-nocheck | |
import * as echarts from 'echarts'; | |
function isEmptyObject(obj) { | |
for (const key in obj) { | |
if (obj.hasOwnProperty(key)) { | |
return false; | |
} | |
} | |
return true; | |
} | |
export default echarts.extendComponentView({ | |
type: 'bmap', | |
render: function (bMapModel, ecModel, api) { | |
let rendering = true; | |
const bmap = bMapModel.getBMap(); | |
const viewportRoot = api.getZr().painter.getViewportRoot(); | |
const coordSys = bMapModel.coordinateSystem; | |
const moveHandler = function (type, target) { | |
if (rendering) { | |
return; | |
} | |
const offsetEl = viewportRoot.parentNode.parentNode.parentNode; | |
const mapOffset = [ | |
-parseInt(offsetEl.style.left, 10) || 0, | |
-parseInt(offsetEl.style.top, 10) || 0 | |
]; | |
// only update style when map offset changed | |
const viewportRootStyle = viewportRoot.style; | |
const offsetLeft = mapOffset[0] + 'px'; | |
const offsetTop = mapOffset[1] + 'px'; | |
if (viewportRootStyle.left !== offsetLeft) { | |
viewportRootStyle.left = offsetLeft; | |
} | |
if (viewportRootStyle.top !== offsetTop) { | |
viewportRootStyle.top = offsetTop; | |
} | |
coordSys.setMapOffset(mapOffset); | |
bMapModel.__mapOffset = mapOffset; | |
api.dispatchAction({ | |
type: 'bmapRoam', | |
animation: { | |
duration: 0 | |
} | |
}); | |
}; | |
function zoomEndHandler() { | |
if (rendering) { | |
return; | |
} | |
api.dispatchAction({ | |
type: 'bmapRoam', | |
animation: { | |
duration: 0 | |
} | |
}); | |
} | |
bmap.removeEventListener('moving', this._oldMoveHandler); | |
bmap.removeEventListener('moveend', this._oldMoveHandler); | |
bmap.removeEventListener('zoomend', this._oldZoomEndHandler); | |
bmap.addEventListener('moving', moveHandler); | |
bmap.addEventListener('moveend', moveHandler); | |
bmap.addEventListener('zoomend', zoomEndHandler); | |
this._oldMoveHandler = moveHandler; | |
this._oldZoomEndHandler = zoomEndHandler; | |
const roam = bMapModel.get('roam'); | |
if (roam && roam !== 'scale') { | |
bmap.enableDragging(); | |
} | |
else { | |
bmap.disableDragging(); | |
} | |
if (roam && roam !== 'move') { | |
bmap.enableScrollWheelZoom(); | |
bmap.enableDoubleClickZoom(); | |
bmap.enablePinchToZoom(); | |
} | |
else { | |
bmap.disableScrollWheelZoom(); | |
bmap.disableDoubleClickZoom(); | |
bmap.disablePinchToZoom(); | |
} | |
/* map 2.0 */ | |
const originalStyle = bMapModel.__mapStyle; | |
const newMapStyle = bMapModel.get('mapStyle') || {}; | |
// FIXME, Not use JSON methods | |
const mapStyleStr = JSON.stringify(newMapStyle); | |
if (JSON.stringify(originalStyle) !== mapStyleStr) { | |
// FIXME May have blank tile when dragging if setMapStyle | |
if (!isEmptyObject(newMapStyle)) { | |
bmap.setMapStyle(echarts.util.clone(newMapStyle)); | |
} | |
bMapModel.__mapStyle = JSON.parse(mapStyleStr); | |
} | |
/* map 3.0 */ | |
const originalStyle2 = bMapModel.__mapStyle2; | |
const newMapStyle2 = bMapModel.get('mapStyleV2') || {}; | |
// FIXME, Not use JSON methods | |
const mapStyleStr2 = JSON.stringify(newMapStyle2); | |
if (JSON.stringify(originalStyle2) !== mapStyleStr2) { | |
// FIXME May have blank tile when dragging if setMapStyle | |
if (!isEmptyObject(newMapStyle2)) { | |
bmap.setMapStyleV2(echarts.util.clone(newMapStyle2)); | |
} | |
bMapModel.__mapStyle2 = JSON.parse(mapStyleStr2); | |
} | |
rendering = false; | |
} | |
}); | |