将echarts导入到word中

将echarts导入到word中

echarts自带保存图表配置

在echarts中有导出echarts图表图片的工具配置项

 // 保存图片配置
                        toolbox: {
                            feature: {
                                saveAsImage: {}
                            }
                        },

具体看下面代码的配置项

Documentation - Apache ECharts

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- vue在线引入 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
    <!-- 引入样式 -->
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    <!-- 引入组件库 -->
    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
    <!-- 在线引入echarts -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/5.4.1/echarts.min.js"></script>
</head>

<body>
    <div id="app">
        <div id="main" style="width: 500px; height: 400px;"></div>
    </div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                myChart: null
            },
            methods: {
                // 初始化echarts
                initEcharts() {
                    var chartDom = document.getElementById('main');
                    // 将创建的echarts示例放到vue的data中,这样在这个界面就想到于全局配置了
                    this.myChart = echarts.init(chartDom);
                },
                // 配置echarts的option,展示数据图表
                setEchartsOption() {
                    // 这里可以发送axios请求,然后通过响应的数据赋值给对应的x轴和y轴即可,由于这里没有于后端联调,所以简单请求判断一下,
                    // 请求后端大概也是这个过程
                    var option;

                    option = {
                        tooltip: {
                            trigger: 'axis',
                            axisPointer: {
                                type: 'shadow'
                            }
                        },
                        // 保存图片配置
                        toolbox: {
                            feature: {
                                saveAsImage: {}
                            }
                        },
                        grid: {
                            left: '3%',
                            right: '4%',
                            bottom: '3%',
                            containLabel: true
                        },
                        xAxis: [
                            {
                                type: 'category',
                                data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
                                axisTick: {
                                    alignWithLabel: true
                                }
                            }
                        ],
                        yAxis: [
                            {
                                type: 'value'
                            }
                        ],
                        series: [
                            {
                                name: 'Direct',
                                type: 'bar',
                                barWidth: '60%',
                                data: [10, 52, 200, 334, 390, 330, 220]
                            }
                        ]
                    };

                    option && this.myChart.setOption(option);
                },
            },
            mounted() {
                // 注意调用顺序,先初始化echarts才给echarts赋值
                this.initEcharts()
                this.setEchartsOption()
            }
        })
    </script>
</body>

</html>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eKG1tPzS-1677315550728)(将echarts图导入到word文档中.assets/image-20230224232810525.png)]

在这里插入图片描述

echarts提供了获取图表的api

echarts官网:Documentation - Apache ECharts

在这里插入图片描述

代码如下所示

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- vue在线引入 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
    <!-- 引入样式 -->
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    <!-- 引入组件库 -->
    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
    <!-- 在线引入echarts -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/5.4.1/echarts.min.js"></script>
</head>

