高德地图撒点组件

news2024/3/3 17:31:36

请添加图片描述

一、引入amap地图库 - public/index.html

<script type="text/javascript">
    window._AMapSecurityConfig = {
      securityJsCode: '地图密钥' 
    }
  </script>
  <script
    type="text/javascript"
    src="https://webapi.amap.com/maps?v=1.4.8&key=111111111111111111111111"
  ></script>

二、组件 - DzvScatterMap

<template>
  <div class="container-box">
    <div id="container"></div>
  </div>
</template>
<script>
import { containerType, getLocation } from '@/utils/alipay'
import locationImg from '@/assets/images/location.png'

const { AMap } = window

const iconSize = 56
const defaultZoom = 12

export default {
  name: 'DzvScatterMap',
  props: {
    lngLat: {
      type: Array,
      default: () => []
    },
    // 点位列表
    list: {
      type: Array,
      default: () => []
    },
    // 样式列表
    styles: {
      type: Array,
      default: () => []
    }
  },
  data() {
    return {
      map: null,
      cluster: null,
      mass: null,
      styleList: []
    }
  },
  watch: {
    lngLat: function(value) {
      if (value && value.length > 0) {
        this.initAMap()
      }
    },
    list: {
      deep: true,
      handler: function(newVal) {
        if (this.map) {
          this.markerMyPosition(this.lngLat)
        }
      }
    },
    styles: {
      deep: true,
      handler: function(newVal) {
        this.styleList = newVal?.map(it => ({
          ...it,
          url: it?.src,
          anchor: new AMap.Pixel(6, 6),
          size: new AMap.Size(iconSize, 56),
          zIndex: 3
        }))
      }
    }
  },
  created() {},
  mounted() {
    this.initAMap()
  },
  methods: {
    // 初始化地图
    initAMap() {
      this.map = new AMap.Map('container', {
        zoom: defaultZoom, // 级别
        resizeEnable: true,
        center: [113.67621, 34.74499], // 默认中心点坐标
        viewMode: '2D' // 使用2D视图,使用3D在amap2.0中会旋转
      })
      this.markerMyPosition(this.lngLat)
    },
    // 标记自己的位置
    markerMyPosition(lngLat) {
      if (lngLat && lngLat.length > 0) {
        if (this.locationMarker) {
          this.map.remove(this.locationMarker)
        }

        this.locationMarker = new AMap.Marker({
          offset: new AMap.Pixel(-10, -10),
          position: new AMap.LngLat(lngLat[0], lngLat[1]),
          zoom: 13,
          content: `<div style="background-size: 100% 100%; height: 30px; width: 30px; background-image:url(${locationImg});"></div>`
        })
        if (this.map) {
          this.map.add(this.locationMarker) // 添加位置marker
          this.map.setCenter(lngLat) // 设置中心
          this.map.setZoom(defaultZoom) // 重置缩放
          this.panBy() // 设置地图平移量,将marker移到中心
        }
      }
      // 地图加载完成后,进行撒点
      this.asyncMarker()
    },
    // 地图的平移
    panBy() {
      const refList = document.getElementById('refList')
      const height = refList?.offsetHeight
      if (height > 50) {
        // 地图中心点平移
        this.map.panTo(this.lngLat)
        // 像素值平移
        this.map.panBy(0, -height / 2)
      }
    },
    // 撒点
    getMarkerList(allPoints = {}, currentType = '') {
      // 洒点之前清除上次的洒点
      if (this.mass) this.mass.clear()
      if (this.list) {
        const serviceHall = this.list.map(item => {
          return {
            ...item,
            lnglat: [item.siteCoordinateY, item.siteCoordinateX],
            style: item.typeId
          }
        })
        this.mass = new AMap.MassMarks(serviceHall, {
          opacity: 0.8,
          zIndex: 111,
          cursor: 'pointer',
          style: this.styleList
        })
        this.mass.on('click', this.markerClick)
        this.mass.setMap(this.map)
        this.$forceUpdate()
      }
    },
    // 类型和全部定位数据修改的时候进行延迟撒点,展示列表中的loading效果
    asyncMarker() {
      const _this = this
      setTimeout(() => {
        const { allPoints, currentType } = _this
        _this.getMarkerList(allPoints, currentType)
      }, 5)
    },
    // 点击事件
    markerClick(e) {
      // const curentPoint = e.target.getExtData() || {}
      const currentPoint = e.data || {}
      this.$emit('changePoint', currentPoint)
    },
    // 获取当前位置
    async location() {
      if (containerType() === 'xcx' || containerType() === 'wechat') {
        // this.$emit('changeLngLat', this.lngLat)
        this.markerMyPosition(this.lngLat)
      } else {
        const lngLat = await getLocation()
        // this.$emit('changeLngLat', lngLat)
        this.markerMyPosition(lngLat)
      }
    }
  }
}
</script>
<style lang="scss" scoped>
.container-box {
  padding: 0px;
  margin: 0px;
  width: 100vw;
  height: calc(100vh - 50px);
  position: relative;
}
#container {
  padding: 0px;
  margin: 0px;
  width: 100%;
  height: 100%;
  position: absolute;
}
.location-icon {
  width: 40px;
  height: 40px;
  background: $white;
  border-radius: 10px;
  display: flex;
  justify-content: center;
  align-items: center;
  position: absolute;
  z-index: 20;
  right: 10px;
  top: 10px;
}
h3 {
  position: absolute;
  left: 10px;
  z-index: 2;
  color: white;
}
::v-deep {
  .amap-logo {
    z-index: -1;
  }
  .amap-copyright {
    z-index: -1;
  }
}
</style>

