腾讯地图的(地图选点|输入模糊匹配)

news/2024/7/20 22:50:26 标签: swift, 开发语言, ios

1.支持用户输入框输入进行模糊匹配获取详细地址以及经纬度·2.支持用户模糊匹配后点击选点获取详细地址以及经纬度 1.支持用户输入框输入进行模糊匹配获取详细地址以及经纬度·2.支持用户模糊匹配后点击选点获取详细地址以及经纬度

 

<template>
	<div class="tencentMap-wrap">
		<div class="tencent-container" id="tencent-container"></div>
		<p class="tencent-input">
			<span class="tencent-input-label">地址:</span>
			<input class="tencent-input-style" id="keyword" type="text" v-model="keyword" />
			<ul id="suggestionList">
				<li class="suggestion-li" v-for="(item,index) in suggestionList" :key="index" @click="selectSuggestionHandle(item)">
					<p class="suggestion-li-title">{{item.title}}</p>
					<p class="suggestion-li-content">{{item.address}}</p>
				</li>
			</ul>
		</p>
	</div>
</template>

<script>
import loadTMap from '@/utils/loadTMap.js';
const mapInit = loadTMap('PZHBZ-G6A34-QV7UJ-X4QXK-YIMRK-RAFZS');
let map =null;
let marker = null;
export default {
	data() {
		return {
			suggestionList:[],
			keyword:''
		};
	},
	watch:{
		keyword(value){
			let keyword=this.trim(value)
			if(keyword){
				this.searchSuggestionAPI(keyword)
			}
		}
	},
	created() {
		this.initMap();
	},
	mounted() {},
	methods: {
		/**
		 * 初始化地图
		 * **/
		initMap() {
			mapInit.then(TMap => {
				//定义map变量,调用TMap.Map构造函数创建地图
				map = new TMap.Map(document.getElementById('tencent-container'), {
					center: new TMap.LatLng(31.230355, 121.47371), //设置地图中心点坐标
					zoom: 17 //设置地图缩放级别
				});
				
				const geocoder = new TMap.service.Geocoder(); // 新建一个正逆地址解析类
				//绑定点击事件
				map.on('click', (evt)=> {
					if (marker) {
						marker.setMap(null);
						marker = null;
					}

					const lat = evt.latLng.getLat().toFixed(6);
					const lng = evt.latLng.getLng().toFixed(6);
					const location = new TMap.LatLng(lat, lng);
					geocoder
					.getAddress({ 
						location:location,
					}) // 将给定的坐标位置转换为地址
					.then((result) => {
						console.log(evt)
						console.log(result)
						this.$emit("tMap",{
							title:(evt.poi!=null?evt.poi.name:result.result.formatted_addresses.recommend),
							address:result.result.address,
							lat:lat,
							lng:lng
						})
					});

					if (!marker) {
						marker = new TMap.MultiMarker({
							map: map,
							geometries: [
								{
									position: new TMap.LatLng(lat, lng)
								}
							]
						});
					}
				});
				
			});
		},
		/**
		 * 搜索
		 * **/
		searchSuggestionAPI(keyword){
			mapInit.then(TMap => {
				// 新建一个关键字输入提示类
				var suggest = new TMap.service.Suggestion({
					pageSize: 10 // 返回结果每页条目数
				});
				suggest.getSuggestions({ keyword: keyword })
				.then((result) => {
						// 以当前所输入关键字获取输入提示
					this.suggestionList=result.data;
				})
				.catch((error) => {
					console.log(error);
				});
				
			})
		},
		/**
		 * 点击选中下拉数据
		 * **/
		selectSuggestionHandle(item){
			this.createMarkerAPI(item.location.lat,item.location.lng);
			this.$emit("tMap",{
				title:item.title,
				address:item.address,
				lat:item.location.lat,
				lng:item.location.lng
			})
			this.suggestionList=[]
		},
		createMarkerAPI(lat, lng){
			map.setCenter({
				lat, lng
			});
			mapInit.then(TMap => {
				if (marker) {
					marker.setMap(null);
					marker = null;
				}
								
				if (!marker) {
					marker = new TMap.MultiMarker({
						map: map,
						geometries: [
							{
								position: new TMap.LatLng(lat, lng)
							}
						]
					});
				}
				
			});
		},
		/**
		 * 去掉空隙
		 * **/
		trim(str, type) {
			str = str || ''
			type = type || 1
			switch (type) {
				case 1:
					return str.replace(/\s+/g, "");
				case 2:
					return str.replace(/(^\s*)|(\s*$)/g, "");
				case 3:
					return str.replace(/(^\s*)/g, "");
				case 4:
					return str.replace(/(\s*$)/g, "");
				default:
					return str;
			}
		}
	}
};
</script>

