Toggle navigation
地球坐标旋转转换
By
啊很古
2019-05-17 07:28:38
脚本
16
21
作品使用的第三方脚本
数据管理
上传数据
支持小于 5M 任意格式(csv, xlsx, json, xml, ...)的数据文件
上传后可以通过生成的文件链接异步获取托管的数据。
历史数据
0 条
无历史数据
代码修改记录
信息提示
保存作品
对当前截图不满意?你还可以
上传本地截图
重新截图
作品名称
作品描述
标签
geo
grid
legend
markLine
markPoint
bar
effectScatter
line
lines
map
timeline
title
toolbox
tooltip
visualMap
作品默认版本
最新
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
20:11:45
图表已生成
整理代码
刷新
代码
// function randomData() { // return Math.round(Math.random() * 300); // } // var geoCoordMap = { // 上海: [121.4648, 31.2891], // 尼日利亚: [-4.388361, 11.186148], // 美国洛杉矶: [-118.24311, 34.052713], // 香港邦泰: [114.195466, 22.282751], // 美国芝加哥: [-87.801833, 41.870975], // 加纳库马西: [-4.62829, 7.72415], // 英国曼彻斯特: [-1.657222, 51.886863], // 德国汉堡: [10.01959, 54.38474], // 哈萨克斯坦阿拉木图: [45.326912, 41.101891], // 俄罗斯伊尔库茨克: [89.116876, 67.757906], // 巴西: [-48.678945, -10.493623], // 埃及达米埃塔: [31.815593, 31.418032], // 西班牙巴塞罗纳: [2.175129, 41.385064], // 柬埔寨金边: [104.88659, 11.545469], // 意大利米兰: [9.189948, 45.46623], // 乌拉圭蒙得维的亚: [-56.162231, -34.901113], // 莫桑比克马普托: [32.608571, -25.893473], // 阿尔及利亚阿尔及尔: [3.054275, 36.753027], // 阿联酋迪拜: [55.269441, 25.204514], // 匈牙利布达佩斯: [17.108519, 48.179162], // 澳大利亚悉尼: [150.993137, -33.675509], // 美国加州: [-121.910642, 41.38028], // 澳大利亚墨尔本: [144.999416, -37.781726], // 墨西哥: [-99.094092, 19.365711], // 加拿大温哥华: [-123.023921, 49.311753] // }; // var BJData = [ // [{ // name: "尼日利亚", // value: randomData() // }, { // name: "上海", // }], // [{ // name: "美国洛杉矶", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "香港邦泰", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "美国芝加哥", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "加纳库马西", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "英国曼彻斯特", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "德国汉堡", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "哈萨克斯坦阿拉木图", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "俄罗斯伊尔库茨克", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "巴西", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "埃及达米埃塔", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "西班牙巴塞罗纳", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "柬埔寨金边", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "意大利米兰", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "乌拉圭蒙得维的亚", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "莫桑比克马普托", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "阿尔及利亚阿尔及尔", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "阿联酋迪拜", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "匈牙利布达佩斯", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "澳大利亚悉尼", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "美国加州", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "澳大利亚墨尔本", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "墨西哥", // value: randomData() // }, { // name: "上海" // }], // [{ // name: "加拿大温哥华", // value: randomData() // }, { // name: "上海" // }] // ]; // var convertData = function(data) { // var res = []; // for (var i = 0; i < data.length; i++) { // var dataItem = data[i]; // var fromCoord = geoCoordMap[dataItem[0].name]; // var toCoord = geoCoordMap[dataItem[1].name]; // if (fromCoord && toCoord) { // res.push([{ // coord: fromCoord, // value: dataItem[0].value // }, // { // coord: toCoord // } // ]); // } // } // return res; // }; // var convertData2 = function(data) { // var res = []; // for (var i = 0; i < data.length; i++) { // var dataItem = data[i]; // var fromCoord = geoCoordMap[dataItem[1].name]; // var toCoord = geoCoordMap[dataItem[0].name]; // if (fromCoord && toCoord) { // res.push([{ // coord: fromCoord, // value: dataItem[0].value // }, // { // coord: toCoord // } // ]); // } // } // return res; // }; var series = []; // [ // ["上海", BJData] // ].forEach(function(item, i) { // series.push( // // { // // type: "lines", // // zlevel: 2, // // effect: { // // show: true, // // // color: "#0bc7f3", // // period: 4, //箭头指向速度,值越小速度越快 // // trailLength: 0.02, //特效尾迹长度[0,1]值越大,尾迹越长重 // // symbol: "arrow", //箭头图标 // // symbolSize: 5 //图标大小 // // }, // // lineStyle: { // // normal: { // // width: 1, //尾迹线条宽度 // // opacity: 0, //尾迹线条透明度 // // curveness: 0.3 //尾迹线条曲直度 // // } // // }, // // data: convertData(item[1]) // // }, { // // type: "lines", // // zlevel: 2, // // effect: { // // show: true, // // color: '#FF0000', // // period: 4, //箭头指向速度,值越小速度越快 // // trailLength: 0.02, //特效尾迹长度[0,1]值越大,尾迹越长重 // // symbol: "arrow", //箭头图标 // // symbolSize: 5 //图标大小 // // }, // // lineStyle: { // // normal: { // // width: 1, //尾迹线条宽度 // // opacity: 0, //尾迹线条透明度 // // curveness: -0.3 //尾迹线条曲直度 // // } // // }, // // data: convertData2(item[1]) // // }, // // { // // type: "effectScatter", // // coordinateSystem: "geo", // // zlevel: 2, // // rippleEffect: { // // //涟漪特效 // // period: 4, //动画时间,值越小速度越快 // // brushType: "stroke", //波纹绘制方式 stroke, fill // // scale: 4 //波纹圆环最大限制,值越大波纹越大 // // }, // // label: { // // normal: { // // show: true, // // position: "right", //显示位置 // // offset: [5, 0], //偏移设置 // // formatter: "{b}" //圆环显示文字 // // }, // // emphasis: { // // show: true, // // color: "#FF6A6A" // // } // // }, // // symbol: "circle", // // symbolSize: function(val) { // // return 8 + val[2] / 1000; //圆环大小 // // }, // // itemStyle: { // // normal: { // // show: true, // // }, // // emphasis: { // // show: true, // // color: "#FF6A6A" // // } // // }, // // data: item[1].map(function(dataItem) { // // return { // // name: dataItem[0].name, // // value: geoCoordMap[dataItem[0].name].concat([dataItem[0].value]) // // }; // // }) // // }, // //被攻击点 // // { // // type: "scatter", // // coordinateSystem: "geo", // // zlevel: 2, // // rippleEffect: { // // period: 4, // // brushType: "stroke", // // scale: 4 // // }, // // label: { // // normal: { // // show: true, // // color: "red", // // position: "right", // // formatter: "{b}", // // }, // // emphasis: { // // show: true, // // color: "#FF6A6A" // // } // // }, // // symbol: "pin", // // symbolSize: 30, // // itemStyle: { // // normal: { // // show: true, // // color: "red", // // }, // // emphasis: { // // show: true, // // color: "#FF6A6A" // // } // // }, // // data: [{ // // name: item[0], // // value: geoCoordMap[item[0]].concat([100]), // // visualMap: false // // }] // // } // ); // }); var worldMap = echarts.getMap('world'); option = { backgroundColor: 'green', ///rgb(3, 9, 27) tooltip: { trigger: "item", backgroundColor: "#1540a1", borderColor: "#FFFFCC", showDelay: 0, hideDelay: 0, enterable: true, transitionDuration: 0, extraCssText: "z-index:100", formatter: function(params, ticket, callback) { //根据业务自己拓展要显示的内容 var res = ""; var name = params.name; var value = params.value[params.seriesIndex + 1]; res = "
" + name + "
数据:" + value; return res; } }, // visualMap: { // //图例值控制 // show: false, // type: 'piecewise', // pieces: [{ // max: 80, // color: 'red' // }, // { // min: 80, // max: 120, // color: 'yellow' // }, // { // min: 120, // color: 'green' // } // ], // calculable: true, // }, // geo: { // map: "nWorld", // show: true, // // label: { // // show: true, // // offset:[30,40], // // // formatter: '{b}', // // color: '#41768f', // // fontSize: 5, // // emphasis: { // // show: false // // } // // }, // // boundingCoords: [ // // // 定位左上角经纬度 // // [-100, 90], // // // 定位右下角经纬度 // // [100, -90] // // ], // zoom:1, // roam: false, //是否允许缩放 // // layoutCenter: ["50%", "50%"], //地图位置 // // center: [0, 0], // // center: ['50%', '50%'], // // layoutSize: "100%", // left: 0, top: 20, right: 0, bottom: 20, // itemStyle: { // normal: { // show: 'true', // borderWidth: 1, // // color: "rgb(6, 31, 48)", //地图背景色 // areaColor: '#eee', //rgb(6, 31, 48) // borderColor: "#1EFFEC", //省市边界线 // // shadowColor: 'rgba(58, 157, 242, .8)', // // shadowBlur: 12, // }, // emphasis: { // show: 'true', // color: "rgba(37, 43, 61, .5)" //悬浮背景 // } // }, // zlevel: 1 // // regions: [{ // // name: '中国', // // itemStyle: { // // //'#5ab1d8' // // areaColor: { // // type: 'linear', // // x: 0, // // y: 0, // // x2: 0, // // y2: 1, // // colorStops: [{ // // offset: 0, color: '#36698b' // 0% 处的颜色 // // }, { // // offset: 1, color: '#60bfe8' // 100% 处的颜色 // // }], // // global: false // 缺省为 false // // }, // // color: '#5ab1d8' // // } // // }], // // nameMap:{ // // 'China' : '中国' // // } // }, series: [ { name: 'xxx2', type: 'map', map: 'nWorld', roam: false, left: 0, top: 20, right: 0, bottom: 20, // layoutCenter: ["50%", "50%"], //地图位置 // layoutSize: "120%", label: { normal: { show: false }, emphasis: { show: false } }, itemStyle: { areaColor: '#eee', //rgb(6, 31, 48) show: 'true', borderColor: 'red', borderWidth: 1, // blend: 'xor', // shadowColor: 'rgba(58, 157, 242, .8)', // shadowBlur: 12, emphasis: { show: 'true', color: "rgba(37, 43, 61, .5)" //悬浮背景 } }, }, { name: 'xxx3', type: 'map', map: 'nWorld', roam: false, left: 0, top: 20, right: 0, bottom: 20, // layoutCenter: ["50%", "50%"], //地图位置 // layoutSize: "120%", label: { normal: { show: false }, emphasis: { show: false } }, itemStyle: { areaColor: '#000', //rgb(6, 31, 48) show: 'true', borderColor: 'green', borderWidth: 1, // shadowColor: 'rgba(58, 157, 242, .8)', // shadowBlur: 12, emphasis: { show: 'true', color: "rgba(37, 43, 61, .5)" //悬浮背景 } }, // z: 2, blendMode: 'xor', }, // { // type: 'custom', // geoIndex: 0, // coordinateSystem: 'geo', // renderItem: renderItem, // itemStyle: { // normal: { // opacity: .5 // } // }, // animation: false, // silent: true, // data: [0], // z: 20 // } ], }; // option.blendMode = 'xor', function renderItem(params, api) { var roundedsPoints = []; // var coords = [9][0]; function render( callBack ) { // console.log( worldMapCopy.geoJson.features[41].geometry.coordinates[9][0] ); /* callBack( worldMapCopy.geoJson.features[41].geometry.coordinates[9][0] ); */ // for(let i=0; i
{ */ // for(let j=0; j< worldMapCopy.geoJson.features[i].geometry.coordinates.length; j++ ) { // /* setTimeout( () => { */ // var coordinates = worldMapCopy.geoJson.features[i].geometry.coordinates; // var minCoordsOrNot = coordinates[j]; // if( typeof minCoordsOrNot[0] == 'number') { // // roundedsPoints.push( coordinates ); // callBack( coordinates ); // }else { // for(let k=0; k< worldMapCopy.geoJson.features[i].geometry.coordinates[j].length; k++ ){ // /* setTimeout( () => { */ // var coordinates = worldMapCopy.geoJson.features[i].geometry.coordinates[j]; // // var minCoords = coordinates[k]; // // roundedsPoints.push( coordinates[k] ); // callBack( coordinates[k] ); // /* }, 0); */ // } // } // /* },0); */ // } // /* },0); */ // } } // for (var i = 0; i < coords.length; i++) { // points.push(api.coord(coords[i])); // } // var color = api.visual('color'); // ctx.shadowColor='red'; // ctx.shadowBlur=12; // // stroke the shadowed rounded rectangle // ctx.stroke(); // ctx.stroke(); // ctx.stroke(); // // set compositing to erase everything outside the stroke // ctx.globalCompositeOperation='destination-in'; // ctx.fill(); /* setTimeout( () => { */ /* var ctxMain = api.getZr().painter.getLayers()[0].ctx; */ const canvasSum = document.createElement('canvas'); canvasSum.width = myChart.getWidth(); canvasSum.height = myChart.getHeight(); canvasSum.style.width = `${myChart.getWidth() / devicePixelRatio}px`; canvasSum.style.height = `${myChart.getHeight() / devicePixelRatio}px`; var ctxSum = canvasSum.getContext('2d'); var buildInsetShadow = ( points ) => { var canvas = document.createElement('canvas'); canvas.width = myChart.getWidth(); canvas.height = myChart.getHeight(); canvas.style.width = `${myChart.getWidth() / devicePixelRatio}px`; canvas.style.height = `${myChart.getHeight() / devicePixelRatio}px`; var ctx = canvas.getContext('2d'); document.body.appendChild(canvas); drawShape(ctx, points); ctx.fill(); ctx.globalCompositeOperation = 'xor'; ctx.fill(); ctx.shadowColor='red'; ctx.shadowBlur=12; ctx.fill(); ctx.globalCompositeOperation = 'source-in'; // ctx.fillStyle = 'rgba(58, 157, 242, .8)'; ctx.fillStyle = 'red'; ctx.fillRect(0, 0, myChart.getWidth(), myChart.getHeight()); ctx.globalCompositeOperation = 'destination-in'; ctx.fill(); ctxSum.drawImage(canvas,0,0); document.body.removeChild(canvas); } render( buildInsetShadow ); /* ctxMain.drawImage(canvas,0,0); */ /* }, 0 ); */ function drawShape(ctx, shape ) { // console.log( shape ); ctx.beginPath(); var coord = api.coord( shape[0] ); ctx.moveTo(coord[0], coord[1]); var i = 1; while(i < shape.length) { coord = api.coord( shape[i] );; ctx.lineTo(coord[0], coord[1]); i++; } ctx.closePath(); } return { type: 'image', /* z2: -10, */ style: { image: canvasSum, /* height: myChart.getHeight(), width: myChart.getWidth(), */ } } // return { // type: 'group', // children: [ // { // type: 'polygon', // shape: { // points: points, // // echarts.graphic.clipPointsByRect(points, { // // x: params.coordSys.x, // // y: params.coordSys.y, // // width: params.coordSys.width, // // height: params.coordSys.height // // }) // }, // style: api.style({ // shadowColor: 'green', // shadowBlur: 50, // stroke: 'red', // lineWidth: 1, // blend: 'destination-in', // color: 'transparent' // }) // }, // ] // }; } // var offcanvas = myChart.getRenderedCanvas({ // pixelRatio: 2, // backgroundColor: '#fff' // }); // myChart.clear(); // myChart.dispose(); // myChart.setOption( { // color: { // image: offcanvas, // 支持为 HTMLImageElement, HTMLCanvasElement,不支持路径字符串 // repeat: 'no-repeat' // 是否平铺, 可以是 'repeat-x', 'repeat-y', 'no-repeat' // }, // }); var splitLatitude = -170; var str = JSON.stringify( worldMap ); var worldMapCopy = JSON.parse( str ); var worldMapCopy2 = JSON.parse( str ); function transformCoord(arr) { // var bounding = {x: -169.94833984375, y: -55.776855468749964, width: 361.23232421874997, height: 139.34169921874994}; // // var bounding = getBoundingRect(); // var rate1 = bounding.width / myChart.getWidth(); // var rate2 = bounding.height / myChart.getHeight(); // arr[0] += rate1 * ( arr[0]> 0 ? 1 : -1 ); // arr[1] += rate2 * ( arr[0]> 0 ? 1 : -1 ); return arr; } worldMapCopy.geoJson.features.forEach( (countryItem,countryIndex) => { //国 countryItem.geometry.coordinates.forEach( (regionItem, regionIndex) => { //区域 var isBreak1 = false; regionItem.every( (lLItem, indexLL) => { //区域坐标点,经纬度 Latitude Longitude if( typeof lLItem[0] == 'number'){ var latitude = lLItem[0]; var sym = latitude < splitLatitude ? 360 + latitude : latitude; worldMapCopy.geoJson.features[countryIndex].geometry.coordinates[regionIndex][indexLL][0] = sym; // worldMapCopy2.geoJson.features[countryIndex].geometry.coordinates[regionIndex][indexLL][0] = sym; worldMapCopy2.geoJson.features[countryIndex].geometry.coordinates[regionIndex][indexLL] = transformCoord( [sym, lLItem[1]] ); if( sym !== latitude ){ isBreak1 = true; return false; } }else{ var isBreak2 = false; lLItem.every( (minLLItem, indexMinLL) => { var latitude = minLLItem[0]; var sym = latitude < splitLatitude ? 360 + latitude : latitude; worldMapCopy.geoJson.features[countryIndex].geometry.coordinates[regionIndex][indexLL][indexMinLL][0] = sym; worldMapCopy2.geoJson.features[countryIndex].geometry.coordinates[regionIndex][indexLL][indexMinLL] = transformCoord( [sym, minLLItem[1]] ); if( sym != latitude ){ isBreak2 = true; return false; }else{ return true; } } ); if( isBreak2 ) { lLItem.forEach( (minLLItem, indexMinLL) => { var shouldMove = minLLItem[0] < 0 ? 360 + minLLItem[0] : minLLItem[0]; worldMapCopy.geoJson.features[countryIndex].geometry.coordinates[regionIndex][indexLL][indexMinLL][0] = shouldMove; worldMapCopy2.geoJson.features[countryIndex].geometry.coordinates[regionIndex][indexLL][indexMinLL] = transformCoord( [shouldMove, minLLItem[1]] ); } ); } } return true; }); if( isBreak1 ) { regionItem.forEach( (lLItem, indexLL) => { //区域坐标点,经纬度 Latitude Longitude if( typeof lLItem[0] == 'number'){ var shouldMove = lLItem[0] < 0 ? 360 + lLItem[0] : lLItem[0]; worldMapCopy.geoJson.features[countryIndex].geometry.coordinates[regionIndex][indexLL][0] = shouldMove; worldMapCopy2.geoJson.features[countryIndex].geometry.coordinates[regionIndex][indexLL] = transformCoord( [shouldMove, lLItem[1]] ); }else{ var isBreak3 = false; lLItem.every( (minLLItem, indexMinLL) => { var latitude = minLLItem[0]; var sym = latitude < splitLatitude ? 360 + latitude : latitude; worldMapCopy.geoJson.features[countryIndex].geometry.coordinates[regionIndex][indexLL][indexMinLL][0] = sym; worldMapCopy2.geoJson.features[countryIndex].geometry.coordinates[regionIndex][indexLL][indexMinLL] = transformCoord( [sym, minLLItem[1]] ); if( sym != latitude ){ isBreak3 = true; return false; }else{ return true; } } ); if( isBreak3 ) { lLItem.forEach( (minLLItem, indexMinLL) => { var shouldMove = minLLItem[0] < 0 ? 360 + minLLItem[0] : minLLItem[0]; worldMapCopy.geoJson.features[countryIndex].geometry.coordinates[regionIndex][indexLL][indexMinLL][0] = shouldMove ; worldMapCopy2.geoJson.features[countryIndex].geometry.coordinates[regionIndex][indexLL][indexMinLL] = transformCoord( [shouldMove, minLLItem[1]] ); } ); } } }); } }); }); echarts.registerMap('nWorld',worldMapCopy); echarts.registerMap('n2World',worldMapCopy2); // var zr = myChart.getZr(); // var position = [ 200, 200]; // var shape = { // x:10, // y:20, // width:200, // height:1 // }; // console.log(echarts.graphic); // var rect = new echarts.graphic.Rect({ // position: position, // scale:[1,1], // shape:shape, // style:{ // fill:'red', // text: 'zRender Rect', // }, // zlevel:0, // z:3 // }); // var rect2 = new echarts.graphic.Rect({ // position: position, // scale:[1,1], // shape: shape, // style:{ // fill:'green', // text: 'zRender Rect', // shadowColor:'blue', // shadowBlur: 12, // globalCompositeOperation: 'source-in', // }, // zlevel:0, // z: 3 // }); // console.log( zr ); // zr.add(rect); // zr.add(rect2); function getBoundingRect() { // 获取系列 var seriesModel = myChart.getModel().getSeriesByIndex(option.series.length - 1) // 获取地理坐标系实例 var coordSys = seriesModel.coordinateSystem; return coordSys.getBoundingRect(); } // setTimeout( () => { // console.log( getBoundingRect() ); // // 获取系列 // var seriesModel = myChart.getModel().getSeriesByIndex(option.series.length - 1) // // 获取地理坐标系实例 // var coordSys = seriesModel.coordinateSystem; // oordSys.getBoundingRect() // }, 0 );