Beispiele für die korrekte Verwendung von Karten in WeChat-Miniprogrammen

Beispiele für die korrekte Verwendung von Karten in WeChat-Miniprogrammen

Vorwort

Heute erzähle ich Ihnen von einem Szenario, das mein jüngerer Bruder (im Bereich WeChat Mini-Programme) bei der Arbeit erlebt hat – die Auswahl von Schulen in der Nähe eines bestimmten Ortes. Es scheint sehr nützlich zu sein, also habe ich ihn gebeten, es mit Ihnen zu teilen.

Dieses Mal möchte ich die Methode zum Auswählen einer Schule und Adresse im ganzen Land im WeChat-Applet erläutern. Nach Recherchen stellte ich fest, dass die meisten Websites die Namen älterer Schulen im ganzen Land angeben. Neuere oder in abgelegenen Gebieten gelegene Schulen werden im Allgemeinen nicht gefunden. Da wir dachten, dass dies definitiv nicht funktionieren würde, suchten wir weiter nach einem umfassenderen Ansatz. Schließlich stellten wir fest, dass die von den in der Karte bereitgestellten Diensten bereitgestellten Schulen die umfassendsten waren. Hier verwenden wir die offene Schnittstelle von Tencent Map als Beispieldemonstration.

1. Vorbereitung

Wenn Sie Tencent Map Open Platform lesen, erfahren Sie, dass WeChat Mini Programs SDK herunterladen kann, um direkte Aufrufschnittstellen für die Verwendung von Tencent Maps bereitzustellen. Natürlich können Sie die URL-Anforderung auch selbst kapseln und Ihre eigenen Daten zurückgeben. In diesem Beispiel werden beide verwendet, da bei der Kapselung im SDK bestimmte Schnittstellen aufgerufen werden und dieselbe Schnittstelle im Beispiel mehrmals aufgerufen wird, was bei häufigen Schnittstellenaufrufen zu Fehlern führt.

Während des Vorgangs werde ich auch den Vant des Youzan-Teams verwenden, um Schulinformationen anzuzeigen. Daher muss ich die Abhängigkeiten auch im Voraus installieren. Spezifische Installationsschritte finden Sie auf der offiziellen Website

2. Tatsächlicher Kampf

2.1 Konfigurieren Sie die Berechtigungen für Miniprogramme

Als Erstes müssen wir den Benutzern ermöglichen, beim Aufrufen des Miniprogramms Standortberechtigungen für unser Miniprogramm zu aktivieren. Wir müssen den folgenden Code in die Datei app.json einfügen:

"Erlaubnis": {
  "scope.Benutzerstandort": {
    "desc": "Ihre Standortinformationen werden verwendet, um die Wirkung der Miniprogramm-Standortschnittstelle anzuzeigen"
  }
}

Wenn das Miniprogramm das Ortungssystem verwendet und festgestellt wird, dass dem Miniprogramm keine Berechtigung erteilt wurde, wird der Benutzer mit diesem Feld aufgefordert, dem Miniprogramm die Berechtigung zu erteilen. Die Auswirkung ist wie folgt:

2.2 Funktionen des Kapselungstools

2.2.1 Globale Funktionen und Variablen

app.js

// Globale Variable globalData: {
    Benutzerinfo: null
  },
// Globale Importmethode, einfacher Import von Drittanbieterpaketen require: ($url)=> require($url)

2.2.2 Werkzeugfunktionen

util.js