<style lang="scss" scoped>
.tencentMap-wrap {
	width: 100%;
	.tencent-container {
		width: 100%;
		height: 400px;
	}
	.tencent-input {
		width: 100%;
		margin-top: 10px;
		position: relative;
		.tencent-input-label {
			font-size: 16px;
			color: #333;
			padding-right: 10px;
		}
		.tencent-input-style {
			border: 1px solid #dcdcdc;
			width: 200px;
			height: 40px;
			border-radius: 8px;
			padding-left: 12px;
			padding-right: 12px;
		}
		#suggestionList{
			border-radius: 8px;
			width: 400px;
			max-height: 200px;
			overflow-y: auto;
			background-color: #fff;
			position: absolute;
			top:40px;
			left: 58px;
			z-index: 99;
			display: flex;
			flex-direction: column;
			.suggestion-li{
				width: 91.47%;
				margin: auto;
				display: flex;
				flex-direction: column;
				padding: 5px 0px;
				cursor: pointer;
				.suggestion-li-title{
					font-size: 16px;
					color: #333;
				}
				.suggestion-li-content{
					font-size: 15px;
					color: #999;
					margin-top: 5px;
				}
			}
		}
	}
}
</style>


 

 


http://www.niftyadmin.cn/n/5431184.html

相关文章

GPT如何与回归模型分析、混合效应模型、多元统计分析及结构方程模型、Meta分析、随机森林模型及贝叶斯回归分析结合应用

自2022年GPT&#xff08;Generative Pre-trained Transformer&#xff09;大语言模型的发布以来&#xff0c;它以其卓越的自然语言处理能力和广泛的应用潜力&#xff0c;在学术界和工业界掀起了一场革命。在短短一年多的时间里&#xff0c;GPT已经在多个领域展现出其独特的价值…

oracle基础-子查询 备份

一、什么是子查询 子查询是在SQL语句内的另外一条select语句&#xff0c;也被称为内查询活着内select语句。在select、insert、update、delete命令中允许是一个表达式的地方都可以包含子查询&#xff0c;子查询也可以包含在另一个子查询中。 【例1.1】在Scott模式下&#xff0…

安卓UI面试题 21-25

21. ListView 数据集改变后, 如何更新 ListView?使用该 ListView 的 adapter 的notifyDataSetChanged()方法. 该方法会使 ListView 重新绘制.🚀🚀🚀🚀🚀🚀22. 如何在ListView间添加分割线?//推荐用divider设置drawable的分割线 >>.设置全局属性 a).android…

【LeetCode每日一题】2312. 卖木头块(DFS记忆化搜索+动态规划)

文章目录 [2312. 卖木头块](https://leetcode.cn/problems/selling-pieces-of-wood/)思路1:用DFS进行记忆化搜索代码&#xff1a;思路2:动态规划代码&#xff1a; 2312. 卖木头块 思路1:用DFS进行记忆化搜索 1.要用DFS深度优先遍历每一种情况。在递归的同时&#xff0c;不断更…

springboot274基于web的电影院购票系统

电影院购票系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装电影院购票系统软件来发挥其高效…

element ui el-select组件添加选项下拉加载

需求描述&#xff1a;在做搜索的时候由于有一个下拉列表接口返回数据特别多所以对列表进行了一个下拉触底加载的事件&#xff0c;但是官方文档是没有对应的api的所以自己使用指令写了一个方法。 实现代码&#xff1a; <el-selectv-model"sellerNameSearchVal"v-s…

已解决org.apache.zookeeper.KeeperException.NodeExistsException异常的正确解决方法,亲测有效!!!

已解决org.apache.zookeeper.KeeperException.NodeExistsException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 报错原因 解决思路 解决方法 检查节点存在性 幂等性设计 异常捕获处理 总结 博主v&#xff1a;XiaoMing…

使用Jackson进行 JSON 序列化和反序列化

在Spring应用程序中&#xff0c;您可以通过Maven添加Jackson依赖&#xff0c;并创建一个工具类来封装对象的序列化和反序列化方法。以下是详细步骤&#xff1a; 1. 引入 Jackson 依赖 如果使用 Maven&#xff0c;您可以在 pom.xml 文件中添加以下依赖&#xff1a; <depend…