uniapp desenvolve aplicativo Android para realizar o planejamento de rotas e navegação do mapa Gaode

Visão geral técnica

Descreva o que essa tecnologia faz/em que circunstâncias essa tecnologia será usada, o motivo para aprender essa tecnologia e onde estão as dificuldades da tecnologia. Controle dentro de 50-100 palavras.

A exibição da rota de navegação no componente de mapa do uniapp. É o método de implementação de introdução de navegação no mapa quando o uniapp desenvolve aplicativos. A dificuldade técnica é que, ao implementar o componente do mapa, alguns bugs estranhos tendem a aparecer nos detalhes de atributos e funções.

Detalhes técnicos

Descreva como você implementa e usa a tecnologia, exigindo uma descrição detalhada do código e do fluxograma. Múltiplos pontos podem ser subdivididos para descrever cada parte separadamente.

  • A primeira é solicitar uma chave de mapa na plataforma do desenvolvedor de mapas

chave é uma obrigação ao introduzir mapas durante o desenvolvimento do mapa

insira a descrição da imagem aqui

  • Em seguida, instale o plug-in no mercado de plug-ins da ferramenta de desenvolvimento HbuilderX

Encontre este plug-in de planejamento de rotas no mercado de plug-ins, clique para instalá-lo na ferramenta de desenvolvimento.

insira a descrição da imagem aqui

  • Introduzir o arquivo js no script da página
import Amap from '@/js/lyn4ever-gaode.js';
  • O arquivo js acima tem duas funções, que são a rota de desenho e a função de marcação de rota

Trace a função de rota planejada

//绘制规划路线
function PlanningRoute(start, end, _waypoints, result, fail) {
    
    
	let that = this;
	var myAmapFun = new amapFile.AMapWX({
    
    
		key: key
	});
	myAmapFun.getDrivingRoute({
    
    
		origin: start,
		destination: end,
		waypoints: _waypoints,
		success: function(data) {
    
    
			var points = [];
			if (data.paths && data.paths[0] && data.paths[0].steps) {
    
    
				var steps = data.paths[0].steps;
				for (var i = 0; i < steps.length; i++) {
    
    
					var poLen = steps[i].polyline.split(';');
					for (var j = 0; j < poLen.length; j++) {
    
    
						points.push({
    
    
							longitude: parseFloat(poLen[j].split(',')[0]),
							latitude: parseFloat(poLen[j].split(',')[1])
						})
					}
				}
			}
			result({
    
    
				points: points,
				color: "#0606ff",
				width: 8
			})
		},
		fail: function(info) {
    
    
			fail(info)
		}
	})
}

função de marcador de rota

//标记标记点
function Makemarkers(startpoi, endpoi, waypoints, success) {
    
    
	let markers = [];
	//起点
	let start = {
    
    
		iconPath: "@/static/img/log/nav.png",
		id: 0,
		longitude: startpoi.split(",")[0],
		latitude: startpoi.split(",")[1],
		width: 23,
		height: 33,
		callout:{
    
    
			content:'起点',
		}
	}
	markers.push(start)
	//终点
	let end = {
    
    
		iconPath: "@/static/img/log/nav.png",
		id: 1,
		longitude: endpoi.split(",")[0],
		latitude: endpoi.split(",")[1],
		width: 23,
		height: 33,
		callout:{
    
    
			content:'终点',
		}
	}
	markers.push(end)
	//途经点,先将其分隔成为数组
	let _waypoints = waypoints.split(';')
	for (let i = 0, _len = _waypoints.length; i < _len; i++) {
    
    
		let point = {
    
    
			iconPath: "/static/tjd.png",
			id: i,
			longitude: parseFloat(_waypoints[i].split(",")[0]),
			latitude: parseFloat(_waypoints[i].split(",")[1]),
			width: 23,
			height: 33,
			callout:{
    
    
				content:'途径点',
			}
		}
		markers.push(point)
	}
	success(markers);
}
  • Em seguida, showRouter () no script chama duas funções em js

Desde que a longitude e a latitude do ponto de partida e do ponto final sejam passadas, a rota planejada pode ser exibida no componente do mapa.

Desde que você passe no objeto array dos pontos na rota correspondente, os pontos passados ​​podem ser exibidos na rota.

showRouter(){
    
    
	let that = this;
	var startPoi = that.longitude+','+that.latitude;
	var wayPoi ="";
	var endPoi = that.addressObj.longitude+','+that.addressObj.latitude;
	
	Amap.line(startPoi, endPoi, wayPoi,function(res){
    
    
		that.polyline=[];
		that.polyline.push(res)
	});
			
	Amap.markers(startPoi,endPoi,wayPoi,function(res){
    
    
		that.markers=[];
		that.markers.push.apply(that.markers,res)
	})
}
  • renderizações

Adicione uma descrição da imagem

problema e solução

Problemas encontrados no uso da tecnologia e o processo de resolvê-los. Exige-se que a descrição e a solução do problema tenham determinado conteúdo e não possam ser resumidas precipitadamente. Permita que as pessoas que encontram problemas relacionados resolvam o problema depois de ler seu blog.

pergunta:

  • Depois que a rota de navegação é exibida, o tamanho do zoom da página do mapa não pode ser bem controlado. Depois de exibir a rota, esperamos que a perspectiva do mapa cubra o ponto inicial da rota. Esse problema me incomodou por muito tempo. Fique ligado uma pequena parte do percurso. Uma vez resolvido, o campo de visão de toda a rota pode ser totalmente exibido.

Adicione uma descrição da imagem

resolver:

  • De acordo com a distância entre os pontos iniciais da rota, utilizo uma função de ajuste para processar o tamanho da escala do mapa, para que o tamanho do zoom do mapa possa ser ajustado.

Retorne a distância de navegação solicitando o back-end, defina uma matriz de superfície para armazenar o valor da marca, converta a distância em km e atravesse a matriz de superfície, quando a distância for maior que o valor da matriz, defina a escala do mapa para o valor subscrito correspondente da superfície + 5. Desta forma, o controle do tamanho do zoom do mapa após a exibição da rota pode ser realizado.

uni.request({
    
    
	/* url: 'http://47.95.151.202:8087/getDist/福州大学/福州三坊七巷', */
	url: 'http://47.95.151.202:8087/getDist/'+that.myAddress+'/'+that.realAddress,
	success: (res) => {
    
    
		// 请求成功之后将数据给Info
		var result = res.data;
		console.log(that.myAddress);
		console.log(that.realAddress);

		if(result.code===200)
		{
    
    
			var surface = [500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02];
			var isset=1;
			var farthestDistance=result.data/1000;
			console.log(result.data);
			for(var i in surface) {
    
    
				if(farthestDistance >surface[i]) {
    
    
					that.myscale = 5 + Number(i);
					isset=0;
					break;
				}
			}
			if(isset) that.myscale=16;
			console.log(that.myscale);
		};
		if(result.code===500){
    
    
			uni.showToast({
    
    
				title: '获取距离错误,换个地点试试呗',
				icon: 'none',
			});
		}
	},
	fail(err) {
    
    
		res(err);
	}
});

Adicione uma descrição da imagem

meu resumo

  • Por meio desse aprendizado de mapa, dominei basicamente a implementação do mapa, o método de exibição da rota de navegação e o uso dos atributos e funções relacionados do componente do mapa, e ganhei muito.

referências

uniapp desenvolve aplicativo Android e apresenta mapa Gaode

Supongo que te gusta

Origin blog.csdn.net/weixin_45739290/article/details/125424472
Recomendado
Clasificación