Beispiel für den Mehrpunkt-Routenplanungsprozess des WeChat-Applets Amap – detaillierte Erläuterung

Beispiel für den Mehrpunkt-Routenplanungsprozess des WeChat-Applets Amap – detaillierte Erläuterung

Anruf

Wie rufe ich die Amap-API auf?

Das offizielle offene Dokument von Amap unter https://lbs.amap.com/api/wx/summary/ ist recht detailliert:

Der erste Schritt besteht darin, sich als Amap-Entwickler zu registrieren

Schritt 2: Erstellen einer Anwendung in der Konsole

Klicken Sie auf die Kontrollplattform in der oberen rechten Ecke, um eine Anwendung zu erstellen

Denken Sie beim Erstellen eines Anwendungsbindungsdienstes daran, das WeChat-Applet auszuwählen. Laden Sie gleichzeitig das Entwicklungskit von https://lbs.amap.com/api/wx/gettingstarted herunter.

Der dritte Schritt besteht darin, sich bei der öffentlichen WeChat-Plattform anzumelden und den Amap-Domänennamen in den Entwicklungseinstellungen zu konfigurieren.

https://restapi.amap.com

Schritt 4. Öffnen Sie das WeChat-Entwicklertool, öffnen Sie das WeChat-Applet und erstellen Sie einen Libs-Ordner im Projekt.

Entpacken Sie das von der offiziellen Amap-Website heruntergeladene Entwicklungspaket und legen Sie die Datei amap-wx.js im Ordner „libs“ ab.

Erstellen Sie gleichzeitig config.js

var Konfiguration = {
 key:'Bitte tragen Sie hier den gewünschten Schlüssel ein'
}
module.exports.Config = Konfiguration;

Sie können die Gaode-API in anderen Teilen der JS-Schnittstelle aufrufen

var amapFile = require('../../libs/amap-wx.js');
var config = require('../../libs/config.js');

Navigation zwischen zwei Punkten

Dies ist die Grundlage für die Realisierung einer Mehrpunkt-Routenplanung, die sehr wichtig ist! ! !

Ergebnisse erzielen

Nehmen wir das Autofahren als Beispiel. Hinweis: Die Schnittstelle verwendet ColorUI

wxml-Teil:

<scroll-view scroll-x class="bg-white nav text-center">
 <view class="cu-item {{index==TabCur?'text-blue cur':''}}" wx:for="{{4}}" wx:key bindtap="tabSelect" data-id="{{index}}">
 {{Methode[index]}}
 </Ansicht>
</scroll-ansicht>
<Klasse anzeigen="Karte">
 <view bindtap='getFormAddress'>
 <Ansichtsklasse="cu-form-group">
 <view class="title">Abfahrtsort</view>
 <input placeholder="Abfahrtsort" type="text" name="" bindinput="" value='{{markers[0].name}}' />
 </Ansicht>
 </Ansicht>
 <view bindtap='getToAddress'>
 <Ansichtsklasse="cu-form-group">
 <view class="title">Ziel</view>
 <input placeholder="Ziel" type="text" name="" bindinput="" value='{{markers[1].name}}' />
 </Ansicht>
 </Ansicht>
​
 <Ansichtsklasse="flex" wx:if="{{TabCur==0||TabCur==1}}">
 <button class="cu-btn bg-blue lg" bindtap = 'getSure'>OK</button>
 </Ansicht>
​
</Ansicht>
<Ansicht>
 <Ansichtsklasse="map_box" wx:if="{{TabCur==0}}">
 <map id="navi_map" longitude="{{markers[0].longitude}}" latitude="{{markers[0].latitude}}" scale="12" marker="{{markers}}" polyline="{{polyline}}"></map>
 </Ansicht>
 <Ansichtsklasse="text_box" wx:if='{{TabCur==0}}'>
 <view class="text">{{Entfernung}}</view>
 <view class="text">{{Kosten}}</view>
 <view class="detail_button" bindtouchstart="goDetail" wx:if="{{state==1}}">Details</view>
 </Ansicht>
</Ansicht>

js-Teil:

