vue3中使用百度地图

news2025/1/15 13:19:30

基本使用

在项目的index.html加入以下代码(记得替换成自己的key)

<script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&type=webgl&ak=自己的key"></script>

在组件中加入以下代码

<template>
  <div id="container"></div>
</template>
 
<script setup>
import { nextTick, onMounted } from 'vue'
onMounted(() => {
  nextTick(() => {
    initMap()
  })
})
 
const initMap = () => {
  var map = new BMapGL.Map('container');
  var point = new BMapGL.Point(116.404, 39.925);
  map.centerAndZoom(point, 15);
  // 创建点标记
  var marker = new BMapGL.Marker(point);
  map.addOverlay(marker);
  // 创建信息窗口
  var opts = {
    width: 200,
    height: 100,
    title: '故宫博物院'
  };
  var infoWindow = new BMapGL.InfoWindow('地址:北京市东城区王府井大街88号乐天银泰百货八层', opts);
  // 点标记添加点击事件
  marker.addEventListener('click', function () {
    map.openInfoWindow(infoWindow, point); // 开启信息窗口
  });
}
 
</script>
 
<style>
#container {
  overflow: hidden;
  width: 500px;
  height: 500px;
  margin: 0;
  font-family: "微软雅黑";
}
</style>

运行效果图

在这里插入图片描述

实用百度地图进行绘制

原生html版

<!DOCTYPE html>
<html>

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
  <style type="text/css">
    body,
    html {
      width: 100%;
      height: 100%;
      margin: 0;
      font-family: "微软雅黑";
    }

    #allmap {
      width: 100%;
      height: 500px;
      overflow: hidden;
    }

    #result {
      width: 100%;
      font-size: 12px;
    }

    dl,
    dt,
    dd,
    ul,
    li {
      margin: 0;
      padding: 0;
      list-style: none;
    }

    p {
      font-size: 12px;
    }

    dt {
      font-size: 14px;
      font-family: "微软雅黑";
      font-weight: bold;
      border-bottom: 1px dotted #000;
      padding: 5px 0 5px 5px;
      margin: 5px 0;
    }

    dd {
      padding: 5px 0 0 5px;
    }

    li {
      line-height: 28px;
    }
  </style>
  <script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=自己在百度地图申请的key"></script>
  <!--加载鼠标绘制工具-->
  <script type="text/javascript"
    src="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js"></script>
  <link rel="stylesheet" href="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css" />
  <!--加载检索信息窗口-->
  <script type="text/javascript"
    src="http://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.js"></script>
  <link rel="stylesheet" href="http://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.css" />
  <title>鼠标绘制工具</title>
  <style>
    body,
    html {
      width: 100;
      height: 100%;
      margin: 0;
      font-family: "微软雅黑";
    }

    #allmap {
      width: 100%;
      height: 500px;
      overflow: hidden;
    }

    #result {
      width: 100%;
      font-size: 12px;
    }

    dl,
    dt,
    dd,
    ul,
    li {
      margin: 0;
      padding: 0;
      list-style: none;
    }

    p {
      font-size: 12px;
    }

    dt {
      font-size: 14px;
      font-family: "微软雅黑";
      font-weight: bold;
      border-bottom: 1px dotted #000;
      padding: 5px 0 5px 5px;
      margin: 5px 0;
    }

    dd {
      padding: 5px 0 0 5px;
    }

    li {
      line-height: 28px;
    }
  </style>
</head>