<body>
    <div id="app">
        <el-row>
            <el-button type="primary" @click="daochupng">导出为png</el-button>
        </el-row>
        <div id="main" style="width: 500px; height: 400px;"></div>
    </div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                myChart: null
            },
            methods: {
                // 导出为png
                daochupng() {
                    var image = this.myChart.getDataURL({
                        pixelRatio: 2,
                        backgroundColor: '#fff'
                    });
                    let blob = this.dataURLtoBlob(image);
                    let fileName = 'echarts导出结果.png';
                    let file = new File([blob], fileName, { type: 'image/png' })
                    const downloadElement = document.createElement('a');
                    const href = window.URL.createObjectURL(file);
                    downloadElement.href = href;
                    downloadElement.download = fileName;
                    document.body.appendChild(downloadElement);
                    downloadElement.click();
                    document.body.removeChild(downloadElement);
                    window.URL.revokeObjectURL(href);
                },
                // 将base64转化为blob数据
                dataURLtoBlob(dataurl) {
                    let arr = dataurl.split(','),
                        mime = arr[0].match(/:(.*?);/)[1],
                        bstr = atob(arr[1]),
                        n = bstr.length,
                        u8arr = new Uint8Array(n);
                    while (n--) {
                        u8arr[n] = bstr.charCodeAt(n);
                    }
                    return new Blob([u8arr], { type: mime });
                },
                // 初始化echarts
                initEcharts() {
                    var chartDom = document.getElementById('main');
                    // 将创建的echarts示例放到vue的data中,这样在这个界面就想到于全局配置了
                    this.myChart = echarts.init(chartDom);
                },
                // 配置echarts的option,展示数据图表
                setEchartsOption() {
                    // 这里可以发送axios请求,然后通过响应的数据赋值给对应的x轴和y轴即可,由于这里没有于后端联调,所以简单请求判断一下,
                    // 请求后端大概也是这个过程
                    var option;

                    option = {
                        tooltip: {
                            trigger: 'axis',
                            axisPointer: {
                                type: 'shadow'
                            }
                        },
                        // 保存图片配置
                        toolbox: {
                            feature: {
                                saveAsImage: {}
                            }
                        },
                        grid: {
                            left: '3%',
                            right: '4%',
                            bottom: '3%',
                            containLabel: true
                        },
                        xAxis: [
                            {
                                type: 'category',
                                data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
                                axisTick: {
                                    alignWithLabel: true
                                }
                            }
                        ],
                        yAxis: [
                            {
                                type: 'value'
                            }
                        ],
                        series: [
                            {
                                name: 'Direct',
                                type: 'bar',
                                barWidth: '60%',
                                data: [10, 52, 200, 334, 390, 330, 220]
                            }
                        ]
                    };

                    option && this.myChart.setOption(option);
                },
            },
            mounted() {
                // 注意调用顺序,先初始化echarts才给echarts赋值
                this.initEcharts()
                this.setEchartsOption()
            }
        })
    </script>
</body>

</html>

在这里插入图片描述

echarts通过服务器后端上传echarts图到服务器

前端代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- vue在线引入 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
    <!-- 引入样式 -->
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    <!-- 引入组件库 -->
    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
    <!-- 在线引入echarts -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/5.4.1/echarts.min.js"></script>
    <!-- axios -->
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>

<body>
    <div id="app">
        <el-row>
            <el-button type="primary" @click="shangchuanfuwuqi">echarts上传到服务器</el-button>
        </el-row>
        <div id="main" style="width: 500px; height: 400px;"></div>
    </div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                myChart: null
            },
            methods: {
                // 导出为png
                async shangchuanfuwuqi() {
                    var image = this.myChart.getDataURL({
                        pixelRatio: 2,
                        backgroundColor: '#fff'
                    });
                    let blob = this.dataURLtoBlob(image);
                    let fileName = 'echarts导出结果.png';
                    let file = new File([blob], fileName, { type: 'image/png' })
                    // 因为uploadecharts使用了async修饰,所以这里返回的是promise对象,这里使用await接受,也可以用then的形式
                    const result = await this.uploadecharts(file, fileName)
                    // debugger
                    console.log(result)
                    this.$message.success(result)
                },
                // 上传echarts图片给服务器接口
                async uploadecharts(file, fileName) {
                    const form = new FormData();
                    form.append("file", file)
                    form.append("filename", fileName) // 这个写在这里只是想说明,出来传文件还可以填多个字段
                    const result = await axios.post('http://localhost:8080/upload/echarts', form)
                    // debugger
                    console.log(result)
                    return result.data
                },
                // 将base64转化为blob数据
                dataURLtoBlob(dataurl) {
                    let arr = dataurl.split(','),
                        mime = arr[0].match(/:(.*?);/)[1],
                        bstr = atob(arr[1]),
                        n = bstr.length,
                        u8arr = new Uint8Array(n);
                    while (n--) {
                        u8arr[n] = bstr.charCodeAt(n);
                    }
                    return new Blob([u8arr], { type: mime });
                },
                // 初始化echarts
                initEcharts() {
                    var chartDom = document.getElementById('main');
                    // 将创建的echarts示例放到vue的data中,这样在这个界面就想到于全局配置了
                    this.myChart = echarts.init(chartDom);
                },
                // 配置echarts的option,展示数据图表
                setEchartsOption() {
                    // 这里可以发送axios请求,然后通过响应的数据赋值给对应的x轴和y轴即可,由于这里没有于后端联调,所以简单请求判断一下,
                    // 请求后端大概也是这个过程
                    var option;

                    option = {
                        tooltip: {
                            trigger: 'axis',
                            axisPointer: {
                                type: 'shadow'
                            }
                        },
                        // 保存图片配置
                        toolbox: {
                            feature: {
                                saveAsImage: {}
                            }
                        },
                        grid: {
                            left: '3%',
                            right: '4%',
                            bottom: '3%',
                            containLabel: true
                        },
                        xAxis: [
                            {
                                type: 'category',
                                data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
                                axisTick: {
                                    alignWithLabel: true
                                }
                            }
                        ],
                        yAxis: [
                            {
                                type: 'value'
                            }
                        ],
                        series: [
                            {
                                name: 'Direct',
                                type: 'bar',
                                barWidth: '60%',
                                data: [10, 52, 200, 334, 390, 330, 220]
                            }
                        ]
                    };

                    option && this.myChart.setOption(option);
                },
            },
            mounted() {
                // 注意调用顺序,先初始化echarts才给echarts赋值
                this.initEcharts()
                this.setEchartsOption()
            }
        })
    </script>