//SDK-Kernklasse einführen const QQMapWX = require('./qqmap-wx-jssdk.min.js');
//Instanziieren Sie die API-Kernklasse let key = '';
lass qqmapsdk;
Schlüssel &&(qqmapsdk = neues QQMapWX({
  Schlüssel // erforderlich}));
modul.exporte = {
  qqmapsdk,
  Schlüssel
}

Hier führen wir das SDK ein und übergeben das instanziierte Objekt direkt, aber hier müssen wir den Schlüssel für die offene Schnittstelle von Tencent Map angeben. Ich werde meinen Schlüssel hier nicht angeben. Der Schlüssel wird weitergegeben, da wir ihn später benötigen werden. Um unseren eigenen Schlüssel nicht preiszugeben, wird der Schlüssel während der Entwicklung im Allgemeinen in der Backend-Konfiguration gespeichert. Hier wird er zur Vereinfachung der Demonstration auf dem Frontend verarbeitet.

2.3 Verarbeitung vor dem Sprung zur Site-Auswahlseite

Um das Telefon zu orten, muss nicht nur die WeChat-Berechtigung aktiviert sein, sondern unser Telefon muss auch eine Berechtigung für das Ortungssystem haben. Bevor wir offiziell mit der Ortung beginnen, müssen wir daher normalerweise eine Reihe von Vorgängen ausführen, um ein besseres Benutzererlebnis für diese Funktion zu bieten. Hier verwende ich einfach eine Schaltfläche zum Springen.

wxml

<Ansicht>
	<van-btn bind:tap="gotoMap" type="info">Zur Karte</van-btn>
</Ansicht>

Zuerst müssen wir der Schaltfläche ein Klickereignis hinzufügen, mit dem wir viele Dinge handhaben können. Als Nächstes schauen wir uns den JS-Code an!

//Die erforderlichen Toolfunktionen einführen const app = getApp();
const {qqmapsdk} = app.require('utils/util');
Seite({
  /**
   * Startposition auf der Karte */
  // Klicken Sie auf die Schaltfläche, um zur Kartenseite zu springen gotoMap(){
     wx.showLoading({
       Titel: „Weiterleitung zur Kartenseite“
     })
    // Bevor Sie springen, müssen Sie einige Dinge tun, um das Benutzererlebnis zu verbessern // 1. Überprüfen Sie, ob der Benutzer die Standortbestimmung aktiviert hat. Wenn nicht, befolgen Sie die Anweisungen. // 2. Überprüfen Sie die Standortbestimmungsberechtigung des Programms. Wenn nicht, befolgen Sie die Anweisungen. // 3. Führen Sie die beiden oben genannten Punkte aus, bevor Sie mit dem Springen beginnen können. wx.getLocation({
      Erfolg(res){
        wx.navigateTo({
          URL: "/Seiten/Karte/Index"
        })
      },
      scheitern(e) {
        wenn (e && (e.errCode == 2 || e.errCode == 404)) {
          wx.showModal({
            Titel: "Tipps",
            Inhalt: „Standortinformationen konnten nicht abgerufen werden. Bitte überprüfen Sie, ob die „Standortinformationen“ des Mobiltelefons aktiviert sind.“
            anzeigenAbbrechen: false
          })
        } sonst wenn (e && ((e.errMsg.indexOf('getLocation:fail auth deny') != -1) || (e.errMsg.indexOf('Systemberechtigung verweigert') != -1))) {
          zeigeModal({
            Titel: "Tipps",
            Inhalt: „Standortinformationen konnten nicht abgerufen werden. Bitte prüfen Sie, ob WeChat über die Standortberechtigung verfügt.“
            confirmText: "Erneut erwerben",
            Erfolg(res){
              wenn(res.confirm === true){
                Detektoreinstellungen ()
              } sonst wenn(res.cancel == true){
                zurückkehren;
              }
            }
          })
        } sonst wenn(e.errMsg.indexOf("frequent") !== -1){
          wx.showModal({
            Titel: "Tipps",
            Inhalt: „Die Schnittstelle für Standortinformationen wird zu häufig aufgerufen. Bitte warten Sie 10–30 Sekunden, bevor Sie sie erneut aufrufen.“
            anzeigenAbbrechen: false
          })
        }
      },
      vollständig(){
        wx.hideLoading()
      }
    })
    // Anleitung zum Aktivieren der WeChat-Standortberechtigungsfunktion detectSettings(){
      wx.getSetting({
        Erfolg(res){
          wenn(res && (res.authSetting["scope.userLocation"] !== undefiniert && res.authSetting["scope.userLocation"] !==true)){
            wx.showModal({
              Titel: "Tipps",
              Inhalt: „Das Miniprogramm verfügt nicht über die Standortberechtigung. Bitte gehen Sie zum Festlegen der Standortberechtigung für das WeChat-Miniprogramm.“
              confirmText: "Gehe zu den Einstellungen",
              Erfolg(res){
                wenn(res.cancel == true){
                  zurückkehren
                } sonst wenn (res.confirm === true){
                  wx.openSetting({
                    Erfolg(Ergebnis){
                      wenn (Ergebnis && (Ergebnis.authSetting["scope.userLocation"] !== undefiniert && Ergebnis.authSetting["scope.userLocation"] ===true)) {
                        wx.navigateTo({
                          URL: "/Seiten/Karte/Index"
                        })
                      } anders {
                        wx.navigateTo({
                          URL: "/Seiten/Index/Index"
                        })
                      }
                    },
                  })
                } 
              },
              scheitern(){
                wx.navigateTo({
                  URL: "/Seiten/Index/Index"
                })
              }
            })
          } anders {
            wx.navigateTo({
              URL: "/Seiten/Karte/Index"
            })
          }
        },
        vollständig(){
          wx.hideLoading()
        }
      })
    }
   }
})