三、使用

2.1.home/index.vue

<template>
  <div>
    <HomePickers
      :types="types"
      @updateInfo="updateInfo"
      :class="{ 'home-pickers': true, 'fade-out-picker': fadeOutPicker, 'fade-in-picker': fadeInPicker }"
    />
    <DzvScatterMap
      ref="map"
      :isInit="isInit"
      :lngLat="lngLat"
      :styles="styles"
      :list="itemList"
      @changePoint="changePoint"
    >
      <div id="container" slot="container"></div>
    </DzvScatterMap>
    <HomeBtns @btn="btnClick" ref="refList" id="refList" />
    <HomeSearch :class="{ 'home-search': true, 'fade-out-search': fadeOutSearch, 'fade-in-search': fadeInSearch }" />
    <HomeModal v-if="showModal" @changeShow="changeShow" :item="currentPoint" />
  </div>
</template>

<script>
import { getItemListApi, getClassListApi } from '@/api/home'
import { getLocation, checkAppPermissionHandler } from '@/utils/alipay'
import { countDistance } from '@/utils/index'
import HomePickers from './@component/pickers'
import HomeBtns from './@component/btns'
import HomeSearch from './@component/searches'
import HomeModal from './@component/modal'

export default {
  components: { HomePickers, HomeBtns, HomeSearch, HomeModal },
  data() {
    return {
      isInit: true,
      currentPoint: null, // 当前点击的点位
      itemList: [],
      types: [], // 分类类型
      styles: [], // 地图撒点样式类型
      lngLat: null, // 自身
      params: {},
      pickerInfo: {},
      fadeOutPicker: false,
      fadeInPicker: false,
      fadeOutSearch: false,
      fadeInSearch: false,
      showModal: false // 是否显示选中区域模态框
    }
  },
  computed: {},
  created() {
    this.getClassList() // 查询分类
    this.getItemList() // 查询点位,郑州市不传areaCode
    this.location() // 获取当前位置
  },
  mounted() {},
  methods: {
    getClassList() {
      getClassListApi().then(res => {
        if (res?.code === 0) {
          const types = res?.data?.map(it => ({ text: it?.name, value: it?.id }))
          types?.unshift({ text: '全部类型', value: undefined })
          this.types = types
          this.styles = res?.data
          this.$refs.map.initAMap(this.lngLat) // 初始化地图
        }
      })
    },
    // 获取分类下10公里以内的数据,地图滑动重新请求
    getItemList() {
      checkAppPermissionHandler({ allowLocation: 'must' }, ({ status, location }) => {
        // const { longitude, latitude } = location
        const longitude = 113.58762
        const latitude = 37.86236
        getItemListApi({ ...this.params, longitude, latitude }).then(res => {
          if (res?.code === 0) {
            this.itemList = Object.freeze(
              res?.data.map(item => {
                const { meter, result } = countDistance(longitude, latitude, item.siteCoordinateY, item.siteCoordinateX)
                return {
                  ...item,
                  distance: result,
                  meter
                }
              })
            )
            this.$refs.map.initAMap(this.lngLat) // 初始化地图
          } else {
            this.$toast(res.message)
          }
        })
      })
    },
    changeShow() {
      this.showModal = !this.showModal
    },
    // 修改分类切换
    updateInfo(item) {
      this.params = { ...item }
      this.getItemList()
    },
    // 修改定位
    async changeLngLat(lngLat) {
      this.lngLat = lngLat
      this.$forceUpdate()
    },
    // 获取当前定位并设置自己的位置
    async location() {
      getLocation(res => {
        const longitude = 113.77855
        const latitude = 34.759108
        const lngLat = [longitude, latitude]
        this.changeLngLat(lngLat)
      })
    },
    changePoint(val) {
      this.currentPoint = val
      this.showModal = true
    },
    btnClick(val) {
      // 淡出
      if (val === 1) {
        this.fadeOutPicker = true
        this.fadeOutSearch = true
        this.fadeInPicker = false
        this.fadeInSearch = false
      }
      // 淡入
      if (val === 2) {
        this.fadeInPicker = true
        this.fadeInSearch = true
        this.fadeOutPicker = false
        this.fadeOutSearch = false
      }
      if (val === 3) {
        console.log('val', this.$refs.map.panBy, this.lngLat)
        // 回到当前位置
        this.$refs.map.panBy(this.lngLat)
      }
    }
  }
}
</script>
<style lang="scss" scoped>
.home-pickers {
  width: 100%;
  position: absolute;
  top: 0;
  z-index: 1000;
}
.home-search {
  width: 100%;
  position: absolute;
  bottom: 0;
  z-index: 999;
}
.fade-out-picker {
  animation: fadeOutPicker 1s ease forwards;
}

