vue3+ ts引入天地图 搜索功能+地理区域选择

news2024/9/27 19:18:18

前言:
天地图为开发者提供应用程序开发接口和在线服务资源,可满足各类基于地理信息的应用开发需求。

引入
在这里插入图片描述

<script src="http://api.tianditu.gov.cn/api?v=4.0&tk=你注册的key" type="text/javascript"></script>

使用

<template>
  <div>
    <el-cascader
      @change="handleAddressChange"
      :options="addressValue"
      placeholder="请选择方案地区"
      filterable
      clearable
    >
    </el-cascader>
    <el-input
      v-model="detailedAddress"
      placeholder="请输入详细地址"
      clearable
    />
    <el-button @click="getLocation">定位</el-button>
    <h2>address:{{ siteInfo.address }}</h2>
    <div class="map-containera" id="map-containera">
      <div
        id="searchResultPanel"
        style="
          border: 1px solid #c0c0c0;
          width: 150px;
          height: auto;
          display: none;
        "
      ></div>
    </div>
  </div>
</template>

<script setup lang="ts">
import { ref, onMounted, nextTick, getCurrentInstance } from 'vue'
import { ElMessage } from 'element-plus'
import useCascaderAreaData from '@/assets/address/allAddress' //我的地级数据,这里换成你的
import {
  getProvinceNameByNo,
  getCityNameByNo,
  getCountryNameByNo
} from '@/assets/address/allAddress'//我的编码转换方法,需自行封装

const { proxy }: any = getCurrentInstance()
onMounted(() => {
  nextTick(() => {
    onLoad()
  })
})
const input = ref('')
var map: any = null
const siteInfo = ref({
  longitude: '',
  address: '',
  latitude: ''
})
var map
var zoom = 12
var geocode: any
const T = (window as any).T
const onLoad = () => {
  //初始化地图对象
  map = new T.Map('map-containera')
  //设置显示地图的中心点和级别
  map.centerAndZoom(new T.LngLat(31.086444, 121.734942), zoom)
  //允许鼠标滚轮缩放地图
  map.enableScrollWheelZoom()
  //允许双击地图放大
  map.enableDoubleClickZoom()
  //创建对象
  geocode = new T.Geocoder()
  //监听鼠标点击事件
  map.addEventListener('click', (val: any) => {
    console.log('val', val)
    // 经纬度
    siteInfo.value.longitude = val.lnglat.lng.toFixed(2)
    siteInfo.value.latitude = val.lnglat.lat.toFixed(2)

    let point = [val.containerPoint.x, val.containerPoint.y]
    var lnglat = map.containerPointToLngLat(point)
    geocode.getLocation(lnglat, searchResult)
  })
}
const searchResult = (result: any) => {
  if (result.getStatus() == 0) {
    siteInfo.value.address = result.getAddress()
    ElMessage.success('已选取经纬度')

    console.log(result)

    siteInfo.value.longitude = result.location.lon.toFixed(2)
    siteInfo.value.latitude = result.location.lat.toFixed(2)
    siteInfo.value.address = result.location.keyWord
    map.centerAndZoom(
      new T.LngLat(siteInfo.value.longitude, siteInfo.value.latitude),
      zoom
    )
    map.clearOverLays()
    let marker = new T.Marker(result.getLocationPoint())
    //向地图上添加标注
    map.addOverLay(marker)
    map.mar
  } else {
    result.getMsg()
  }
}
const addressValue = useCascaderAreaData()
const currentAddress = ref({
  address: '浙江省金华市工业园区九峰街139号',
  provinceName: '金华市',
  provinceNo: 0,
  cityName: '金华市',
  cityNo: 0,
  countyName: '',
  countyNo: 0
})
const detailedAddress = ref('')
const handleAddressChange = (value: any) => {
  if (value) {
    currentAddress.value.provinceName = getProvinceNameByNo(value[0])
    currentAddress.value.provinceNo = value[0]
    currentAddress.value.cityName = getCityNameByNo(value[1])
    currentAddress.value.cityNo = value[1]
    currentAddress.value.countyName = getCountryNameByNo(value[2])
    currentAddress.value.countyNo = value[2]
    currentAddress.value.address = `${getProvinceNameByNo(
      value[0]
    )}${getCityNameByNo(value[1])}${getCountryNameByNo(value[2])}`

    geocode.getPoint(currentAddress.value.address, searchResult)
  }
}
const getLocation = () => {
  if (detailedAddress.value) {
    currentAddress.value.address = `${currentAddress.value.address}${detailedAddress.value}`
  }

  geocode.getPoint(currentAddress.value.address, searchResult)
}
</script>

