笑丶日葵 2023-04-07 16:53 采纳率: 41.9%
浏览 24
已结题

uniapp地图组件拖拽生成圆形区域,返回中心点和半径,适配微信小程序

uniapp地图组件拖拽生成圆形区域,返回中心点和半径,适配微信小程序

  • 写回答

1条回答 默认 最新

  • 桃宝护卫队 2023-04-09 11:27
    关注

    有用的话,请采纳哇,这对我很重要!!!

    <template>
      <div class="map">
        <map :scale="scale" :markers="markers" @tap="onTap" @regionchange="onRegionChange"></map>
      </div>
    </template>
    
    <script>
      export default {
        data() {
          return {
            scale: 16, // 地图缩放级别
            markers: [], // 地图标记
            centerLatitude: '', // 圆心纬度
            centerLongitude: '', // 圆心经度
            radius: '', // 圆半径
            circleMarker: null // 圆形标记
          }
        },
        methods: {
          onTap(event) {
            // 生成圆形标记
            this.generateCircle(event)
          },
          onRegionChange(event) {
            // 拖拽地图时更新圆形标记
            this.updateCircle(event)
          },
          generateCircle(event) {
            // 获取点击位置的经纬度
            const latitude = event.detail.latitude
            const longitude = event.detail.longitude
    
            // 设置圆心坐标
            this.centerLatitude = latitude
            this.centerLongitude = longitude
    
            // 创建圆形标记
            const circleMarker = {
              id: 1,
              latitude: latitude,
              longitude: longitude,
              iconPath: '/static/images/circle.png', // 圆形图标路径
              width: 30,
              height: 30
            }
            this.circleMarker = circleMarker
    
            // 添加圆形标记
            const markers = [...this.markers, circleMarker]
            this.markers = markers
          },
          updateCircle(event) {
            // 获取拖拽后的地图中心坐标
            const latitude = event.detail.latitude
            const longitude = event.detail.longitude
    
            // 计算圆半径
            const radius = this.calculateRadius()
    
            // 更新圆形标记
            const circleMarker = {
              ...this.circleMarker,
              latitude: latitude,
              longitude: longitude,
              width: radius * 2,
              height: radius * 2
            }
            this.circleMarker = circleMarker
    
            // 更新圆半径
            this.radius = radius
          },
          calculateRadius() {
            // 计算圆半径
            const pixelRatio = uni.getSystemInfoSync().pixelRatio // 设备像素比
            const mapWidth = uni.getSystemInfoSync().windowWidth * pixelRatio // 地图宽度
            const circleWidth = this.circleMarker.width // 圆形图标宽度
            const ratio = circleWidth / mapWidth
            const radius = (1 / ratio) / 2
            return radius
          }
        }
      }
    </script>
    
    <style>
      .map {
        width: 100%;
        height: 100%;
      }
    </style>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月13日
  • 已采纳回答 4月10日
  • 创建了问题 4月7日

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加