<body>
  <div id="allmap" style="overflow: hidden; zoom: 1; position: relative">
    <div id="map" style="
        height: 100%;
        -webkit-transition: all 0.5s ease-in-out;
        transition: all 0.5s ease-in-out;
      "></div>
  </div>
  <div id="result">
    <button>清除所有覆盖物</button>
  </div>
  <script type="text/javascript">
    let btn = document.querySelector("button")
    // 清除覆盖物
    btn.addEventListener('click', function () {
      clearAll()
    })
    function isPointInPolygon (point, polygon) {
      let x = point.lng
      let y = point.lat
      let inside = false
      for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
        let xi = polygon[i].lng
        let yi = polygon[i].lat
        let xj = polygon[j].lng
        let yj = polygon[j].lat

        let intersect = yi > y !== yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi
        if (intersect) inside = !inside
      }
      return inside
    }
    let overlays = []

    // 百度地图API功能
    map = new BMap.Map('map')
    var poi = new BMap.Point(116.307852, 40.057031)  // 初识加载的地点
    map.centerAndZoom(poi, 16) // 放大级别
    map.enableScrollWheelZoom()
    var overlaycomplete = function (e) {
      // 这里由于老板的要求,覆盖物只能存在一次,因此不能让多次去画,需要进行一下判断,有多个存在时直接清空一下
      if (overlays.length > 0) {
        alert('覆盖物只能标注一个')
        clearAll()
      }
      // 不存在多个时,将当前覆盖的信息存储到地图上
      overlays.push(e.overlay)
      console.log('e.overlay.Ko', e.overlay.Ko)  // 我这里的需求是需要画矩形框,这个参数返回了一个数组,里面包含矩形的四个坐标点

      // 这里进行判断,判断当前传入的坐标点是否在矩形内,返回布尔值
      console.log('isPointInPolygon({lng:116.311661,lat:40060179},e.overlay.Ko)', isPointInPolygon({ lng: 116.311661, lat: 40.060179 }, e.overlay.Ko))
    }

    // let isDrawing = false
    // 监听鼠标按住事件
    map.addEventListener('mousedown', () => {
      // 在鼠标按住时开启绘制工具
      drawingManager.open()
    })

    // 监听鼠标松开事件
    map.addEventListener('mouseup', () => {
      // 在鼠标松开时关闭绘制工具
      drawingManager.close()
    })

    var styleOptions = {
      strokeColor: "red",    //边线颜色。
      fillColor: "red",      //填充颜色。当参数为空时,圆形将没有填充效果。
      strokeWeight: 3,       //边线的宽度,以像素为单位。
      strokeOpacity: 0.8,	   //边线透明度,取值范围0 - 1。
      fillOpacity: 0.6,      //填充的透明度,取值范围0 - 1。
      strokeStyle: 'solid' //边线的样式,solid或dashed。
    }
    //实例化鼠标绘制工具
    var drawingManager = new BMapLib.DrawingManager(map, {
      isOpen: false, //是否开启绘制模式
      enableDrawingTool: true, //是否显示工具栏
      drawingToolOptions: {
        anchor: BMAP_ANCHOR_TOP_RIGHT, //位置
        offset: new BMap.Size(5, 5), //偏离值
        drawingModes: [BMAP_DRAWING_RECTANGLE], //控制工具栏显示的选项(不写这个选项代表全部显示)
      },
      circleOptions: styleOptions, //圆的样式
      polylineOptions: styleOptions, //线的样式
      polygonOptions: styleOptions, //多边形的样式
      rectangleOptions: styleOptions,//矩形的样式
      // enableContinuousDrawing: false,
    })

    //添加鼠标绘制工具监听事件,用于获取绘制结果
    drawingManager.addEventListener('overlaycomplete', overlaycomplete)

    // 清空所有覆盖物
    function clearAll () {
      console.log('1234',1234);
      // 循环遍历清除
      for (var i = 0; i < overlays.length; i++) {
        map.removeOverlay(overlays[i])
      }
      overlays.length = 0
    }
  </script>
</body>

</html>

Vue3+vite版本

在index.html引入相关工具包
<!doctype html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <link rel="icon" type="image/svg+xml" href="/vite.svg" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Vite + Vue</title>
  <script type="text/javascript"
    src="https://api.map.baidu.com/api?v=2.0&ak=Im0s0ztDpfjmXuS9TQU4e9j2xqth2Te4"></script>
  <!--加载鼠标绘制工具-->
  <script type="text/javascript" src="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js"></script>
  <link rel="stylesheet" href="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css" />
  <!--加载检索信息窗口-->
  <script type="text/javascript"
    src="http://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.js"></script>
  <link rel="stylesheet" href="http://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.css" />
</head>

<body>
  <div id="app"></div>
  <script type="module" src="/src/main.js"></script>
</body>

</html>
在组件内使用
<script setup>

import { ref, reactive, onMounted, nextTick } from 'vue'
const count = ref(0)
var map = null
onMounted(() => {
  nextTick(() => {
    init()
  })
})

/**
 * 
 * @param {点坐标} point 
 * @param {矩形四个角坐标} polygon 
 * @returns {inside} 判断某个点是否在矩形框内,返回值为布尔值
 */
function isPointInPolygon (point, polygon) {
  let x = point.lng
  let y = point.lat
  let inside = false
  for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
    let xi = polygon[i].lng
    let yi = polygon[i].lat
    let xj = polygon[j].lng
    let yj = polygon[j].lat

    let intersect = yi > y !== yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi
    if (intersect) inside = !inside
  }
  return inside
}