var amapFile = require('../../libs/amap-wx.js');
var config = require('../../libs/config.js');
const app = getApp()
Seite({ 
 /**
 * Ausgangsdaten der Seite */
 Daten: {
 Markierungen: [{
 Symbolpfad: "../../img/mapicon_navi_s.png",
 ID: 0,
 Breitengrad: 39.989643,
 Längengrad: 116.481028,
 Breite: 23,
 Höhe: 33
 },{
 Symbolpfad: "../../img/mapicon_navi_e.png",
 ID: 0,
 Breitengrad: 39.90816,
 Längengrad: 116.434446,
 Breite: 24,
 Höhe: 34
 }],
 Distanz: '',
 kosten: '',
 Zustand: 0,
 Methode: ['fahren', 'Bus', 'Fahrrad', 'gehen'],
 Index: 0,
 TabCur:0,
 Polylinie: [],
 Transite: []
 }, 
 /**
 * Lebenszyklusfunktion - auf Seitenladen warten*/
 beim Laden: Funktion (Optionen) {
 var das = dies;
 wx.showLoading({
 Titel: "Positionierung",
 Maske: wahr
 })
 wx.getLocation({
 Typ: 'gcj02',
 Höhe: true, //Hochpräzise Positionierung erfolgreich: function(res) {
 konsole.info(res);
 var Breitengrad = Res.Breitengrad
 var Längengrad = res.Längengrad
 var Geschwindigkeit = Res.Geschwindigkeit
 var Genauigkeit = Res.Genauigkeit
 dass.setData({
 Markierungen: [{
 Name: 'Aktueller Standort',
 Breitengrad: Breitengrad,
 Längengrad: Längengrad
 }, {
 Name: 'Wohin gehst du?',
 Breitengrad: '',
 Längengrad: ''
 }]
 })
 },
 fehlgeschlagen: Funktion() {
 wx.showToast({
 Titel: "Positionierung fehlgeschlagen",
 Symbol: „keine“
 })
 }, 
 komplett: Funktion() {
 wx.hideLoading()
 }
 })
 },
 //Selektoränderungsfunktion tabSelect(e) {
 dies.setData({
 TabCur: e.currentTarget.dataset.id,
 scrollLeft: (e.currentTarget.dataset.id - 1) * 60
 })
},
//Abfahrtsort abrufengetFormAddress: function() {
 var das = dies;
 wx.Wählen Sie den Standort({
 Erfolg: Funktion (Res) {
 var name = res.name
 var Adresse = res.Adresse
 var Breitengrad = Res.Breitengrad
 var Längengrad = res.Längengrad
 var marksName = "Markierungen[" + 0 + "].name";
 var marksLatitude = "Markierungen[" + 0 + "].latitude";
 var markslongitude = "Markierungen[" + 0 + "].longitude";
 var marksiconPath = "Markierungen[" + 0 + "].iconPath";
 dass.setData({
 [markesName]: Name,
 [markesLatitude]: Breitengrad,
 [markeslongitude]: Längengrad,
 [markesiconPath]: "../../img/mapicon_navi_s.png"
 })
 },
 fehlgeschlagen: Funktion() {
 wx.showToast({
 Titel: 'Positionierung fehlgeschlagen',
 Symbol: „keine“
 })
 },
 komplett: Funktion() {
 //Positionierungsinformationen ausblenden Fortschritt wx.hideLoading()
 }
 })
 }, 
