小程序地图检索

在这里插入图片描述

<template>
  <view style="background-color: #f5f5f5">
    <!-- 头部开始 -->
    <view
      style="
        position: fixed;
        left: -5rpx;
        right: -5rpx;
        z-index: 99;
        top: -5rpx;
        width: 101vw;
      "
    >
      <view style="position: relative">
        <view :style="{ height: rpxNavStatusBarHeight + 5 + 'rpx' }">
          <text
            style="
              position: absolute;
              bottom: 0;
              line-height: 40px;
              width: 100%;
              z-index: 50;
              color: rgb(59, 59, 59);
            "
            class="text_c font-size-14"
            >地图选点</text
          >
          <view @click="goBack()" class="back_icon">
            <i v-if="pagesLength > 1" class="iconfont">&#xe621;</i>
            <i v-else class="iconfont">&#xe8c6;</i>
          </view>
        </view>
      </view>
    </view>
    <!-- 头部结束 -->
    <!-- 确定按钮 -->
    <view @click.stop.prevent="submit" class="btn-sub" type="success"
      >确定位置</view
    >
    <!-- 底部内容部分 -->
    <view
      :style="{
        'padding-top': rpxNavStatusBarHeight + 'rpx',
      }"
    >
      <view
        style="width: 100%; position: relative"
        :style="{ height: 'calc( 100vh - ' + rpxNavStatusBarHeight + 'rpx)' }"
        ><view
          style="width: 100%; height: calc(100% - 300px); position: relative"
        >
          <map
            id="tmap"
            :scale="scale"
            style="width: 100%; height: 100%"
            :latitude="latitude"
            :longitude="longitude"
            :covers="covers"
            show-location
            @regionchange="regionDidChange"
          ></map>
          <image
            src="/static/images/datouzhen.png"
            style="
              width: 100rpx;
              height: 100rpx;
              position: absolute;
              left: 50%;
              top: 50%;
              z-index: 1;
              margin-top: -100rpx;
              margin-left: -50rpx;
            "
          />
        </view>

        <view class="bot">
          <view class="inp1">
            <image
              src="http://image.qiniu.fangdadi.com/wxapp/aYuYue/sousuo.png"
            /><input
              type="text"
              placeholder="搜索地点"
              :value="searchKey"
              @input="search"
              style="flex: 1"
            />
            <image
              @click.stop.prevent="clearVal"
              v-show="searchKey"
              src="http://image.qiniu.fangdadi.com/wxapp/aYuYue/shanchu.png"
            />
          </view>
          <view style="margin-top: 20rpx">
            <view
              v-for="(item, index) in list"
              :key="item.id"
              @click.stop.prevent="changPoint(item, index)"
              class="list-item"
              :style="{ background: index == indexPoint ? '#f7f7f7' : 'white' }"
            >
              <view class="list-tit">{{ item.title }}</view>
              <view style="color: gray" class="list-add">{{
                item.address
              }}</view>
            </view>
          </view>
        </view>
      </view>
    </view>
    <!-- 底部内容结束 -->
  </view>