// 存储每个覆盖物的信息
let overlays = ref([])
function init () {
  // 百度地图API功能
  map = new BMap.Map('map')
  var poi = new BMap.Point(116.307852, 40.057031)  // 初识加载的地点
  map.centerAndZoom(poi, 16) // 放大级别
  map.enableScrollWheelZoom()
  var overlaycomplete = function (e) {
    // 这里由于老板的要求,覆盖物只能存在一次,因此不能让多次去画,需要进行一下判断,有多个存在时直接清空一下
    if (overlays.value.length > 0) {
      alert('覆盖物只能标注一个')
      clearAll()
    }
    // 不存在多个时,将当前覆盖的信息存储到地图上
    overlays.value.push(e.overlay)
    console.log('e.overlay.Ko', e.overlay.Ko)  // 我这里的需求是需要画矩形框,这个参数返回了一个数组,里面包含矩形的四个坐标点

    // 这里进行判断,判断当前传入的坐标点是否在矩形内,返回布尔值
    console.log('isPointInPolygon({lng:116.311661,lat:40060179},e.overlay.Ko)', isPointInPolygon({ lng: 116.311661, lat: 40.060179 }, e.overlay.Ko))
  }

  // let isDrawing = false
  // 监听鼠标按住事件
  map.addEventListener('mousedown', () => {
    // 在鼠标按住时开启绘制工具
    drawingManager.open()
  })

  // 监听鼠标松开事件
  map.addEventListener('mouseup', () => {
    // 在鼠标松开时关闭绘制工具
    drawingManager.close()
  })

  var styleOptions = {
    strokeColor: "red",    //边线颜色。
    fillColor: "red",      //填充颜色。当参数为空时,圆形将没有填充效果。
    strokeWeight: 3,       //边线的宽度,以像素为单位。
    strokeOpacity: 0.8,	   //边线透明度,取值范围0 - 1。
    fillOpacity: 0.6,      //填充的透明度,取值范围0 - 1。
    strokeStyle: 'solid' //边线的样式,solid或dashed。
  }
  //实例化鼠标绘制工具
  var drawingManager = new BMapLib.DrawingManager(map, {
    isOpen: false, //是否开启绘制模式
    enableDrawingTool: true, //是否显示工具栏
    drawingToolOptions: {
      anchor: BMAP_ANCHOR_TOP_RIGHT, //位置
      offset: new BMap.Size(5, 5), //偏离值
      drawingModes: [BMAP_DRAWING_RECTANGLE], //控制工具栏显示的选项(不写这个选项代表全部显示)
    },
    circleOptions: styleOptions, //圆的样式
    polylineOptions: styleOptions, //线的样式
    polygonOptions: styleOptions, //多边形的样式
    rectangleOptions: styleOptions,//矩形的样式
    // enableContinuousDrawing: false,
  })

  //添加鼠标绘制工具监听事件,用于获取绘制结果
  drawingManager.addEventListener('overlaycomplete', overlaycomplete)
}

// 清空所有覆盖物
function clearAll () {
  // 循环遍历清除
  for (var i = 0; i < overlays.value.length; i++) {
    map.removeOverlay(overlays.value[i])
  }
  overlays.value.length = 0
}

</script>

<template>
  <div id="allmap" style="overflow: hidden; zoom: 1; position: relative">
    <div
      id="map"
      style="
        height: 100%;
        -webkit-transition: all 0.5s ease-in-out;
        transition: all 0.5s ease-in-out;
      "
    ></div>
  </div>
  <div id="result">
    <button @click="clearAll">清除所有覆盖物</button>
  </div>
</template>

<style scoped>
body,
html {
  width: 100;
  height: 100%;
  margin: 0;
  font-family: "微软雅黑";
}
#allmap {
  width: 100%;
  height: 500px;
  overflow: hidden;
}
#result {
  width: 100%;
  font-size: 12px;
}
dl,
dt,
dd,
ul,
li {
  margin: 0;
  padding: 0;
  list-style: none;
}
p {
  font-size: 12px;
}
dt {
  font-size: 14px;
  font-family: "微软雅黑";
  font-weight: bold;
  border-bottom: 1px dotted #000;
  padding: 5px 0 5px 5px;
  margin: 5px 0;
}
dd {
  padding: 5px 0 0 5px;
}
li {
  line-height: 28px;
}
</style>

效果图(可以添加多个控件,我这里目前只需要长方形,上面代码也对坐标点是否被包含在随机画的长方形内也做了判断) , 原生html或vue版本运行效果皆如图所示
在这里插入图片描述