@keyframes fadeOutPicker {
  0% {
    opacity: 1;
    transform: translateY(0);
  }
  100% {
    opacity: 0;
    transform: translateY(-100%);
  }
}

.fade-out-search {
  animation: fadeOutSearch 1s ease forwards;
}

@keyframes fadeOutSearch {
  0% {
    opacity: 1;
    transform: translateY(0);
  }
  100% {
    opacity: 0;
    transform: translateY(100%);
  }
}

.fade-in-picker {
  animation: fadeInPicker 1s ease forwards;
}

@keyframes fadeInPicker {
  0% {
    opacity: 0;
    transform: translateY(-100%);
  }
  100% {
    opacity: 1;
    transform: translateY(0);
  }
}
.fade-in-search {
  animation: fadeInSearch 1s ease forwards;
}

@keyframes fadeInSearch {
  0% {
    opacity: 0;
    transform: translateY(100%);
  }
  100% {
    opacity: 1;
    transform: translateY(0);
  }
}
</style>

2.2.顶部选择器 - home/@component/pickers/index.vue

<template>
  <div class="pickers">
    <van-dropdown-menu active-color="#2689FF">
      <van-dropdown-item v-model="area" :options="areas" @change="menuChange" />
      <van-dropdown-item v-model="type" :options="types" @change="menuChange" />
      <van-dropdown-item v-model="charge" :options="charges" @change="menuChange" />
    </van-dropdown-menu>
  </div>