Nachdem wir den Code gelesen haben, schauen wir uns die Wirkung an. Hier betonen wir, dass die Bedingungen für das Springen nicht erfüllt sind. Die Wirkung wird im folgenden GIF gezeigt:

Das obige GIF verarbeitet das ungeöffnete Handy-Ortungssystem nicht. Diese Demonstration ist in dieser Hinsicht relativ einfach, nur eine Eingabeaufforderung und dann nichts. In der täglichen Entwicklung gibt es normalerweise andere, bessere Verarbeitungsmethoden. Die Wirkung von ungeöffnet ist wie folgt:

2.4 Verarbeitung nach dem Sprung

2.4.1 Seiteninitialisierung

Nach dem vorherigen Schritt haben wir bestätigt, dass beide Berechtigungen des Mobiltelefons erteilt wurden, sodass wir mit der Verarbeitung der Seite zur Kartenstandortauswahl beginnen können. Bevor wir beginnen, schauen wir uns an, wie das fertige Produkt aussieht:

wxml

<!--pages/map/index.wxml-->
<view class="feste Oberseite">
  <van-search bind:search="searchSchool" placeholder="Bitte geben Sie den Namen der Schule ein" model:value="{{schoolName}}" />
  <Klasse anzeigen="Schul-Navigation">
    <text class="left">Schulen in der Nähe</text>
    <view class="right" bind:tap="changeCity">
      <van-icon name="Standort-o" />
      <text>{{Stadt || "Peking"}}</text>
    </Ansicht>
  </Ansicht>
</Ansicht>
<view class="addr-cell" bindtap="subData">
  <block wx:für="{{Optionen}}" wx:Schlüssel="Index">
    <van-cell data-chooseOpt="{{item}}" title-width="70vw" title="{{item.title}}" value="" label="{{item.address}}" />
  </block>
  <Ansichts-ID="txt" Klasse="btm">
    <text wx:if="{{options.length}}">{{count>0 ? "Zum Aktualisieren nach unten ziehen und weitere Informationen erhalten" : "Sie haben das Ende bereits erreicht"}}</text>
    <text class="no-data" wx:else>Es wurden keine relevanten Daten erhalten. . . </text>
  </Ansicht>
</Ansicht>	

Das Gesamtgerüst ist wie in der obigen WXML-Datei dargestellt. Wenn alle Daten bereitgestellt werden, sieht es so aus wie in der obigen Abbildung. Dann lassen Sie mich seine logische Umsetzung erklären!

//Die erforderlichen Toolfunktionen einführen const app = getApp();
const {qqmapsdk,key} = app.require('utils/util');
// Lebenszyklusfunktion initialisieren onLoad: function (options) {
  _dies = dies;
  _this.init()
},

Die folgenden Funktionen kommen nicht nur beim Laden zum Einsatz, sondern auch später. Zur Unterscheidung nutze ich die übergebenen Parameter. Wird es während des Ladens aufgerufen, dient es nur dazu, den aktuellen Standort des Benutzers abzurufen, der für die Anzeige verwendet wird; wird eine Adresse übergeben, wird diese für die umgekehrte Adressauflösung verwendet.

// Ihre Adresse wird analysiert und der aktuelle Standort wird ermittelt init(location){
  let Abfrage = {
    Erfolg(res){
      Konsole.log(res)
      wenn(res.status === 0) {
        // konsole.log(res.ergebnis.standort)
        app.globalData.adInfo = res.result.ad_info;
        _this.setData({
          Stadt: res.result.ad_info.city,
          lat: res.result.location.lat,
          lng:res.ergebnis.standort.lng,
        })
        _this.qqSearch();
      } anders {
        wx.showModal({
          Titel: 'Tipps',
          content:res.message || „Die geografischen Standortinformationen konnten nicht abgerufen werden.“
          anzeigenAbbrechen: false
        })
      }
    },
    scheitern(e) {
      console.log(e)
    }
  }
  Standort && (Abfrage.Standort = Standort);
  qqmapsdk.reverseGeocoder(Abfrage);
}

2.4.2 Implementierung der Suchfunktion

