React+Amap ermittelt Breiten- und Längengrad in Echtzeit und lokalisiert die Adresse

React+Amap ermittelt Breiten- und Längengrad in Echtzeit und lokalisiert die Adresse

1. Führen Sie eine vorläufige Konfiguration gemäß dem offiziellen Tutorial von Amap durch.
2. Schließen Sie die Kartenerstellung ab, indem Sie auf das offizielle Beispielcenter verweisen.

Schauen wir uns als nächstes zunächst die Renderings an:

1. Initialisieren Sie die Karte

Nachdem der Kartencontainer erstellt wurde, müssen während der Initialisierung einige Standardparameter konfiguriert werden. Hier sind einige häufig verwendete. Sie können auf die API verweisen, um weitere Effekte hinzuzufügen.

DOM: <div id='Kartencontainer'>
        //Map-Container</div>
    
//Definiere eine Kartenklasse class GeoMap {
    Konstruktor() {
        dies.el = "Kartencontainer"
        this.defaultConfig = { //Standardkonfiguration zoom: 16, //Standardzoomstufe touchZoomCenter: 1, //Bei Zoomstufe 1 wird der Kartenmittelpunkt zum Zoomen verwendet resizeEnable: true, //Größenänderung des Kartencontainers überwachen doubleClickZoom: true, //Doppelklicken, um in die Karte zu zoomen}
        this.map = null // Karteninstanz this.mapMove = false // Bewegt sich die Karte? this.centerPixel = { y: '-999', x: '-999' } // Standardstandort des Punkts }
    // Initialisiere die Karte initFn() {
        dies.createMap()
        // ...
    }
    // Erstelle eine Instanz createMap() {
        diese.map = neue AMap.Map(diese.el, diese.defaultConfig)
        // Fügen Sie der Karte Ihren bevorzugten Stil (Hintergrundfarbe) hinzu
        diese.map.setMapStyle('amap://styles/28d5c5df182464d14316bfa41383096c')
    }
    // ...
 }
 exportiere standardmäßig neue GeoMap()

2. Kartenpunkte

Zeichnen Sie zunächst einen Mittelpunkt auf der Karte. Der zu erzielende Effekt ist:

  1. Kann mich nicht durch Ziehen der Karte bewegen
  2. In der Mitte des Kartencontainers

Die Kartenbox wird als übergeordnetes Element verwendet und absolut positioniert, um den ersten Punkt zu erreichen.

    Dom: <div id='map_container'> //Kartencontainer<div id='center_icon' style={{left: `${instance.centerPixel.x}px`, top: `${instance.centerPixel.y}px` }}>
            <img src='扎点图片' /> // Am Ende des Artikels gibt es eine Einführung in die 扎点-Animation</div>
       </div>
    css: #map_container {
            biegen: 1;
            Position: relativ;
            #center_icon {
                Position: absolut;
                Z-Index: 101;
                >img{  
                    Breite: 52px;
                    Höhe: 64px;
                    // --------Der folgende Code wird unten ausführlich vorgestellt---------
                    Position: relativ;
                    oben: -64px;
                    links: -26px;
                }
            }
         }

Dann müssen Sie die linken und oberen Werte des Punkts festlegen. Wie kann der Pixelwert des Punkts dynamisch festgelegt werden? Hier verwenden wir die Gaode-API, getCenter(), um die Längen- und Breitengradkoordinaten des Kartenmittelpunkts abzurufen, lngLatToContainer(), um die Längen- und Breitengradkoordinaten der Karte in die Pixelkoordinaten des Kartencontainers umzuwandeln

    setCenterIcon() {
        lass lnglat = this.map.getCenter()
        let pixel = this.map.lngLatToContainer(lnglat)
        this.centerPixel = Pixel
    }

Das gepunktete Bild muss relativ auf seiner eigenen Höhe oben positioniert werden: - seiner eigenen Höhe links: - seiner eigenen Breite/2. Der Grund ist: Der Positionierungspunkt befindet sich von der oberen linken Ecke des Felds zur Mitte (gepunktetes Feld), daher müssen wir das (gepunktete Feld) an die Position (durchgezogenes Feld) verschieben, damit die Position des Punkts genau ist. Bitte beachten Sie die folgende Abbildung:

3. Positionierung aktivieren

Müssen umgesetzt werden:

  • Rufen Sie die Kartenseite auf, um die Positionierungsfunktion automatisch einzuschalten
  • Der Standort nach erfolgreicher Positionierung wird als Mittelpunkt der Karte verwendet