根据鼠标轨迹画轨迹线(实时轨迹)

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

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=个人申请的秘钥"></script>
  <!--加载鼠标绘制工具-->
  <script type="text/javascript"
    src="https://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js"></script>
  <link rel="stylesheet" href="https://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css" />
  <!--加载检索信息窗口-->
  <script type="text/javascript"
    src="https://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.js"></script>
  <link rel="stylesheet" href="https://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.css" />
</head>

<body>
  <div id="allmap" style="width: 100%;height: 1000px;"></div>
  <div id="r-result">
    <input type="button" onclick="add_overlay();" value="添加覆盖物" />
    <input type="button" onclick="remove_overlay();" value="删除覆盖物" />
  </div>
  <script>
    // 百度地图API功能
    var map = new BMap.Map("allmap")
    var point = new BMap.Point(116.404, 39.915)
    map.centerAndZoom(point, 15)

    var last_point
    function draw_trail (lon, lat) {
      var t = new BMap.Point(lon, lat)

      if (last_point) {
        var polyline = new BMap.Polyline([
          last_point,
          t
        ], { strokeColor: "blue", strokeWeight: 2, strokeOpacity: 0.5 })

        map.addOverlay(polyline)
      }
      last_point = t
    }

    map.addEventListener('mousemove', function (e) {
      if (e.point) {
        if (e.point.lng && e.point.lat) {
          draw_trail(e.point.lng, e.point.lat)
        }
      }

    })

  </script>
</body>
</html>

效果图如下
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1108315.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CAN通信

通讯方式 UART&#xff1a;(Universal Asynchronous Receiver Transmitter&#xff1a;通用异步收发器/异步串行通信口)&#xff0c;是一种通用的串行数据总线&#xff0c;用于异步通信&#xff0c;支持全双工。它包括了RS232、RS499、RS423、RS422和RS485等接口标准规范和总线…

中文连续视觉语音识别挑战赛

视觉语音识别&#xff0c;也称唇语识别&#xff0c;是一项通过口唇动作来推断发音内容的技术。该技术在公共安全、助老助残、视频验真等领域具有重要应用。当前&#xff0c;唇语识别的研究方兴未艾&#xff0c;虽然在独立词、短语等识别上取得了长足进展&#xff0c;但在大词表…

FCKeditor编辑器漏洞

FCKeditor在网页上属于开发源代码的文字编辑器&#xff0c;FCK是作者的名字 搭建环境 查看版本http://192.168.246.20:89/_whatsnew.html 编辑器界面http://192.168.246.20:89/_samples/default.html 常用上传地址 FCKeditor/editor/filemanager/browser/default/browser.html…

华为云HECS服务器下docker可视化(portainer)

一、docker安装 华为云HECS安装docker-CSDN博客 二、portainer安装 portainer地址&#xff1a;Portainer: Docker and Kubernetes Management Platform 当前portainer分CE&#xff08;开源版&#xff09; 和 BE&#xff08;商业版&#xff09;&#xff0c;用CE即可 1 创建…

聚观早报 | 真我GT5 Pro即将登场;OPPO Find N3即将亮相

【聚观365】10月18日消息 真我GT5 Pro即将登场 OPPO Find N3即将亮相 小米澎湃OS正式版已完成封包 百川智能获3亿美元A1轮融资 理想MEGA实车曝光 真我GT5 Pro即将登场 8月28日&#xff0c;全新的真我GT5正式亮相&#xff0c;该机拥有安卓阵营最强悍的性能配置&#xff0c…

kali使用docker安装DVWA

上一篇文章我记录了如何使用kali安装DVWA&#xff0c;但是我是一个一个组件安装的&#xff0c;非常麻烦&#xff0c;比如数据库还需要配置&#xff0c;花费时间很多。昨天在逛github时&#xff0c;发现大佬的靶场都是通过docker打包好的&#xff0c;如果我也用docker安装DVWA&a…

[部署网站02]下载安装 unix PHP7.4 Swoole Loader扩展文件

1.下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/13FA0lu_9uu6yhpHHA0P2yA?pwdhft7 提取码&#xff1a;hft7 2 、安装Swoole Loader 将刚才下载的Swoole Loader扩展文件&#xff08;swoole_loader74.so&#xff09;上传到当前PHP的扩展安装目录中&#x…

DAQ进行准确的测量,为决策提供更可靠的依据

进行准确的测量&#xff0c;为决策提供更可靠的依据 DAQExpress提供了交互式分析面板&#xff0c;可帮助您轻松配置兼容的测量硬件&#xff0c;以及查看分析测量数据。无需编程即可立即捕获测量数据&#xff0c;或者在DAQExpress编辑器中创建一个基本的LabVIEW VI&#xff0c;…