</template>
<script>
import { suggestion, geocoderPoi, getDistance } from "../../api/booking";
// 引入SDK核心类
var QQMapWX = require("static/qqmap-wx-jssdk.js");
var self;
// 实例化API核心类
var qqmapsdk = new QQMapWX({
  key: "123", // 必填
});
export default {
  name: "Rent",

  data() {
    return {
      pagesLength: 0,
      searchKey: "",
      // 地图
      rpxNavStatusBarHeight: "", // map
      latitude: 0, //纬度
      longitude: 0, //经度
      scale: 16, //缩放级别

      list: [],
      newhouselng: 0,
      newhouseId: 0,
      newhouselat: 0,
      indexPoint: 0,
      areaCode: 0,

      isSearch: false,
      lng: 0,
      lat: 0,
    };
  },
  created() {
    this.key = getApp().globalData.TXMap;
  },
  onLoad(option) {
    self = this;
    self.mapCtx = wx.createMapContext("tmap");
    self.getAuthorizeInfo();

    qqmapsdk.key = getApp().globalData.TXMap;
    this.winWidth = wx.getSystemInfoSync().windowWidth;
    this.divWidth = this.winWidth * 0.96 * 0.48;

    let systemInfo = wx.getSystemInfoSync();
    // 计算屏幕总高度

    let clientWidth = systemInfo.windowWidth;
    var changeHeight = 750 / clientWidth;

    //状态栏高度
    let statusBarHeight = Number(systemInfo.statusBarHeight);
    let menu = wx.getMenuButtonBoundingClientRect();
    //状态栏加导航栏高度
    let navStatusBarHeight =
      statusBarHeight + (menu.height + (menu.top - statusBarHeight) * 2);

    this.rpxNavStatusBarHeight = navStatusBarHeight * changeHeight;
    if (option) {
      this.newhouseId = option.newhouseId;
      this.newhouselng = option.newhouselng;
      this.newhouselat = option.newhouselat;
      this.areaCode = option.areaCode;
    }
  },
  onShow() {
    const pages = getCurrentPages();
    this.pagesLength = pages.length;
  },
  methods: {
        // 获取地理位置
        getLocationInfo() {
      let that = this;
      uni.getLocation({
        type: "gcj02",
        success(res) {
          that.latitude = res.latitude;
          that.longitude = res.longitude;
          that.lng = res.longitude;
          that.lat = res.latitude;
          let data = { lat: res.latitude, lng: res.longitude };
          geocoderPoi({ data }).then((res2) => {
            that.list = [];
            that.list = [...res2.data];
          });
        },
      });
    },
    //点击标记列表,移动中心坐标
    changPoint(item, index) {
      this.indexPoint = index;
      this.latitude = item.location.lat;
      this.longitude = item.location.lng;
      this.lat = item.location.lat;
      this.lng = item.location.lng;
      self.mapCtx.moveToLocation({
        longitude: item.location.lng,
        latitude: item.location.lat,
        success: (res) => {
          const time = setInterval(() => {
            this.scale = 16;

            clearInterval(time);
          }, 300);
        },
      });
    },
    //地图画面发生改变的时候触发
    regionDidChange(e) {
      this.getCenterLocation(e);
    },
    getCenterLocation: function (e) {
      let that = this;
      // 判断是最后一次触发并且是拖拽触发
      if (e.type == "end" && e.causedBy == "drag") {
        let data = {
          lat: e.detail.centerLocation.latitude,
          lng: e.detail.centerLocation.longitude,
        };
        that.lat = e.detail.centerLocation.latitude;
        that.lng = e.detail.centerLocation.longitude;
        geocoderPoi({ data }).then((res2) => {
          that.indexPoint = 0;
          that.list = [];
          that.list = [...res2.data];
          that.num = 1;
        });
      }
    },
    // 搜索框
    search: function (e) {
      if (this.isSearch) {
        return;
      }
      let that = this;
      self.searchKey = e.detail.value;

      let data = {
        keyword: e.detail.value,
        areaCode: this.areaCode.split(",")[0],
      };
      this.isSearch = true;
      suggestion({ data }).then((res2) => {
        that.indexPoint = 0;
        that.list = [];
        that.list = [...res2.data.data];
        that.latitude = that.list[0].location.lat;
        that.longitude = that.list[0].location.lng;
        that.lat = that.list[0].location.lat;
        that.lng = that.list[0].location.lng;
        this.isSearch = false;
      });
    },
    clearVal: function (item) {
      this.searchKey = "";
      this.list = [];
    },

  
    // 位置授权
    getAuthorizeInfo() {
      uni.authorize({
        scope: "scope.userLocation",
        success() {
          // 允许授权

          self.getLocationInfo();
        },
        fail() {
          // 拒绝授权
          self.openConfirm();
          console.log("你拒绝了授权,无法获得周边信息");
        },
      });
    },


    // 再次获取授权
    // 当用户第一次拒绝后再次请求授权
    openConfirm() {
      uni.showModal({
        title: "请求授权当前位置",
        content: "需要获取您的地理位置,请确认授权",
        success: (res) => {
          if (res.confirm) {
            uni.openSetting(); // 打开地图权限设置
          } else if (res.cancel) {
            uni.showToast({
              title: "你拒绝了授权,无法获得周边信息",
              icon: "none",
              duration: 1000,
            });
          }
        },
      });
    },
// 提交判断是否在距离范围内
    async submit() {
      let data = {
        lng: this.lng,
        lat: this.lat,
        newhouseLng: this.newhouselng,
        newhouseLat: this.newhouselat,
      };
      let res = await getDistance({ data });
      if (res) {
        if (res.msg == "yes") {
          let userinfo = this.list[this.indexPoint];

          var pages = getCurrentPages();
          var prevPage = pages[pages.length - 2];
          // #ifdef H5
          prevPage.$vm.userinfo = userinfo;
          // #endif
          // #ifdef MP-WEIXIN
          prevPage.setData({
            userinfo,
          });
          // #endif
          uni.navigateBack();
        } else {
          uni.showToast({
            title: res.data,
            icon: "none",
            duration: 2000,
          });
        }
      }
    },

    // 取消删除
    Cancel: function () {},
    goBack() {
      if (this.pagesLength > 1) {
        uni.navigateBack({
          delta: 1,
        });
      } else {
        uni.switchTab({
          url: "/pages/home/home",
        });
      }
    },
  },
};
</script>
<style lang="scss" scoped>
.bot {
  width: 100%;
  height: 300px;
  background: white;
  z-index: 10000;
  position: absolute;
  padding: 20rpx;

  bottom: 0;
  left: 0;
  border-radius: 40rpx 40rpx 0 0;
  box-sizing: border-box;
  overflow-x: hidden;
  overflow-y: scroll;
  -webkit-overflow-scrolling: touch;
  .inp1 {
    padding: 0 20rpx;
    width: 100%;
    line-height: 80rpx;
    display: flex;
    height: 80rpx;
    border-radius: 10rpx;
    align-items: center;
    box-sizing: border-box;
    background: #f5f5f5;

    image {
      width: 40rpx;
      height: 40rpx;
      margin-right: 20rpx;
    }
  }
}
.list-item {
  width: 100%;
  border-bottom: 1px solid #e9e9e9;
  padding: 6rpx 10rpx;
  box-sizing: border-box;
  .list-tit {
    width: 100%;
    //单行超出隐藏
    overflow: hidden; //超出一行文字自动隐藏

    text-overflow: ellipsis; //文字隐藏后添加省略号

    white-space: nowrap; //强制不换行
  }
  .list-add {
    color: gray;
    overflow: hidden;
    font-size: 24rpx;
    margin: 10rpx 0 0 0; //单行超出隐藏
    overflow: hidden; //超出一行文字自动隐藏

    text-overflow: ellipsis; //文字隐藏后添加省略号

    white-space: nowrap; //强制不换行
  }
}
.btn-sub {
  position: absolute;
  right: 20px;
  top: 100px;
  z-index: 1;
  background: #67e376;
  color: white;
  width: 160rpx;
  height: 60rpx;
  line-height: 60rpx;
  font-size: 30rpx;
  text-align: center;
  border-radius: 5px;
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

常用模块之(time/datetime)

【 一 】时间模块&#xff08;time/datetime&#xff09; 【 二 】 表示时间的三种方式 *时间戳&#xff08;Timestamp&#xff09;是指1970年1月1日00:00:00开始计算的偏移量。可以使用time模块中的time()函数获取当前时间的时间戳&#xff0c;也可以使用datetime模块中的tim…

低代码开发平台的优势及应用场景分析

文章目录 低代码是什么&#xff1f;低代码起源低代码分类低代码的能力低代码的需求市场需要专业开发者需要数字化转型需要 低代码的趋势如何快速入门低代码开发低代码应用领域 低代码是什么&#xff1f; 低代码&#xff08;Low-code&#xff09;是著名研究机构Forrester于2014…

lseek()函数的原型及使用方法,超详细

对于所有打开的文件都有一个当前文件偏移量(current file offset)&#xff0c;文件偏移量通常是一个非负整数&#xff0c;用于表明文件开始处到文件当前位置的字节数。 读写操作通常开始于当前文件偏移量的位置&#xff0c;并且使其增大&#xff0c;增量为读写的字节数。文件被…

机器视觉技术与应用实战(Chapter Two-04)

2.6 图像形态学及常见的图像处理工具 图像形态学&#xff1a;是分析几何形状和结构的数字方法&#xff0c;是建立在集合代数的基础上用集合论方法定量描述几何结构的学科。基本的图像形态学算法有&#xff1a;腐蚀&#xff08;Erode&#xff09;、膨胀&#xff08;Dilate&…

geemap学习笔记028:Landsat8计算时间序列NDVI并导出

前言 本节则是以Landsat8影像数据为例&#xff0c;进行NDVI时间序列计算&#xff0c;并将得到的时间序列NDVI进行展示并导出。 1 导入库并显示地图 import ee import geemap import datetime import pandas as pd import os ee.Initialize()2 定义时间范围 # 定义日期范围 …

【ECMAScript笔记四】自定义对象(创建,遍历)、内置对象(Math、Data、Array、String)、数据类型比较

文章目录 10 自定义对象10.1 创建对象方式10.1.1 字面量10.1.2 new object10.1.3 构造函数 10.2 遍历对象 11 内置对象11.1 Math 数学对象11.2 Date 时间对象11.3 Array 数组对象11.4 String 字符串对象 12 简单数据类型和复杂数据类型 10 自定义对象 JavaScript中的对象分为3…

频谱论文:基于张量Tucker分解的频谱地图构建算法

#频谱# [1]陈智博,胡景明,张邦宁 郭道省.(2023).基于张量Tucker分解的频谱地图构建算法.电子与信息学报(11),4161-4169. &#xff08;陆军工程大学&#xff09; 研究内容 将动态电磁环境的时变频谱地图建模为3维频谱张量&#xff0c;通过张量Tucker分解提取出具有物理意义的核…

使用级联毫米波传感器的成像雷达参考设计2(TI文档)

3.4 级联雷达信号处理链 3.4.1 MIMO雷达信号处理链 以MIMO模式收集的原始信号按照图16所示的流程进行处理。 图16 MIMO信号处理链 3.4.1.1 ADC数据读取和校准 每次数据采集后&#xff0c;将保存4个级联设备对应的二进制数据文件和相应的chirp配置文件。这两个文件是ADC数据读…

Zabbix+Grafana

背景 对指标采集 将采集的信息存储 可视化 报警 因为节点上本身就是zabbix&#xff0c;但对应的server在数据中心&#xff0c;不知道一个agent可否服务于多个server端&#xff0c;而且不确定数据中心是否会提供用户。所以还是放弃zabbix 架构

干货下载丨不分业态、不关注核心需求,怎么做得好项目管理?!

项目管理&#xff1a;装备制造业的破局利刃 对于装备制造行业而言&#xff0c;每一笔订单都是非标定制、小批量制造。这种特性决定了其行业企业普遍存在新品开发周期长、生产效率低、质量不稳定、交货期不稳定、成本预算难控制、非标品报价慢等问题。 如何提升企业的管理水平…

回溯算法去重的两种写法

回溯算法去重的两种写法 关于回溯&#xff0c;无论是排列、组合、子集&#xff0c;都会涉及到两个问题&#xff0c;一个是去重&#xff0c;另一个则是剪枝&#xff1b; 去重通常有几种方法。 以这道题来做验证。 90.子集II 力扣题目链接(opens new window) 给定一个可能包…

【数据结构】树状数组总结

知识概览 树状数组有两个作用&#xff1a; 快速求前缀和 时间复杂度O(log(n))修改某一个数 时间复杂度O(log(n)) 例题展示 1. 单点修改&#xff0c;区间查询 题目链接 活动 - AcWing本活动组织刷《算法竞赛进阶指南》&#xff0c;系统学习各种编程算法。主要面向…

JavaSE第7篇:封装

文章目录 前言一、封装1、好处:2、使用 二、四种权限修饰符三、构造器1、作用2、说明3、属性赋值的过程 四 、JavaBean的使用五、UML类图六 、Java关键字1、this说明2 、this可以用来修饰属性、方法3、 this调用构造器 前言 不管学什么都可以按3w: what? why? how?&#xf…

AttributeError: module ‘jax‘ has no attribute ‘Array‘解决方案

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

NET模式和桥接模式简要概述

NET模式 NAT是Network Address Translation的缩写&#xff0c;即网络地址转换。NAT模式也是VMware创建虚拟机的默认网络连接模式。在NAT模式中&#xff0c;让虚拟机借助NAT功能&#xff0c;通过宿主机器所在的网络来访问公网。这里的宿主机相当于有两个网卡&#xff0c;一个是…

【FPGA】电梯楼层显示(简易)

前言 这是作者室友的项目&#xff0c;本来不管作者事儿的&#xff0c;但是后来听到说是室友去网上找人花了80块买了个劣质的&#xff0c;不仅是从CSDN上抄的&#xff0c;而且使用的板子还不符合室友的要求。可叹作者心软啊&#xff0c;顺便给室友做了。 在代码实现部分会给出设…

【学习笔记】V8垃圾回收策略

V8 V8是一款主流的JavaScript执行引擎V8采用即时编译,速度比较快V8内存设限,64位操作系统中上限为1.5G,32位系统中不超过800M V8垃圾回收策略 采用分代回收的思想内存分为新生代\老生代针对不同对象采用不同算法 v8常用的GC算法: 分代回收、空间复制、标记清除、标记整理、…

RDD编程

目录 一、RDD编程基础 &#xff08;一&#xff09;RDD创建 &#xff08;二&#xff09;RDD操作 1、转换操作 2、行动操作 3、惰性机制 &#xff08;三&#xff09;持久化 &#xff08;四&#xff09;分区 &#xff08;五&#xff09;一个综合实例 二、键值对RDD &am…

系列九、事务

一、事务 1.1、概述 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或者撤销操作请求&#xff0c;即&#xff1a;这些操作要么同时成功&#xff0c;要么同时失败。 例如: 张三给李四转账1000块钱&…

C语言短路操作

C语言短路操作 目录 一&#xff0e; 概述二&#xff0e; 例题 一&#xff0e; 概述 C语言中常用的短路操作符有两个&#xff0c;即逻辑与&#xff08;&&&#xff09;和逻辑或&#xff08;||&#xff09;。   对于逻辑与&#xff08;&&&#xff09;操作符&…