// Wenn die Eingabe eine Stadt ist, wird nur die Stadt angezeigt, ohne die Schule anzuzeigen searchSchool(e){
  // Keine Eingabe oder kein Eingabebereich if(e && (!e.detail || e.detail.trim() === '')){
    wx.showToast({
      Titel: „Bitte geben Sie einen gültigen Schulnamen ein“,
      Symbol: „keine“,
      Dauer: 2000
    })
    zurückkehren
  }
  _this.setData({
    Optionen:[],
    Anzahl: -2
  })
  _this.qqSearch(e.detail);
},
qqSuche(Name){
  // Geben Sie den Namen der Schule in das Eingabefeld ein wx.showLoading({
    Titel: „Informationen einholen“
  })
  const mks = [];
  lass zählen,
      Grenze = `in der Nähe(${_this.data.lat},${_this.data.lng},1000)`;
  Suche (Name)
  Funktion Suche(Name){
    Konstantenoptionen = {
      keyword: 'Universität', //Suchbegriffe page_size: 15,
      page_index: _this.data.pageIndex, // Weitere Schlüssel abrufen: key,
      Grenze
    };
    wenn(Name){
      opts.boundary = `Region(${_this.data.city})`
      opts.keyword = Name
    }
    // Der Hauptzweck besteht hier darin, Fehler zu vermeiden, die durch hochfrequente Schnittstellenaufrufe verursacht werden, sodass nur die URL verwendet werden kann, um relevante Informationen abzurufen wx.request({
      URL: "https://apis.map.qq.com/ws/place/v1/search",
      Methode: "get",
      Daten:{
        ...wählt
      },
      Erfolg: Funktion (res) { //Rückruf nach erfolgreicher Suche console.log(res)
        wenn(res.statusCode !== 200 || (res.data && res.data.status !== 0)) return;
        // Initialisierung und andere Zustände // Berechnen Sie, wie oft Sie nach unten rutschen können, um mehr zu erhalten, wenn (_this.data.count === -1 || _this.data.count === -2) {
          Anzahl = res.data.count und Math.floor(res.data.count/10);
        }anders {
          Anzahl = --_this.data.count;
        }
        für (lass i = 0; i < res.data.data.length; i++) {
          mks.push({ // Das zurückgegebene Ergebnis abrufen und in das mks-Array einfügen title: res.data.data[i].title,
            Adresse: res.data.data[i].address,
          })
        }
      },
      Fehler: Funktion (e) {
        console.log(e)
        wx.showToast({
          Titel: JSON.stringify(e) || "Karteninformationen konnten nicht abgerufen werden",
          Symbol: "keine",
          Dauer: 3000
        })
      },
      vollständig: Funktion (){
        setzeTimeout(()=>{
          wx.hideLoading()
          mks.push(..._diese.Daten.Optionen);
          _this.setData({ //Setze die Marker-Eigenschaft, um die Suchergebnisse auf der Karte anzuzeigen options: mks,
            zählen
          })
        },1000)
      }
    });
  }
},

2.4.3 Scrollen Sie nach unten, um mehr zu erfahren

// Nach unten rutschen Lebenszyklusfunktion onReachBottom: function () {
  _this.data.pageIndex = ++_this.data.pageIndex;
  _this.data.count und _this.qqSearch();
},

2.4.4 Daten übermitteln

Wir werden hier nicht näher auf die Übermittlung von Daten eingehen. Wenn Sie dies wünschen, werden Sie dazu aufgefordert. Bei der tatsächlichen Entwicklung müssen Sie die Daten normalerweise für andere Zwecke in der Datenbank speichern.

subDaten(e){
  const data = e.target.dataset.chooseopt;
  //Behandeln Sie die Situation des Klickens auf die Eingabeaufforderung textif(!data) return;
  wx.showModal({
    Titel: "Tipps",
    Inhalt: `Ist Ihre Schule [${data.title}]? `,
    Erfolg(res){
      // Abbrechen if(res.cancel) {
        zurückkehren;
      } sonst wenn (res.bestätigen){
        // OK // Anfragen zum Hinzufügen oder Ändern im Backend erfordern normalerweise eine detaillierte Adresse, hier ist ein einfacher Vorgang wx.showToast({
          Titel: Daten.Titel,
          Symbol: „keine“
        })
      }
    },
    scheitern(){
      wx.showToast({
        Titel: "Misserfolg",
        Symbol: „Fehler“
      })
    }
  })
}