</body>

</html>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UHGgDtKl-1677315550731)(将echarts图导入到word文档中.assets/image-20230225002114674.png)]

后端代码

springboot2.5.0+jdk1.8

@RestController
@RequestMapping("/upload")
@CrossOrigin // 允许跨域,前后端分离
public class UploadEchartsController {

    @RequestMapping("/echarts")
    public String uploadEcharts(MultipartFile file) throws IOException {
        String filename = file.getOriginalFilename();
        // 文件保存路径
        Path path = Paths.get("D:\\private\\javastudaykeshanchu\\img\\" + filename);
        file.transferTo(path);
       /* try {
            file.transferTo(path);
        } catch (IOException e) {
            e.printStackTrace();
        }*/
        return "上传图片成功";
    }
}

结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UMJj8VZh-1677315550732)(将echarts图导入到word文档中.assets/image-20230225002226517.png)]

到代码中对应的文件夹看,可以看到赌赢的echarts图片已经成功上传到服务器了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5VJ2vghk-1677315550732)(将echarts图导入到word文档中.assets/image-20230225002308769.png)]

查看结果为

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OwXGNagm-1677315550733)(将echarts图导入到word文档中.assets/image-20230225002357974.png)]

这时就可以将echarts图片写入到word中了

前端vue,后端springboot + easypoi

easypoi的maven坐标如下所示:

<dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-spring-boot-starter</artifactId>
            <version>4.4.0</version>
        </dependency>

word模板如下所示

前端代码如下所示

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- vue在线引入 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
    <!-- 引入样式 -->
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    <!-- 引入组件库 -->
    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
    <!-- 在线引入echarts -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/5.4.1/echarts.min.js"></script>
    <!-- axios -->
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>