Beide werden über die API implementiert, was relativ einfach ist. Wenn die Positionierung fehlschlägt, wird eine chinesische Eingabeaufforderung zurückgegeben

    Standort abrufen() {
        const mapError = neue Karte([
            ['Abrufen des IP-Standorts ist fehlgeschlagen.', 'IP-genaue Ortung ist fehlgeschlagen'],
            ['Browser unterstützt keine HTML5-Geolokalisierung.', 'Browser unterstützt keine native Positionierungsschnittstelle'],
            ['Geolokalisierungsberechtigung verweigert.', 'Der Browser verbietet Standortanfragen in nicht sicheren Domänen'],
            ['Zeitüberschreitung bei Geolokalisierung abrufen.', 'Zeitüberschreitung bei Browserstandort'],
            ['Die Geolokalisierung konnte nicht abgerufen werden.', 'Die Positionsbestimmung ist fehlgeschlagen']
        ])
        dieses.map.plugin('AMap.Geolocation', () => {
            const geolocation = neue AMap.Geolocation({
                enableHighAccuracy: true, // Gibt an, ob eine hochpräzise Positionierung verwendet werden soll. timeout: 30000, // Positionierung nach n Sekunden beenden. showButton: false, // Positionierungsschaltfläche anzeigen. showMarker: true, // Nach erfolgreicher Positionierung Punktmarkierung an der lokalisierten Position anzeigen. showCircle: false, // Nach erfolgreicher Positionierung einen Kreis verwenden, um den Genauigkeitsbereich der Positionierung anzuzeigen. panToLocation: true, // Nach erfolgreicher Positionierung die lokalisierte Position als Mittelpunkt der Karte verwenden ---
                zoomToAccuracy: true, //Passe das Sichtfeld der Karte so an, dass die Positionierungsposition und der Genauigkeitsbereich sichtbar sind})
            this.map.setZoom(16) // Legt das anfängliche Zoomverhältnis fest, wenn nach einer Änderung des Zoomverhältnisses die Position geändert wird. this.map.addControl(geolocation) // Steuerelement hinzufügen geolocation.getCurrentPosition() // Automatische Positionierung beim Aufrufen der Seite AMap.event.addListener(geolocation, 'complete', (result) => {
                // Hier keine Daten abrufen, da die zurückgegebenen Breiten- und Längengrade sowie die genaue Adresse große Abweichungen aufweisen --- weiter unten finden Sie eine Einführung zum Abrufen der genauen Adresse})
            AMap.event.addListener(geolocation, 'error', (err) => { // Fehlermeldung für fehlgeschlagene Positionierung let msg = mapError.get(err.message) || err.message
                Konsole.log(Nachricht);
            })
        })
    }

4. Kartenänderungen überwachen

Überwachen Sie Kartenänderungen durch API-Aufrufe: Verschieben, Verschieben des Endes, Zoomen, Ziehen usw.

    mapMove() {
        // * Karte verschieben this.map.on('mapmove', () => {
           this.mapMove = falsch
        })
        // * Kartenbewegung endet this.map.on('moveend', () => {
            this.mapMove = wahr
            this.getCenterAddress() // Adresse abrufen --- weitere Details folgen weiter unten})
    }

5. Holen Sie sich die detaillierte Adresse

Nach dem Verschieben der Karte wird die detaillierte Adresse über die API abgerufen. Lassen Sie uns zunächst über diese beiden APIs sprechen:

  1. AMap.PlaceSearch().searchNearBy() führt Umgebungsabfragen basierend auf Breiten- und Längengrad, Radius und Schlüsselwörtern des Mittelpunkts durch
  2. AMap.Geocoder().getAddress() Geokodierungs- und Reverse-Geokodierungsdienste, die zur Konvertierung zwischen Adressbeschreibungen und Koordinaten verwendet werden