2.4.5 Städte wechseln

Stadt ändern(){
  _this.setData({
    Optionen:[],
    Anzahl: -2,
    // Einfache bidirektionale Datenbindung, lösche den Inhalt des Eingabefelds, wenn du „schoolName“ eingibst: ''
  })
  wx.Wählen Sie den Standort({
    Breitengrad:_this.data.lat,
    Längengrad:_this.data.lng,
    Erfolg(res){
      wenn(res.errMsg === "chooseLocation:ok"){
        // Den ausgewählten Standort abrufen und Längen- und Breitengrad anhand der inversen Adresse analysieren parsing_this.init(`${res.latitude},${res.longitude}`);
      }
    },
    //Drücken Sie die Abbrechen-Taste fail(e){
      if(e.errMsg === "chooseLocation:fail cancel"){
        _this.init();
      }
    },
    vollständig(){
    }
  })
}

Zu diesem Zeitpunkt ist die Schulauswahl des WeChat-Miniprogramms abgeschlossen. Die Logik dieser tatsächlichen Praxis ist nicht kompliziert, da sie Schritt für Schritt umgesetzt wird.

Zusammenfassen

Dies ist das Ende dieses Artikels über die korrekte Verwendung von Karten in WeChat-Miniprogrammen. Weitere relevante Inhalte zur Verwendung von Karten in WeChat-Miniprogrammen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Einfaches Beispiel für die Kartenpositionierung des WeChat-Applets
  • Beispiel für eine WeChat-Applet-Karte (Karte) mit ausführlicher Erläuterung
  • So implementieren Sie die Kartennavigationsfunktion im WeChat-Applet
  • Detaillierte Erklärung und Implementierungsschritte zur Verwendung des Tencent Map SDK im WeChat Mini-Programm
  • WeChat Mini-Programm Amap SDK – ausführliche Erklärung und einfache Beispiele (Quellcode-Download)
  • Detaillierte Erklärung und einfaches Beispiel der WeChat-Applet-Karte
  • Tutorial zur Implementierung einer WeChat-Applet-Entwicklungskarte
  • WeChat-Applet: Aktuellen Längen- und Breitengrad des Standorts sowie Kartenanzeigedetails abrufen
  • WeChat Mini-Programm-Tutorial: Detailliertes Beispiel für den lokalen Bild-Upload (leancloud)
  • So erhalten Sie Längen- und Breitengrade durch Klicken auf die Kartenkomponente des WeChat-Applets

<<:  Implementierung von HTTP- und HTTPS-Diensten mit Nginx-Reverse-Proxy für mehrere Domänennamen

>>:  Detaillierte Analyse von GUID-Anzeigeproblemen in Mongodb

Artikel empfehlen

Häufig verwendete JS-Funktionsmethoden im Frontend

Inhaltsverzeichnis 1. E-Mail 2. Mobiltelefonnumme...

MySQL-Sequenz AUTO_INCREMENT ausführliche Erklärung und Beispielcode

MySQL-Sequenz AUTO_INCREMENT ausführliche Erkläru...

Gutes Website-Copywriting und gute Benutzererfahrung

Das Betrachten einer Website ist eigentlich wie di...

Die MySQL-Partitionstabelle ist nach Monaten klassifiziert

Inhaltsverzeichnis Erstellen einer Tabelle Zeigen...

Das WeChat-Applet ermöglicht horizontales und vertikales Scrollen

In diesem Artikelbeispiel wird der spezifische Co...

Beispielcode für die benutzerdefinierte Scroll-Ansicht des WeChat-Applets

Miniprogramm Benutzerdefinierte Scroll-View-Bildl...

Detaillierte Erklärung der Mixin-Verwendung in Vue

Inhaltsverzeichnis Vorwort 1. Was sind Mixins? 2....

Ein Beispiel für die Verwendung von CSS-Methoden zur Erzielung von Modularität

1. Was sind CSS-Methoden? CSS methodologies könne...

Erstellen eines sekundären Menüs mit JavaScript

In diesem Artikelbeispiel wird der spezifische Ja...

Informationen zum Fallstrickprotokoll der Vue3-Übergangsanimation

Inhaltsverzeichnis Hintergrund Problemort Weitere...

jQuery implementiert alle Auswahl- und umgekehrten Auswahloperationsfälle

In diesem Artikel wird der spezifische Code von j...

JavaScript-Makrotasks und Mikrotasks

Makrotasks und Mikrotasks JavaScript ist eine Sin...