<body>
    <div id="app">
        <el-row>
            <el-button type="primary" @click="shangchuanfuwuqi">echarts上传到服务器</el-button>
        </el-row>
        <div id="main" style="width: 500px; height: 400px;"></div>
    </div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                myChart: null
            },
            methods: {
                // 导出为png
                async shangchuanfuwuqi() {
                    var image = this.myChart.getDataURL({
                        pixelRatio: 2,
                        backgroundColor: '#fff'
                    });
                    let blob = this.dataURLtoBlob(image);
                    let fileName = 'echarts导出结果.png';
                    let file = new File([blob], fileName, { type: 'image/png' })
                    // 因为uploadecharts使用了async修饰,所以这里返回的是promise对象,这里使用await接受,也可以用then的形式
                    const result = await this.uploadecharts(file, fileName)
                    // debugger
                    console.log(result)
                    this.$message.success(result)
                    // 这里将图片的名称传给后端,因为后端需要根据图片名加上路径找到上传图片所在的位置,
                    // 这里上传的图片放到了本地,而不是类似于上传到七牛云之类的。
                    // 这里的后端使用了map集合接收,具体看后端代码
                    const params = { echartsimgname: fileName, describe: '这个是一个星期对应的柱形图如下所示' }
                    // 虽然后端是void,但是后端是通过HttpServletResponse 以流的形式返回的,所以这里axios的data就是返回的流数据
                    const res = await axios.post('http://localhost:8080/upload/exportechartstoword', params, { responseType: "blob" })
                    const link = document.createElement("a");
                    let blob2 = new Blob([res.data], { type: "application/msword" });
                    link.style.display = "none";
                    link.href = URL.createObjectURL(blob2);
                    link.setAttribute("download", 'echarts将图片写入到word文档中.docx');
                    document.body.appendChild(link);
                    link.click();
                    document.body.removeChild(link);
                    this.$message.success("将echarts导入到word成功")
                },
                // 上传echarts图片给服务器接口
                async uploadecharts(file, fileName) {
                    const form = new FormData();
                    form.append("file", file)
                    form.append("filename", fileName) // 这个写在这里只是想说明,出来传文件还可以填多个字段
                    const result = await axios.post('http://localhost:8080/upload/echarts', form)
                    // debugger
                    console.log(result)
                    return result.data
                },
                // 将base64转化为blob数据
                dataURLtoBlob(dataurl) {
                    let arr = dataurl.split(','),
                        mime = arr[0].match(/:(.*?);/)[1],
                        bstr = atob(arr[1]),
                        n = bstr.length,
                        u8arr = new Uint8Array(n);
                    while (n--) {
                        u8arr[n] = bstr.charCodeAt(n);
                    }
                    return new Blob([u8arr], { type: mime });
                },
                // 初始化echarts
                initEcharts() {
                    var chartDom = document.getElementById('main');
                    // 将创建的echarts示例放到vue的data中,这样在这个界面就想到于全局配置了
                    this.myChart = echarts.init(chartDom);
                },
                // 配置echarts的option,展示数据图表
                setEchartsOption() {
                    // 这里可以发送axios请求,然后通过响应的数据赋值给对应的x轴和y轴即可,由于这里没有于后端联调,所以简单请求判断一下,
                    // 请求后端大概也是这个过程
                    var option;

                    option = {
                        tooltip: {
                            trigger: 'axis',
                            axisPointer: {
                                type: 'shadow'
                            }
                        },
                        // 保存图片配置
                        toolbox: {
                            feature: {
                                saveAsImage: {}
                            }
                        },
                        grid: {
                            left: '3%',
                            right: '4%',
                            bottom: '3%',
                            containLabel: true
                        },
                        xAxis: [
                            {
                                type: 'category',
                                data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
                                axisTick: {
                                    alignWithLabel: true
                                }
                            }
                        ],
                        yAxis: [
                            {
                                type: 'value'
                            }
                        ],
                        series: [
                            {
                                name: 'Direct',
                                type: 'bar',
                                barWidth: '60%',
                                data: [10, 52, 200, 334, 390, 330, 220]
                            }
                        ]
                    };

                    option && this.myChart.setOption(option);
                },
            },
            mounted() {
                // 注意调用顺序,先初始化echarts才给echarts赋值
                this.initEcharts()
                this.setEchartsOption()
            }
        })
    </script>
</body>

</html>

java后端代码

@RestController
@RequestMapping("/upload")
@CrossOrigin // 允许跨域,前后端分离
public class UploadEchartsController {

    /**
     * 将echarts上传只服务器的接口
     * @param file
     * @return
     * @throws IOException
     */
    @RequestMapping("/echarts")
    public String uploadEcharts(MultipartFile file) throws IOException {
        String filename = file.getOriginalFilename();
        // 文件保存路径,D:\private\javastudaykeshanchu\img\这里可以通过application.yml配置文件夹路径,然后在后面拼接文件名即可
        Path path = Paths.get("D:\\private\\javastudaykeshanchu\\img\\" + filename);
        file.transferTo(path);
       /* try {
            file.transferTo(path);
        } catch (IOException e) {
            e.printStackTrace();
        }*/
        return "上传图片成功";
    }