//Ziel abrufen getToAddress: function() {
 var das = dies;
 wx.Wählen Sie den Standort({
 Erfolg: Funktion (Res) {
 konsole.log(res);
 var name = res.name
 var Adresse = Res.Adresse
 var Breitengrad = Res.Breitengrad
 var Längengrad = res.Längengrad
 var marksName = "Markierungen[" + 1 + "].name";
 var marksLatitude = "Markierungen[" + 1 + "].latitude";
 var markslongitude = "Markierungen[" + 1 + "].longitude";
 var marksiconPath = "Markierungen[" + 1 + "].iconPath";
 dass.setData({
 [markesName]: Name,
 [markesLatitude]: Breitengrad,
 [markeslongitude]: Längengrad,
 [markesiconPath]: "../../img/mapicon_navi_e.png"
 })
 },
 fehlgeschlagen: Funktion() {
 wx.showToast({
 Titel: 'Positionierung fehlgeschlagen',
 Symbol: „keine“
 })
 },
 komplett: Funktion() {
 //Positionierungsinformationen ausblenden Fortschritt wx.hideLoading()
 }
 })
 },
 /**
 * Sicher*/
 getSure: Funktion() {
 var das = dies;
 var Herkunft = that.data.markers[0].longitude + ',' + that.data.markers[0].latitude; //Abfahrtspunkt var Ziel = that.data.markers[1].longitude + ',' + that.data.markers[1].latitude; //Ziel var TabCur=this.data.TabCur;
app.origin = Herkunft;
app.destination = Ziel;
var Schlüssel = Konfiguration.Konfigurationsschlüssel;
var myAmapFun = neue amapFile.AMapWX({
 Schlüssel: Schlüssel
 });
 wenn(TabCur==0){
  myAmapFun.getDrivingRoute({//Fahrtroute abrufen Ursprung: Ursprung,
  Ziel: Ziel,
  Erfolg: Funktion (Daten) {
  var Punkte = [];
  wenn (Datenpfade && Datenpfade[0] && Datenpfade[0].Schritte) {
  var Schritte = Daten.Pfade[0].Schritte;
  für (var i = 0; i < Schritte.Länge; i++) {
  var poLen = Schritte[i].polyline.split(';');
  für (var j = 0; j < poLen.length; j++) {
  Punkte.push({
  Längengrad: parseFloat(poLen[j].split(',')[0]),
  Breitengrad: parseFloat(poLen[j].split(',')[1])
  })
  }
  }
  }
  that.setData({//Zeichne die Route auf der Karte status: 1,
  Polylinie: [{
  Punkte: Punkte,
  Farbe: "#0091ff",
  Breite: 6
  }]
  });
  wenn (Daten.Pfade[0] && Daten.Pfade[0].Entfernung) {
  dass.setData({
  Entfernung: data.paths[0].distance + 'Meter'
  });
  }
  wenn (Daten.Taxikosten) {
  dass.setData({
  Kosten: „Taxi“ + parseInt(data.taxi_cost) + „Yuan“
  });
  }
  }
 })
 }
 },
/**
 * Detailseite */
goDetail: Funktion() {
  var TabCur = this.data.TabCur;
  wenn(TabCur==0){
  wx.navigateTo({
  URL: „../detail/detail“
  })
 }
 },
})

wxss-Teil:

.flex-Stil{
 Anzeige: -webkit-box;
 Anzeige: -webkit-flex;
 Anzeige: Flex;
 }
 .flex-item{
 Höhe: 35px;
 Zeilenhöhe: 35px;
 Textausrichtung: zentriert;
 -WebKit-Box-Flex: 1;
 -webkit-flex: 1;
 Flexion: 1
 }
 .flex-item.aktiv{
 Farbe: #0091ff;
 }
 .Kartentitel{
 Position: absolut;
 oben: 10px;
 unten: 110px;
 links: 0px;
 rechts: 0px;
 }
 .map_btn{
 Position: absolut;
 oben: 150px;
 unten: 220px;
 links: 0px;
 rechts: 0px;
 }
 .map_box{
 Position: absolut;
 oben: 187px;
 unten: 70px;
 links: 0px;
 rechts: 0px;
 }
 #navi_map{
 Breite: 100 %;
 Höhe: 100%;
 }
 .text_box{
 
 Position: absolut;
 Höhe: 70px;
 unten: 0px;
 links: 0px;
 rechts: 0px;
 }
 .text_box .text{
 Rand: 15px;
 }

Abschnitt der Detailseite:

HTML-Teil:

<view class="text_box" wx:for="{{Schritte}}" wx:for-item="i" wx:key="j">
 {{i.Anweisung}}
</Ansicht>

js-Teil:

var amapFile = require('../../libs/amap-wx.js');
var config = require('../../libs/config.js');
const app = getApp()
Seite({
 Daten: {
 Schritte: {}
 },
 beim Laden: Funktion () {
 var das = dies;
 var Schlüssel = Konfiguration.Konfigurationsschlüssel;
 var myAmapFun = neue amapFile.AMapWX({ Schlüssel: Schlüssel });
 myAmapFun.getDrivingRoute({
 Herkunft: app.origin,
 Ziel: app.destination,
 Erfolg: Funktion (Daten) {
 wenn (Datenpfade && Datenpfade[0] && Datenpfade[0].Schritte) {
 dass.setData({
 Schritte: data.paths[0].steps
 });
 }
 },
 fehlgeschlagen: Funktion (Info) {
 }
 })
 }
})