🤔Es liegt auf der Hand, dass die zweite Methode genauer sein sollte als die erste, aber nach vielen Tests ist die erste genauer. Die beiden Methoden können kompatibel gemacht werden. Hier nehmen wir nur die erste als Beispiel.

    getCenterAddress() {
        lass lnglat = this.map.getCenter()
        AMap.service('AMap.PlaceSearch', () => {
            let placeSearch = neue AMap.PlaceSearch({
                    Seitengröße: 10,
                    Seitenindex: 1,
                    Kinder: 1,
                    Erweiterungen: „alle“,
                    Typ: ‚Zugangseinrichtungen|Ortsnamen-Adressinformationen|Behörden und gesellschaftliche Gruppen|Gebäude|Gewerbeparks|Aussichtspunkte|Abflug/Ankunft am Flughafen|Bahnhof|Hafenterminal|Fernbusbahnhof|U-Bahnhof|Stadtbahn-Haltestelle|Busbahnhof‘,
                })
            let center = [lnglat.lng, lnglat.lat]
            placeSearch.searchNearBy('', Zentrum, 50, (sta, Ergebnis) => {
                wenn (sta === 'abgeschlossen' und ergebnis.info === 'OK') {
                    // Das erste Element im Array result.poiList.pois ist die genaue erhaltene Adresse})
            })
    }

6. Punktanimation 😄

Fügen Sie dem Punkt, an dem sich die Karte bewegt, eine Auf- und Ab-Sprunganimation hinzu und brechen Sie die Animation beim Bewegen ab

    Dom: <img src='Animationsobjekt' className={Instance.mapMove ? 'pinAnima' : ''}/>
    
    CSS: 
        .pinAnima{
            Animation: Abpraller 0,75 s;
        }
        
    @keyframes hüpfen {
    0% {
        transformieren: übersetzenY(0)
    }
    50 % {
        transformieren: übersetzenY(-20px);
    }
    100 % {
        transformieren: übersetzenY(0)
    }
}

7. Ende

Die Idee ist nicht so kompliziert. Stellen Sie sich die Karte als einen Kastencontainer vor und den Mittelpunkt der Karte als Mittelpunkt des Kastens. Wenn Sie am [Mittelpunkt der Karte] bleiben, wird sie sich nicht bewegen. Wenn Sie die Karte bewegen, ermitteln Sie den Längen- und Breitengrad des [Mittelpunkts der Karte]. Wenn Sie einen bestimmten Standort festlegen, legen Sie den Längen- und Breitengrad auf den [Mittelpunkt der Karte] fest.

Es gibt auch einige andere Funktionen, wie z. B.: empfohlene Standorteinstellung, Routenzeichnung, Pfadplanung, Autofahren, Radaranimation usw. Wenn Sie interessiert sind, können Sie sie gemeinsam studieren. Bei der Ortung von Mobiltelefonen können auch einige Probleme auftreten, z. B. Ortungsfehler und Zeitüberschreitungen bei der Ortung. Diese können ebenfalls gemeinsam untersucht werden.

Oben sind die Details von React + Gaode Map aufgeführt, um Längen- und Breitengrad sowie Standortadresse in Echtzeit zu erhalten. Weitere Informationen zu React-Standortadressen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

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
  • Beispiel für den Mehrpunkt-Routenplanungsprozess des WeChat-Applets Amap – detaillierte Erläuterung
  • 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

<<:  Detaillierte Erläuterung zum Erstellen eines Nginx-Websiteservers basierend auf CentOS7 (einschließlich der Konfiguration eines virtuellen Webhosts)

>>:  Warum Entwickler Datenbanksperren im Detail verstehen müssen

Artikel empfehlen

Easyswoole Ein-Klick-Installationsskript und Pagoden-Installationsfehler

Häufig gestellte Fragen Wenn Sie easyswoole zum e...

Meta Viewport ermöglicht die Vollbildanzeige von Webseiten auf dem iPhone

In meiner Verzweiflung dachte ich plötzlich: Wie i...

JavaScript – Verwenden von Slots in Vue: Slot

Inhaltsverzeichnis Verwenden von Slots in Vue: Sl...

Docker-Port-Mapping und externe Unzugänglichkeitsprobleme

Der Docker-Container stellt Dienste bereit und la...

So verwenden Sie ein HTML-Formular mit mehreren Beispielen

Neun einfache Beispiele analysieren die Verwendun...

Vue implementiert die Drag & Drop-Funktion für Bilder

In diesem Artikelbeispiel wird der spezifische Co...

Kreativer Eröffnungseffekt durch die Kombination von CSS 3.0 mit Video

Ich möchte Ihnen einen kreativen Einstieg vorstel...

So realisieren Sie die vertikale Anordnung von Text mit CSS3

In einem aktuellen Projekt wollte ich Text vertik...

Einführung in Kubernetes (k8s)

Ich wollte schon immer Kubernetes lernen, weil es...