    /**
     *
     * @param response
     * @param maps 这里使用map接收数据是因为这样更加方便,如果使用实体类接收,还要转化为Map<String,Object>这种类型,具体看另外一篇文章
     * @throws Exception
     */
    @PostMapping("/exportechartstoword")
    public void exportword(HttpServletResponse response, @RequestBody Map<String,Object> maps) throws Exception {
        // 读取模板文件所在的位置
//        File filepath = new File("D:\\private\\javastudaykeshanchu\\javaweb\\echarts-demo\\src\\main\\resources\\templates\\wordtemplate.docx");
        String name = "echarts图表保存到word中";
        // filepath.getPath()是为了让路径变成string,否则下面的报错
//        XWPFDocument word = WordExportUtil.exportWord07(filepath.getPath(), maps);
        // 或者直接在这里填写路径也行,就不用创建File了,而且这个路径有条件的话也可以放在application.yml中配置,这样的通用性就会强一点,具体看静态资源配置那篇文章
        // 创建图像对象
        ImageEntity imageEntity = new ImageEntity();
        // 如这里的文件路径就可以设置到applic.yml中,然后通过读取yml的配置项获得路径,放到这里,这里就暂时用这种形式来吧
        imageEntity.setUrl("D:\\private\\javastudaykeshanchu\\img\\" + maps.get("echartsimgname").toString());
        // 这里的宽高一定要设置,不然图片出不来,至于设置多少,可以自己到word中A4纸100%的缩放,然后通过Snipaste截图软件大概截图个宽高,然后照着输入就行了
        imageEntity.setWidth(500);
        imageEntity.setHeight(300);
        maps.put("echartsimg", imageEntity);
        XWPFDocument word = WordExportUtil.exportWord07("D:\\private\\javastudaykeshanchu\\javaweb\\echarts-demo\\src\\main\\resources\\templates\\wordtemplate.docx", maps);
        String fileName = "echarts通过(" + name + ")详情.docx";
        response.setHeader("content-disposition", "attachment;filename=" + new String(fileName.getBytes(), "ISO8859-1"));
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        ServletOutputStream outputStream = response.getOutputStream();
        word.write(outputStream);
        outputStream.close();
        word.close();
    }
}

结果如下图所示

在这里插入图片描述

打开word文档得到的结果如下所示