wxss-Teil:

Seite{

}
.text_box{
 Rand: 0 15 px;
 Polsterung: 15px 0;
 Rahmen unten: 1px durchgezogen #c3c3c3;
 Schriftgröße: 13px;
}
.text_box .text_item{Anzeige: Inline-Block;Zeilenhöhe: 8px;}

Andere Methoden des öffentlichen Nahverkehrs, Radfahren und Gehen ähneln dem Autofahren. Weitere Informationen hierzu finden Sie in den offenen Dokumenten von Amap.

In meinem Entwurf kann der Bus die Busrouten verschiedener Städte anzeigen, nicht nur einer Stadt. Die Implementierung ist sehr einfach. Der Schnittstelle wird ein Selektor-Stadtparameter hinzugefügt und an die Stadt übergeben, um die Busrouten verschiedener Städte anzuzeigen.

Routenplanung für mehrere Ziele

Implementierungseffekt: Sie können den Startpunkt auswählen, verschiedene Attraktionen auswählen und basierend auf verschiedenen Reisemethoden einen kürzesten Weg angeben

Umsetzungsideen:

  • Erhalten Sie Informationen zu umliegenden Sehenswürdigkeiten und andere damit verbundene Informationen
  • Übergeben Sie die vom Benutzer hinzugefügten Informationen zum Aussichtspunkt zur Berechnung an die nächste Seite
  • Holen Sie sich alle möglichen Routen und berechnen Sie die Länge jeder Route, um die kürzeste zu finden

Fallstricke

  • Zunächst wollte ich zur Implementierung den Algorithmus der Tiefensuche verwenden, stellte dann aber fest, dass in realen Karten fast immer ein Pfad zwischen zwei beliebigen Punkten existiert, was keinem abstrakten mathematischen Problem gleicht. Also haben wir schließlich die Methode der vollständigen Permutation verwendet, um alle Routen zu erhalten .
  • Während des vollständigen Arrangements muss die Funktion rekursiv aufgerufen werden, was das Problem der Parameterübergabe mit sich bringt. Die benutzerdefinierte Funktion mit Parametern muss außerhalb der Seite geschrieben werden. Wenn sie auf der Seite geschrieben wird, habe ich viele Möglichkeiten zum Aufrufen der Funktion ausprobiert und es treten Fehler auf.
  • Nachdem die Pfadfunktion mithilfe der Gaode-API abgerufen wurde, ist es unmöglich, die Länge jedes Routensegments zu berechnen. Schließlich wird festgestellt, dass das Array, das die Routenentfernung speichert, während des Funktionsaufrufs nur vorübergehend gespeichert wird und das Array nach dem Funktionsaufruf nicht zum Berechnen der Entfernung verwendet werden kann. Also habe ich am Ende die Länge jeder Route berechnet und sie während des Funktionsaufrufs verglichen und schließlich die Methode this.setData verwendet, um die endgültige Route auf der Schnittstelle anzuzeigen.

Konkrete Umsetzung

  • Rufen Sie den Abfahrtsort und die Reisemethode ab und weisen Sie sie globalen Variablen zu, um sie an die nächste Schnittstelle zu übergeben, z. B. app.origin = origin .
  • Verwenden Sie die Funktion getPoiAround , um Informationen zu den umliegenden Sehenswürdigkeiten abzurufen. querykeywords können fest auf Sehenswürdigkeiten eingestellt werden. Die ersten 20 zurückgegebenen Informationen zu Sehenswürdigkeiten werden auf der Benutzeroberfläche angezeigt.
  • Die vom Benutzer ausgewählten Informationen zum Aussichtspunkt werden in einem Array gespeichert und zur Berechnung an die nächste Schnittstelle übergeben.
  • Verwenden Sie die vollständige Permutation, um alle möglichen Routen zu erhalten und Duplikate zu entfernen.
  • Berechnen Sie die Länge jeder Route, finden Sie die kürzeste und zeigen Sie sie auf der Benutzeroberfläche an.