<style lang="scss" scoped>
.map-containera {
  width: 100%;
  height: 732px;

  #map-containera {
    width: 100%;
    height: 500px;
    margin-top: 10px;
  }

  .map-modal-title {
    display: flex;
    flex-wrap: wrap;
    padding: 10px 10px;

    .long-lat-item {
      margin-left: 10px;

      > span {
        padding-right: 5px;
      }

      .ivu-input-wrapper {
        margin-right: 5px;
      }
    }
  }
}
</style>

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

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

相关文章

Spring容器

1. Spring核心容器介绍 问题&#xff1a;按照Bean名称获取Bean有什么弊端&#xff0c;按照Bean类型获取Bean有什么弊端&#xff1f; 1.1 创建容器 方式一&#xff1a;类路径加载配置文件 ApplicationContext ctx new ClassPathXmlApplicationContext("applicationCon…

14. 向用户推荐朋友收藏的商品

文章目录 题目需求思路一&#xff1a;使用 Except实现一实现二&#xff1a;使用 Except思路三&#xff1a;使用 full outer join where实现三实现四&#xff1a;使用 not in concat题目来源 题目需求 现请向所有用户推荐其朋友收藏但是用户自己未收藏的商品&#xff0c;请从…

阻抗计算,真的没有那么难!

问&#xff1a;什么是阻抗&#xff1f; 答&#xff1a;在具有电阻、电感和电容的电路里&#xff0c;对电路中的电流所起的阻碍作用叫做阻抗。 问&#xff1a;什么是阻抗匹配? 答&#xff1a;阻抗匹配是指信号源或者传输线跟负载之间达到一种适合的搭配。阻抗匹配主要有两点作用…

ubuntu git clone 失败

命令行报错如下&#xff1a; gitxxx.xx.com: Permission denied (publickey). fatal: 无法读取远程仓库。修改步骤&#xff1a; 1、.ssh权限配置问题 .ssh 文件夹权限 755 或 700 config 文件权限 644 id_rsa 文件权限 600 id_rsa.pub 文件权限 644 r&#xff1a;read 代表读…

VMware安装Centos7并初始化网络使外部可以访问

本文目录 1&#xff1a;下载镜像2&#xff1a;安装centos7虚拟机2.1:初始化虚拟机2.2 初始化系统2.3 修改虚拟机网络模式 3&#xff1a;配置VMware虚拟网络编辑器4&#xff1a;配置centos网络4.1 修改网络配置文件4.2 刷新网络配置 5 验证网络总结 1&#xff1a;下载镜像 进入…

Web3.0在互联网圈爆红,这个“新一轮”概念有哪些机会?

在互联网行业里&#xff0c;新概念和潮流层出不穷&#xff0c;每一个概念都伴随着一轮火热的讨论和关注。从区块链到元宇宙&#xff0c;互联网的发展一直在不断地推动着新的创新和变革。而如今&#xff0c;Web3.0 成为了最新的热点话题&#xff0c;引起了互联网、科技和金融领域…

vue_前后端分离-增删改操作

增加操作和修改操作: 两个操作放一个页面进行操作 使用插槽(scope.row)的方式获取列表中的每一行数据 <template slot-scope"scope"><el-buttonsize"mini"click"openEditDialog( scope.row)">编辑</el-button>在进行添加的…

迅为RK3568开发板Buildroot 系统自启动 QT 程序

本小节将讲解如何开机自启动 QT 程序。 在设置自启动 QT 程序之前&#xff0c;首先要编译好 QT 可执行程序&#xff0c;完成以下两步。 1、 已经根据 03_【北京迅为】itop-3568 开发板快速使用编译环境 ubuntu18.04 v1.0.doc 第 10 章节进行了 QT 程序的交叉编译 2、 将交叉…

华为OD机试真题B卷 Python 实现【内存资源分配】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Python算法源码六、效果展示1、输入2、输出 3、说明4、如果改一下呢&#xff1f; 一、题目描述 有一个简易内存池&#xff0c;内存按照大小粒度分类&#xff0c;每个粒度有若干个可用内存资源&#xff0c;用户会进行…