在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
免费分享大家 [44.38652343750002,10.430224609374989],[44.94296875,10.43671875],[45.81669921875002,10.835888671874997],[46.565039062500006,10.745996093749994],[47.40498046875001,11.174023437499997],[48.01923828125001,11.139355468749997],[48.57255859375002,11.320507812499997],[48.938574218750006,11.258447265624994],[50.11005859375001,11.529296875],[50.79228515625002,11.983691406249989],[51.2548828125,11.830712890624994],[51.08427734375002,11.335644531249997],[51.140625,10.656884765624994],[51.031835937500006,10.444775390624997],[51.19296875,10.554638671874997],[51.390234375,10.422607421875],[50.93007812500002,10.33554687499999],[50.825,9.428173828124997],[50.10283203125002,8.199804687499991],[49.85205078125,7.962548828124994],[49.234960937500006,6.77734375],[49.04931640625,6.173632812499989],[47.97529296875001,4.497021484374997],[46.87880859375002,3.28564453125],[46.05117187500002,2.475146484374989],[44.92021484375002,1.81015625],[43.71757812500002,0.857861328124997],[41.97988281250002,-0.973046875],[41.53271484375,-1.6953125],[41.521875,-1.572265625],[41.42695312500001,-1.449511718750003],[41.24980468750002,-1.220507812500003],[40.97871093750001,-0.870312500000011],[40.964453125,2.814648437499997],[41.341796875,3.20166015625],[41.61347656250001,3.590478515624994],[41.88398437500001,3.977734375],[41.91533203125002,4.031298828124989],[42.02412109375001,4.137939453125],[42.85664062500001,4.32421875],[43.12568359375001,4.644482421874997],[43.58349609375,4.85498046875],[43.988867187500006,4.950537109374991],[44.940527343750006,4.912011718749994],[47.97822265625001,7.9970703125]]]},"properties":{"name":"索马里","childNum":1}},{"geometry":{"type":"Polygon","coordinates":[[[9.579979133936737,47.05856388629306],[9.409458596647225,47.02019676540292],[9.46249431093294,47.09010747968864],[9.46249431093294,47.19858962254578],[9.527658197470123,47.27026989773668],[9.579979133936737,47.05856388629306]]]},"properties":{"name":"列支敦斯登","childNum":1}},{"geometry":{"type":"Polygon","coordinates":[[[-8.683349609375,27.77800740805682],[-13.038761787013554,27.81190166624856],[-12.948925781249926,27.914160156250034],[-11.552685546874955,28.31010742187496],[-10.486474609374994,29.06494140625],[-10.200585937499994,29.380371093750057],[-9.667089843749949,30.10927734375005],[-9.652929687499977,30.447558593750045],[-9.875488281249943,30.717919921874966],[-9.80869140624992,31.42460937499996],[-9.347460937499932,32.086376953124955],[-9.245849609375,32.572460937499955],[-8.512841796874994,33.25244140625003],[-6.900976562499949,33.96904296874999],[-6.353125,34.77607421875001],[-5.924804687499943,35.78579101562502],[-5.277832031249943,35.90273437500002],[-5.252685546874972,35.61474609374997],[-4.628320312499966,35.206396484375006],[-4.329980468749937,35.161474609375006],[-3.693261718749994,35.27998046874998],[-3.394726562499926,35.21181640625005],[-2.972216796874989,35.40727539062499],[-2.839941406249949,35.127832031249994],[-2.731396484374955,35.13520507812498],[-2.636816406249977,35.11269531250002],[-2.423730468749994,35.12348632812498],[-2.219628906249966,35.10419921874998],[-1.795605468749926,34.751904296874955],[-1.67919921875,33.31865234375002],[-1.550732421874955,33.073583984375006],[-1.510009765625,32.877636718749955],[-1.45,32.784814453124966],[-1.352148437499977,32.70336914062497],[-1.29638671875,32.67568359375002],[-1.188232421875,32.608496093750006],[-1.111035156249983,32.55229492187502],[-1.065527343749949,32.46831054687496],[-1.16259765625,32.399169921875],[-1.275341796874983,32.089013671874966],[-2.863427734374937,32.07470703124997],[-2.930859374999926,32.04252929687499],[-2.988232421874983,31.874218749999983],[-3.01738281249996,31.834277343750017],[-3.439794921874949,31.704541015624983],[-3.604589843749949,31.686767578125],[-3.700244140624989,31.70009765625005],[-3.768164062499977,31.689550781250034],[-3.837109374999983,31.512353515624994],[-3.833398437499937,31.197802734375045],[-3.626904296874955,31.000927734374983],[-4.148779296874977,30.8095703125],[-4.322851562500006,30.698876953124994],[-4.52915039062492,30.62553710937499],[-4.778515624999926,30.552392578124994],[-4.968261718749943,30.465380859375045],[-5.061914062499937,30.326416015625057],[-5.180126953124955,30.166162109374994],[-5.293652343749983,30.058642578125045],[-5.44877929687496,29.956933593750023],[-6.00429687499999,29.83125],[-6.479736328124943,29.82036132812499],[-6.520556640624989,29.659863281249983],[-6.59775390624992,29.578955078125006],[-6.635351562499949,29.568798828124983],[-6.755126953125,29.583837890625034],[-6.855566406249949,29.601611328125017],[-7.142431640624949,29.61958007812504],[-7.427685546874983,29.425],[-7.485742187499994,29.392236328124994],[-8.659912109375,28.718603515625063],[-8.683349609375,27.900390625],[-8.683349609375,27.77800740805682]]]},"properties":{"name":"摩洛哥","childNum":1}},{"geometry":{"type":"Polygon","coordinates":[[[-13.038761787013554,27.81190166624856],[-8.683349609375,27.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值