Hinweis: Die Methode zum Ermitteln der Entfernung jeder Route und die Methode zum Ermitteln der Routen verschiedener Reisemodi zwischen zwei Standorten finden Sie im Navigationsteil zwischen zwei Punkten oben. Die Routennavigation zwischen mehreren Punkten verbindet tatsächlich die Routennavigation zwischen mehreren Punkten miteinander. Implementieren Sie zunächst die Navigation verschiedener Reisemodi zwischen den beiden oben genannten Punkten, nehmen Sie dann geringfügige Änderungen vor und fügen Sie dann den vollständigen Permutationsalgorithmus und den Größenvergleichsalgorithmus hinzu, um sie zu implementieren. Ich werde den Quellcode hier nicht veröffentlichen.

Ich hoffe, meine Ideen können Sie inspirieren~

Optimierbare Teile

  • Es können querykeywords festgelegt werden, sodass Benutzer unterschiedliche Tags auswählen können, z. B.: Outdoor, Unterhaltung, Essen, Hotel usw.
  • Ermöglichen Sie Benutzern, Standorte mit unterschiedlichen Bezeichnungen auszuwählen und diese in einem Array zu speichern, um den kürzesten Weg für eine Reise zu berechnen.
  • In der endgültigen Anzeigeoberfläche kann eine Karte angezeigt werden, damit Benutzer die Standort- und Entfernungsinformationen zwischen verschiedenen Standorten intuitiver anzeigen können.
  • Die beste Form der Navigation: Echtzeit-Navigation.

Hinweis: Die oben genannten vier Punkte sind die Teile, die mir im Moment einfallen. Es ist, als würde ich mir ein Loch graben. Ich werde hier eine Implementierungsmethode schreiben, nachdem ich es gefüllt habe.

Damit ist dieser Artikel mit der ausführlichen Erläuterung des Beispiels des Mehrpunkt-Routenplanungsprozesses des Amap WeChat Mini-Programms abgeschlossen. Weitere relevante Inhalte zur Amap-Mehrpunkt-Routenplanung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, dass alle 123WORDPRESS.COM in Zukunft unterstützen werden!

Das könnte Sie auch interessieren:
  • React-Implementierungsbeispiel mit Amap (react-amap)
  • So verwenden Sie die Amap-API in einer Java-Umgebung
  • Benutzerdefiniertes Popup-Fenster für Android Gaode-Kartenmarkierungen
  • Detaillierte Schritte zur Integration von SpringBoot mit Mybatis, um die Amap-Positionierung zu realisieren und Daten in der Datenbank zu speichern
  • So verwenden Sie Amap im Front-End Vue
  • Das WeChat-Applet implementiert eine Wetterkomponente (dynamische Effekte) basierend auf der Amap-API
  • vue + Amap realisiert Kartensuche und Klickpositionierungsvorgang
  • React+Amap ermittelt Breiten- und Längengrad in Echtzeit und lokalisiert die Adresse

<<:  Windows kann den MySQL-Dienst nicht starten und meldet Fehler 1067 – Lösung

>>:  Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.17 (Ubuntu 16.04)

Artikel empfehlen

So erstellen Sie mit Dockerfile ein Spiegelbild der Java-Laufzeitumgebung

Die aktuelle Umgebung ist: Centos 7.5 docker-ce 1...

Detaillierte Analyse des React Native-Startvorgangs

Einführung: Dieser Artikel verwendet das von reac...

Mysql-Operation zum Abrufen von Tabellenkommentarfeldern

Ich werde nicht viel Unsinn erzählen, schauen wir...

In wenigen Schritten zum einfachen Aufbau eines Windows-SSH-Servers

Das hier erwähnte SSH heißt Security Shell. Ich g...

js zur Realisierung der Web-Message-Board-Funktion

In diesem Artikelbeispiel wird der spezifische JS...

Markup-Validierung für Doctype

Aber vor kurzem habe ich festgestellt, dass die Ve...

Installations-Tutorial für die ZIP-Archivversion von MySQL 5.7

In diesem Artikel finden Sie das Installations-Tu...

Grundlegende Referenztypen der erweiterten JavaScript-Programmierung

Inhaltsverzeichnis 1. Datum 2. RegExp 3. Original...

Methode zur Wiederherstellung von Betriebs- und Wartungsdaten der MySQL-Datenbank

In den vorherigen drei Artikeln wurden gängige Si...

Detailliertes Beispiel für das Linux-Allround-Systemüberwachungstool dstat

Umfassendes Systemüberwachungstool dstat dstat is...