</template>
<script>
import { charges, areas } from '@/utils/constant'

export default {
  name: 'HomePickers',
  props: {
    types: {
      type: Array,
      default: () => []
    }
  },
  data() {
    return {
      area: undefined,
      type: undefined,
      charge: undefined,
      areas,
      charges
    }
  },
  created() {},
  methods: {
    // 修改信息
    menuChange() {
      this.$emit('updateInfo', { area: this.area, type: this.type, charge: this.charge })
    }
  }
}
</script>
<style lang="scss">
.pickers {
  .van-dropdown-menu {
    .van-dropdown-menu__bar {
      background: linear-gradient(360deg, #d6fcff 0%, #ffffff 100%);
      box-shadow: 0px 2px 6px 0px rgba(129, 163, 203, 0.15);
    }
    .van-ellipsis {
      font-size: 16px;
      font-weight: 400;
      color: yellow;
      line-height: 22px;
      text-shadow: 0px 2px 12px rgba(100, 101, 102, 0.08);
      background: linear-gradient(307deg, #32b6ff 0%, #3562fe 100%);
      font-family: MaokenZhuyuanTi;
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
    }
    .van-dropdown-menu__title::after {
      border-color: transparent transparent #32b6ff #32b6ff;
    }
  }
}
</style>

2.3.底部搜索页 - home/@component/search/index.vue

<template>
  <div class="searches">
    <div class="searches-box">
      <div class="search" @click="onSearch">
        <van-image width="18" height="18" :src="require('@/assets/images/search.png')" />
        <span class="text">搜索</span>
      </div>
      <div class="item">
        <div v-for="it in item" :key="it.value">
          <div class="it" @click="onJump(it)">
            <van-image :src="it.icon" width="50" height="50" />
            <span class="text">{{ it.text }}</span>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  name: 'HomeSearch',
  data() {
    return {
      item: [
        { value: 1, text: '我要去', icon: require('@/assets/images/go.png'), url: '/go' },
        { value: 2, text: '动态资讯', icon: require('@/assets/images/info.png'), url: '/news' },
        { value: 3, text: '疫苗预约', icon: require('@/assets/images/vaccinum.png'), url: '' },
        { value: 4, text: '入驻服务', icon: require('@/assets/images/enter.png'), url: '' }
      ]
    }
  },
  created() {},
  methods: {
    onSearch() {
      this.$router.push({ path: '/search' })
    },
    onJump(item) {
      if (['http', 'https'].includes(item?.path?.split(':')?.[0])) {
        window.open(item.url)
      } else {
        this.$router.push({ path: item?.url })
      }
    }
  }
}
</script>
<style lang="scss">
.searches {
  height: 266px;
  width: 100%;
  background-image: url('~@/assets/images/search-bg.png');
  background-repeat: no-repeat;
  background-size: 100% 100%;
  &-box {
    width: 100%;
    height: 141px;
    margin-top: 125px;
    background: linear-gradient(360deg, #d6fcff 0%, #ffffff 100%);
    box-shadow: 0px 2px 6px 0px rgba(129, 163, 203, 0.15);
    border-radius: 24px 24px 0px 0px;
    .search {
      position: relative;
      top: 8px;
      margin: 0 17px;
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 8px 0;
      background: rgba(67, 191, 243, 0.1);
      border-radius: 18px;
      border: 1px solid #43bff3;
      .text {
        margin-left: 4px;
        font-size: 14px;
        font-weight: 400;
        color: #43bff3;
        line-height: 20px;
      }
    }
    .item {
      position: relative;
      top: 12px;
      display: flex;
      justify-content: space-between;
      align-items: center;
      padding: 0 32px;
      .it {
        display: flex;
        justify-content: center;
        align-items: center;
        flex-direction: column;
        .text {
          font-size: 13px;
          font-weight: 700;
          color: #3562fe;
          line-height: 19px;
          background: linear-gradient(307deg, #32b6ff 0%, #3562fe 100%);
          -webkit-background-clip: text;
          -webkit-text-fill-color: transparent;
        }
      }
    }
  }
}
</style>

2.4.按钮 - home/@component/btns/index.vue

放大,缩小,当前位置定位

<template>
  <div class="btns">
    <van-image
      :src="require('@/assets/images/enlarge.png')"
      width="67"
      height="67"
      @click="btnClick(1)"
      :style="{ display: show ? 'block' : 'none' }"
    />
    <van-image
      :src="require('@/assets/images/lessen.png')"
      width="67"
      height="67"
      @click="btnClick(2)"
      :style="{ display: !show ? 'block' : 'none' }"
    />
    <van-image :src="require('@/assets/images/focus.png')" width="67" height="67" @click="btnClick(3)" />
  </div>
</template>
<script>
export default {
  name: 'HomeBtns',
  data() {
    return {
      show: true
    }
  },
  methods: {
    btnClick(val) {
      if (val === 1 || val === 2) {
        this.show = !this.show
      }
      this.$emit('btn', val)
    }
  }
}
</script>
<style lang="scss">
.btns {
  position: absolute;
  bottom: 212px;
  z-index: 1100;
  right: 10px;
  display: flex;
  flex-direction: column;
}
</style>

2.5.home/@component/modal/index.vue

点击地图撒点目标点位弹框展示

<template>
  <div class="modal">
    <van-overlay :show="true" class="overlay" @click="showModal">
      <div class="wrapper" @click="showModal">
        <div class="content">
          <div class="img"><van-image width="287" height="161" :src="item.url" /></div>
          <div :class="{ text: true, name: true }">{{ item.name }}</div>
          <div :class="{ text: true, intro: true }">{{ item.intro }}</div>
          <div class="btn">
            <div class="bg" @click.stop="onCall(item.phone)">打电话</div>
            <div class="bg" @click.stop="onMap(_, { ...item, lng: 30, lat: 113, siteName: '郑州东站' })">去这里</div>
          </div>
        </div>
      </div>
    </van-overlay>
  </div>
</template>
<script>
import { onCall, onMap } from '@/utils/index'
export default {
  name: 'HomeModal',
  props: {
    item: {
      type: Object,
      default: () => ({ url: '' })
    }
  },
  data() {
    return { onCall, onMap }
  },
  methods: {
    showModal(val) {
      this.$emit('changeShow')
    }
  }
}
</script>
<style lang="scss">
.modal {
  .overlay {
    z-index: 1999;
    display: flex;
    justify-content: center;
    align-items: center;
  }
  .wrapper {
    width: 389px;
    height: 457px;
    background: url('~@/assets/images/modal_bg.png') -12px center / auto 100% no-repeat;
    .content {
      display: flex;
      justify-content: center;
      align-items: center;
      flex-direction: column;
      margin-top: 133px;
      .img {
        background: #d8d8d8;
        border-radius: 8px;
        overflow: hidden;
      }
      .text {
        font-family: PingFangSC-Medium, PingFang SC;
        max-width: 263px;
      }
      .name {
        font-size: 16px;
        font-weight: 500;
        color: #323233;
        line-height: 22px;
        margin: 12px 0 8px 0;
      }
      .intro {
        font-size: 14px;
        font-weight: 400;
        color: #969799;
        line-height: 20px;
        text-overflow: ellipsis;
        overflow: hidden;
        display: -webkit-box; /* 将此元素作为弹性伸缩盒模型展示 */
        -webkit-line-clamp: 2; /* 块级元素显示文本行数 */
        -webkit-box-orient: vertical; /* 设置或检索弹性伸缩盒子对象子元素的排列方式 */
        word-break: break-all; /* 文本存在英文单词时进行换行拆分 */
      }
      .btn {
        display: flex;
        justify-content: space-between;
        align-items: center;
        .bg {
          display: flex;
          justify-content: center;
          align-items: center;
          width: 154px;
          height: 61px;
          background: url('~@/assets/images/btn_bg.png') center center / auto 100% no-repeat;
          font-size: 16px;
          font-family: KingnamBobo-Bold, KingnamBobo;
          font-weight: bold;
          color: #ffffff;
          line-height: 25px;
          text-shadow: 0px 2px 4px rgba(101, 191, 255, 0.3), 0px 2px 2px rgba(18, 68, 221, 0.52);
        }
      }
    }
  }
}
</style>

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

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

相关文章

vue3错误排查-POST请求的body参数 传参方式form-data和json

问题&#xff1a;vue3实现登录功能&#xff0c;登录成功后 跳转到登陆后的界面 一秒后 闪退回登录页 对应的输出结果也一闪而过&#xff0c;反复复查了代码&#xff0c;没问题。 自测&#xff1a;进行断点输出调试。强行跳转到登陆后的界面&#xff0c;查看输出的结果。 没有报…

京东商品详情API接口(PC端和APP端),京东详情页,商品属性接口,商品信息查询

京东开放平台提供了API接口来访问京东商品详情。通过这个接口&#xff0c;您可以获取到商品的详细信息&#xff0c;如商品名称、价格、库存量、描述等。 以下是使用京东商品详情API接口的一般步骤&#xff1a; 注册并获取API权限&#xff1a;您需要在京东开放平台上注册并获取…

Android 11.0 framework层实现app默认全屏显示

1.前言 在11.0的系统rom定制化开发中,在对于第三方app全屏显示的功能需求开发中,需要默认app全屏显示,针对这一个要求,就需要在系统启动app 的过程中,在绘制app阶段就设置全屏属性,接下来就实现这个功能 效果图如下: 2.framework层实现app默认全屏显示的核心类 framewo…

Linux实现进度条小程序(包含基础版本和模拟下载过程版本)

Linux实现进度条小程序[包含基础版本和模拟下载过程版本] Linux实现进度条小程序1.预备的两个小知识1.缓冲区1.缓冲区概念的引出2.缓冲区的概念 2.回车与换行1.小例子2.倒计时小程序 2.基础版进度条1.的回车方式的打印2.百分比的打印3.状态提示符的打印 3.升级版进度条1.设计:进…

LLM之幻觉(一):大语言模型幻觉解决方案综述

论文题目&#xff1a;《Cognitive Mirage: A Review of Hallucinations in Large Language Models》 ​论文链接&#xff1a;https://arxiv.org/abs/2309.06794v1 论文代码&#xff1a;https://github.com/hongbinye/cognitive-mirage-hallucinations-in-llms 一、幻觉介绍 …

Win10 + VS017 编译SQLite3.12.2源码

参考&#xff1a; [1] WIN10 VS2019下编译GDAL3.0PROJ6SQLite_gdal 3 win10编译-CSDN博客 [2] 如何编译SQLite-How To Compile SQLite-CSDN博客 如何生成静态库&#xff1a; 参考&#xff1a; WIN10 VS2019下编译GDAL3.0PROJ6SQLite_gdal 3 win10编译-CSDN博客 如何生成exe:…

Wnmp服务安装并结合内网穿透实现公网远程访问——“cpolar内网穿透”

文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 WNMP是Windows系统下的绿色NginxMysqlPHP环境集成套件包&#xff0c;安装完成后即可得到一个Nginx MyS…

JVM-垃圾回收

目录 1、GC过程 2、垃圾回收算法 2.1、标记-清除 2.2、标记-整理 2.3、复制 2.4、分代收集算法 3、TLAB 4、对象如何进入老年代 5、卡片标记 6、HotSpot垃圾回收器 6.1、年轻代垃圾回收器 6.2、老年代垃圾回收器 6.3、如何配置垃圾回收器 6.4、STW 7、CMS垃圾回收…

重新思考边缘负载均衡

本文介绍了Netflix在基于轮询的负载均衡的基础上&#xff0c;集成了包括服务器使用率在内的多因素指标&#xff0c;并对冷启动服务器进行了特殊处理&#xff0c;从而优化了负载均衡逻辑&#xff0c;提升了整体业务性能。原文: Rethinking Netflix’s Edge Load Balancing[1] 我…

lazarus:数据集快速导出为excel、csv、sql及其他多种格式

lazarus被成为快速开发工具&#xff0c;为什么说“快速”&#xff0c;重要的一点是&#xff0c;很多工具是现成的&#xff0c;可以拿来直接就用。比如数据导出&#xff0c;如果需要把数据集导出为excel格式文件&#xff0c;写代码可能需要很多时间。lazarus就不用了&#xff0c…

多测师肖sir_高级金牌讲师_jenkins搭建

jenkins操作手册 一、jenkins介绍 1、持续集成&#xff08;CI&#xff09; Continuous integration 持续集成 团队开发成员每天都有集成他们的工作&#xff0c;通过每个成员每天至少集成一次&#xff0c;也就意味着一天有可 能多次集成。在工作中我们引入持续集成&#xff0c;通…

apachesolr中简单使用

core使用 首先点击add core 可以看到报错solrconfig.xml不在new_core目录下&#xff0c;new_core是我们点击后自动创建的 那么我们将D:\solr2\solr-9.3.0\solr-9.3.0\server\solr\configsets下的任何一个目录下的conf拷贝到new_core过去 这里是使用_default下的conf目录拷贝…

python爬虫(数据获取——selenium)

环境测试 from selenium import webdriverchromedriver_path r"C:\Program Files\Google\Chrome\Application\chromedriver.exe" driver webdriver.Chrome()url "https://www.xinpianchang.com/discover/article?fromnavigator" driver.get(url)drive…

棱镜七彩亮相工控中国大会,以软件供应链安全助力新型工业化高质量发展

2023年11月1日-3日&#xff0c;2023第三届工控中国大会在苏州国际会议中心举办&#xff0c;本届大会由中国电子信息产业发展研究院、中国工业经济联合会、国家智能制造专家委员会、国家产业基础专家委员会、江苏省工业和信息化厅、江苏省国有资产监督管理委员会、苏州市人民政府…

深度学习框架TensorFlow.NET环境搭建1(C#)

测试环境 visual studio 2017 window10 64位 测试步骤如下&#xff1a; 1 新建.net framework控制台项目&#xff0c;工程名称为TensorFlowNetDemo&#xff0c;.net framework的版本选4.7.2&#xff0c;如下图&#xff1a; 2 分别安装TensorFlow.NET包(先装)和SciSharp.…

sql中的加减乘除

自学SQL网(教程 视频 练习全套)

C++二分算法的应用:乘法表中第k小的数

涉及知识点 二分查找 题目 几乎每一个人都用 乘法表。但是你能在乘法表中快速找到第 k 小的数字吗&#xff1f; 乘法表是大小为 m x n 的一个整数矩阵&#xff0c;其中 mat[i][j] i * j&#xff08;下标从 1 开始&#xff09;。 给你三个整数 m、n 和 k&#xff0c;请你在大…

CSS默认宽度

所谓的默认宽度&#xff0c;就是不设置width属性时&#xff0c;元素所呈现出来的宽度 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title></title><style>* {margin: 0;padding: 0;}.box {/…

GPT-4 变笨加剧,一个笑话讲八百遍;ChatGPT 之父剑桥演讲遭抵制丨 RTE 开发者日报 Vol.77

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

ActiveMq学习⑨__基于zookeeper和LevelDB搭建ActiveMQ集群

引入消息中间件后如何保证其高可用&#xff1f; 基于zookeeper和LevelDB搭建ActiveMQ集群。集群仅提供主备方式的高可用集群功能&#xff0c;避免单点故障。 http://activemq.apache.org/masterslave LevelDB&#xff0c;5.6版本之后推出了LecelDB的持久化引擎&#xff0c;它使…