BERT变体(1):ALBERT、RoBERTa、ELECTRA、SpanBERT

Author:龙箬 Computer Application Technology Change the World with Data and Artificial Intelligence ! CSDNweixin_43975035 *天下之大&#xff0c;虽离家万里&#xff0c;何处不可往&#xff01;何事不可为&#xff01; 1. ALBERT \qquad ALBERT的英文全称为A Lite versi…

【Leetcode】【简单】136.只出现一次的数字

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/single-number/description/ 给…

【AIFEM案例操作】水轮机转轮强度和模态分析

AIFEM是由天洑自主研发的一款通用的智能结构仿真软件&#xff0c;助力用户解决固体结构相关的静力学、动力学、振动、热力学等实际工程问题&#xff0c;软件提供高效的前后处理工具和高精度的有限元求解器&#xff0c;帮助用户快速、深入地评估结构的力学性能&#xff0c;加速产…

矩阵置零(C++解法)

题目 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]]示例 2&#xff1a; 输入…

Spring AMQP

大家好我是苏麟 今天说一说spring aqmp。 SpringAMQP SpringAMQP是基于RabbitMQ封装的一套模板&#xff0c;并且还利用SpringBoot对其实现了自动装配&#xff0c;使用起 来非常方便。 官方 : Spring AMQP 依赖 <!--AMQP 包含RabbitMQ--><dependency><groupId&g…

三款经典的轮式/轮足机器人讲解,以及学习EG2133产生A/B/C驱动电机。个人机器人学习和开发路线(推荐)

1&#xff0c;灯哥开源&#xff08;有使用指南&#xff0c;适合刚入门新手&#xff09; 机械部分&#xff1a;2个foc无刷电机 硬件和软件部分&#xff1a;没有驱动板子。只有驱动器&#xff0c;主控板esp32和驱动器通过pwm直接通讯。驱动器板子上有蓝色电机接口&#xff0c;直…

常见的 NoSQL 数据库有哪些?

前言 今天我们来介绍一下工作开发中常见的一些NoSQL数据库及其基本特点。欢迎在评论区留下文章中没有介绍且好用的NOSQL数据库&#x1f91e;。 什么是&#xff08;NOSQL&#xff09;非关系型数据库 非关系型数据库又被称为 NoSQL&#xff08;Not Only SQL )&#xff0c;意为不…

第八章动态规划+第九章同余【算法zxd】

算法设计过程&#xff1a; ①问题分析 ②算法策略 / 建立计算模型 ③算法设计与描述 ④算法分析 [ 算法选择 ] ⑤算法实现 ⑥测试与结果分析 ⑦文档编制 常用结论&#xff1a; 对数低于多项式&#xff1b;多项式低于指数 常用公式&#xff1a; 定理2.5 第八章&#xff1…

软件工程与计算总结(十九)软件测试

目录 ​编辑 一.引言 1.验证与确认 2.目标 3.测试用例 4.桩与驱动 5.缺陷、错误与失败 二.测试层次 1.测试层次的划分 2.单元测试 3.集成测试 4.系统测试 三.测试技术 1.测试用例的选择 2.随机测试 3.基于规格的技术&#xff08;黑盒测试&#xff09; 4.基于代…

你的DOT即将解锁,请注意以下事项

作者&#xff1a; David 还记得两年前Polkadot平行链卡槽拍卖质押吗&#xff1f; 参与平行链众贷&#xff0c;质押DOT两年&#xff0c;选择投票的项目方&#xff0c;获得相应token奖励。当年质押的DOT即将解锁&#xff0c;就在十月底&#xff0c;10月24日请注意。 第一批解锁…

【C语言刷题】模拟实现offsetof宏

本篇文章目录 1. 宏offsetof的作用2. 分析该如何模拟实现3.模拟实现 1. 宏offsetof的作用 在www.cplusplus.com中对offsetof宏的功能描述&#xff1a; 这个宏的作用就是传入一个结构体类型和一个成员名&#xff0c;返回这个成员相对比这个结构体起始位置的偏移量&#xff08…

深度学习零基础教程

代码运行软件安装&#xff1a; anaconda:一个管理环境的软件–>https://blog.csdn.net/scorn_/article/details/106591160&#xff08;可选装&#xff09; pycharm&#xff1a;一个深度学习运行环境–>https://blog.csdn.net/scorn_/article/details/106591160&#xf…