django 使用channels 搭建websocket聊天程序

channels官方文档&#xff1a;Django Channels — Channels 4.0.0 documentation 效果如下&#xff1a; 主要实现功能 基于Django的认证的群聊 具体实现 当建立websocket的时候&#xff0c;建立之前是http消息&#xff0c;我们可以拿到http消息里面的cookie等信息进行认证&…

数字经济时代,高校该如何建设大数据实验实训室,培养高质量数智人才?

数智人才作为数字经济时代发展的重要支撑资源&#xff0c;人才质量、存量与储备量之争&#xff0c;成为综合国力和区位竞争的重要内容&#xff0c;而大数据与人工智能技术作为数字经济的主要驱动力&#xff0c;相关人才的培养尤其重要。教育部自2016年起&#xff0c;陆续批准设…

Maven中 排除依赖 exclusions

使用maven进行jar包依赖管理时&#xff0c;maven会自行管理jar包及其依赖链条&#xff0c;但往往会遇到依赖冲突问题&#xff0c;这时候就可以尝试使用exclusions来进行依赖管理 demo:排除tomcat 启用 jetty <dependency><groupId>org.springframework.boot</g…

map父子维护的ebom父子部件关系计算组套数量

map父子维护的ebom父子部件关系计算组套数量 使用ebom时候&#xff0c;把部件父子关系和安装数量维护在了map上面&#xff0c;要计算组套数量&#xff0c;需要递归从当前往上取出父级安装数量相乘&#xff0c;一直取到最顶层。 G的组套数量&#xff1a;GDB32212 E的组套数量&a…

如何提高应用的用户留存

用户的留存率是我们应用内最重要的指标之一&#xff0c;是指有多少人在一段时间后还在使用该应用&#xff0c;它定义了我们的受众规模&#xff0c;让我们知道应用是否有增长的能力。 提高应用保留率的策略&#xff1a;1&#xff0c;推送通知&#xff0c;在适当的时候发送推送通…

计算机网络速成

更好的阅读体验 \color{red}{\huge{更好的阅读体验}} 更好的阅读体验 因特网概述 网络、互联网和因特网 网络&#xff1a;将多个计算机或计算机网络通过通信线路连接起来&#xff0c;使得它们可以相互通信和交换信息的系统。由若干节点&#xff08;Node&#xff09;和连接这些…

LInux:生成崩溃程序的core文件

core文件是linux系统下一种记录软件异常的机制&#xff0c;在进程运行崩溃时&#xff0c;系统会将coredump信息写入core文件。 这样就方便我们定位软件问题。 1. 设置core文件大小 使用ulimit -c可以查看当前core文件的大小 默认情况下&#xff0c;core文件的大小为0&#xf…

chatgpt赋能python:Python开发的SEO应用

Python开发的SEO应用 搜索引擎优化&#xff08;SEO&#xff09;已经成为每个网站所有者需要考虑的重要因素之一。随着搜索引擎算法的不断变化和演进&#xff0c;我们需要确保我们的网站能在各种搜索引擎中进行良好的排名。Python作为一门强大的编程语言&#xff0c;已经被广泛…

Databend v1.2 版本发布!Data + AI

各位社区小伙伴们&#xff0c;Databend 于 2023 年 6 月 29 日迎来了 v1.2.0 版本的正式发布&#xff01;相较于 v1.1.0 版本&#xff0c;开发者们一共新增了 600 次 commit&#xff0c;涉及 3083 个文件变更&#xff0c;约 17 万 行代码修改。感谢各位社区伙伴的参与&#xff…

跨境电商如何快速提升产品排名和转化率,打造爆款产品

中小卖家在跨境电商平台上经营时&#xff0c;经常会遇到提升销售瓶颈的问题。今天陈哥将分享一个快速打造爆款的方法&#xff0c;除了SEO优化&#xff08;关键词分析、优化标题、图片、产品描述和定价&#xff09;等方面的策略。同时&#xff0c;测评也是一个有效的手段&#x…

规则引擎是什么,常见的应用领域,你知道吗?

规则引擎是什么 规则引擎&#xff0c;规则引擎是企业数字化转型升级过程中非常必要的软件工具&#xff0c;是一种能够自动执行一定条件下的预设逻辑的技术&#xff0c;可以帮助企业在收到数据或事件时自动触发相关业务规则&#xff0c;其主要优势如下&#xff1a; 易于维护与…