Drei häufige Verwendungen von OpenLayers6-Karten-Overlays (Markierungstext im Popup-Fenster)

Drei häufige Verwendungen von OpenLayers6-Karten-Overlays (Markierungstext im Popup-Fenster)

1. Schreiben Sie vor

Es gibt drei übliche Kartenüberlagerungen: popup彈窗, label標注信息, text文本信息usw.
Im vorherigen Artikel wurden einige Eigenschaften, Methoden, Ereignisse usw. von Overlays besprochen. In diesem Artikel werden hauptsächlich die drei am häufigsten verwendeten Fälle von Overlays behandelt. Weitere Informationen finden Sie im vorherigen Artikel openlayers6 [8] Detaillierte Erläuterung der Kartenüberlagerung. Diese beiden Artikel werden verknüpft sein.
popup彈窗sind ein häufig auftretender Bedarfsfall. Lassen Sie uns daher separat darüber sprechen, um die Karte anschaulicher zu gestalten! ! !
Sie müssen verstehen: overlay 然后通過map進行綁定,承載在頁面的dom 上的元素.

2. Overlay zur Implementierung eines Popup-Fensters

2.1 Detaillierte Erläuterung der addPopup () -Methode der Vue-Seite

①: Erstellen Sie eine new Overlay() Instanz und legen Sie die zugehörigen Eigenschaften fest. Das Element ist an das DOM des äußersten Popup-Fensters der Seite gebunden. ②: Fügen Sie der Seite über map.addOverlay(this.overlay) das Overlay-Popup-Fenster hinzu. ③: Fügen Sie closer.onclick ein x hinzu, um das Popup-Fenster zu schließen. ④: Klicken Sie über this.map.on("singleclick", function(evt) auf die Karte, um den Popup-Fenstereffekt auszulösen.

Der spezifische Code lautet wie folgt:

addPopup() {
    // Verwenden Sie Variablen, um das für das Popup-Fenster erforderliche DOM-Objekt zu speichern. var container = document.getElementById("popup");
    var closer = document.getElementById("popup-closer");
    var Inhalt = document.getElementById("Popup-Inhalt");

    // Ein Popup-Overlay-Objekt erstellen this.overlay = new Overlay({
        element: container, //Overlay-Objekt und DOM-Objekt binden autoPan: true, //Definieren, dass das Popup-Fenster beim Klicken auf die Kante möglicherweise nicht vollständig eingestellt wird autoPanAnimation: {
            Dauer: 250 //Die Animationszeit des automatischen Schwenkeffekts beträgt 9 Millisekunden)
        }
    });
    // Das Popup-Fenster zur Karte hinzufügen this.map.addOverlay(this.overlay);

    lass _das = dies;
    /**
     * Fügen Sie eine Funktion hinzu, die auf das Schließen des Popup-Fensters reagiert*/
    näher.onclick = Funktion() {
        _that.overlay.setPosition(undefiniert);
        näher.unschärfe();
        gibt false zurück;
    };
    /**
     * Fügen Sie eine Click-Map-Antwortfunktion hinzu, um Popup-Aktionen zu verarbeiten*/
    this.map.on("Einzelklick", Funktion(evt) {
        Konsole.log(evt.Koordinate);
        lass Koordinate = transformieren(
            evt.Koordinate,
            "EPSG:3857",
            „EPSG:4326“
        );
        // Klicken Sie auf das Lineal (hier ist es das Lineal (Meter), nicht Breiten- und Längengrad);
        let hdms = toStringHDMS(toLonLat(evt.coordinate)); // Zur Anzeige in Längen- und Breitengrad umwandeln content.innerHTML = `
        <p>Sie haben hier geklickt:</p>
        <p>Breitengrad und Längengrad: <p><code> ${hdms} </code> <p>
        <p>Koordinaten:</p>X: ${coordinate[0]} &nbsp;&nbsp; Y: ${coordinate[1]}`;
        _that.overlay.setPosition(evt.coordinate); //Das Overlay an den angegebenen x,y-Koordinaten anzeigen});
}

Wirkung

Bildbeschreibung hier einfügen

2.2 Auswirkung einer falschen AutoPan-Eigenschaft

Klicken Sie ganz nach rechts auf den Bildschirm. Sie sehen, dass sich die Karte nicht an die Position des Mausklicks anpasst.

Bildbeschreibung hier einfügen

3. Overlay zur Implementierung von Etiketteninformationen

Vue-Seite

addMarker() {
    var marker = neues Overlay({
        Position: fromLonLat([104.043505, 30.58165]),
        Positionierung: "Mitte-Mitte",
        Element: document.getElementById("Markierung"),
        stopEvent: false
    });
    diese.map.addOverlay(Markierung);
},

Bildbeschreibung hier einfügen

4 Overlay implementiert Textinformationen

Vue-Seite

Text hinzufügen() {
    var textInfo = neues Overlay({
        Position: fromLonLat([104.043505, 30.58165]),
        Offset: [20, -20],
        Element: document.getElementById("textInfo")
    });
    diese.map.addOverlay(textInfo);
},

Bildbeschreibung hier einfügen

5. Den kompletten Code anhängen

<Vorlage>
    <div id="app">
        <div id="Karte" ref="Karte"></div>
        <div id="Markierung"></div>
        <div id="textInfo">Ich bin Textinformation</div>
        <div id="popup" Klasse="ol-popup">
            <a href="#" rel="external nofollow" id="popup-closer" class="ol-popup-closer"></a>
            <div id="Popup-Inhalt" Klasse="Popup-Inhalt"></div>
        </div>
    </div>
</Vorlage>

<Skript>
importiere "ol/ol.css";
importiere { Karte, Ansicht, Koordinate } von "ol";
importiere { toStringHDMS } von "ol/coordinate";
importiere TileLayer aus „ol/layer/Tile“;
importiere XYZ aus „ol/source/XYZ“;
Overlay aus „ol/Overlay“ importieren;
importiere { fromLonLat, transform, toLonLat } von "ol/proj";

// Implementierung des Popup-Fensters export default {
    Name: "Dashboard",
    Daten() {
        zurückkehren {
            Karte: null,
            Overlay: null
        };
    },
    Methoden: {
        initMap() {
            let target = "map"; //Binden an die ID des Seitenelements zum Rendern let tileLayer = new TileLayer({
                Quelle: neues XYZ({
                    URL:
                        "http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}"
                })
            });
            let view = neue Ansicht({
                // Projektion: "EPSG:4326", //Verwende dieses Koordinatensystem als Mittelpunkt: fromLonLat([104.912777, 34.730746]), //Koordinaten des Kartenmittelpunkts zoom: 4.5 //Zoomstufe });
            diese.map = neue Map({
                Ziel: Ziel, //DOM-Elemente zum Rendern von Ebenen binden: [Kachelebene], //Datenquelle der Karte konfigurieren Ansicht: Ansicht //Anzeigeoptionen der Karte konfigurieren (Koordinatensystem, Mittelpunkt, Zoomstufe usw.)
            });
        },
        /**
         * Der erste Typ: Punktmarkierung
         * Erstellen Sie eine Anmerkungsinformation */
        addMarker() {
            var marker = neues Overlay({
                Position: fromLonLat([104.043505, 30.58165]),
                Positionierung: "Mitte-Mitte",
                Element: document.getElementById("Markierung"),
                stopEvent: false
            });
            diese.map.addOverlay(Markierung);
        },
        /**
         * Der zweite Typ: Textbeschriftung
         * Informationen zu Beschriftungsanmerkungen erstellen */
        Text hinzufügen() {
            var textInfo = neues Overlay({
                Position: fromLonLat([104.043505, 30.58165]),
                Offset: [20, -20],
                Element: document.getElementById("textInfo")
            });
            diese.map.addOverlay(textInfo);
        },
        /**
         * Der dritte Typ: Popup-Fenster
         * Eine Popup-Nachricht erstellen */
        addPopup() {
            // Verwenden Sie Variablen, um das für das Popup-Fenster erforderliche DOM-Objekt zu speichern. var container = document.getElementById("popup");
            var closer = document.getElementById("popup-closer");
            var Inhalt = document.getElementById("Popup-Inhalt");

            // Ein Popup-Overlay-Objekt erstellen this.overlay = new Overlay({
                element: container, //Overlay-Objekt und DOM-Objekt binden autoPan: false, //Definieren, dass das Popup-Fenster beim Klicken auf die Kante möglicherweise nicht vollständig eingestellt wird autoPanAnimation: {
                    Dauer: 250 //Die Animationszeit des automatischen Schwenkeffekts beträgt 9 Millisekunden)
                }
            });
            // Das Popup-Fenster zur Karte hinzufügen this.map.addOverlay(this.overlay);

            lass _das = dies;
            /**
             * Fügen Sie eine Funktion hinzu, die auf das Schließen des Popup-Fensters reagiert*/
            näher.onclick = function() {
                _that.overlay.setPosition(undefiniert);
                näher.unschärfe();
                gibt false zurück;
            };
            /**
             * Fügen Sie eine Klick-Antwortfunktion hinzu, um Popup-Aktionen zu verarbeiten */
            this.map.on("Einzelklick", Funktion(evt) {
                Konsole.log(evt.Koordinate);
                lass Koordinate = transformieren(
                    evt.Koordinate,
                    "EPSG:3857",
                    „EPSG:4326“
                );
                // Klicken Sie auf das Lineal (hier ist es das Lineal (Meter), nicht Breiten- und Längengrad);
                let hdms = toStringHDMS(toLonLat(evt.coordinate)); // Zur Anzeige in Längen- und Breitengrad umwandeln content.innerHTML = `
                <p>Sie haben hier geklickt:</p>
                <p>Breitengrad und Längengrad: <p><code> ${hdms} </code> <p>
                <p>Koordinaten:</p>X: ${coordinate[0]} &nbsp;&nbsp; Y: ${coordinate[1]}`;
                _that.overlay.setPosition(evt.coordinate); //Das Overlay an den angegebenen x,y-Koordinaten anzeigen});
        }
    },
    montiert() {
        dies.initMap();
        // Popup-Fenstermethode initialisieren this.addText();
        dies.addMarker();
        dies.addPopup();
    }
};
</Skript>
<style lang="scss" scoped>
html,
Körper {
    Höhe: 100%;
}
#app {
    Mindesthöhe: berechnet (100vh – 50px);
    Breite: 100 %;
    Position: relativ;
    Überlauf: keiner;
    #Karte {
        Höhe: 888px;
        Mindesthöhe: berechnet (100vh – 50px);
    }
}
.ol-popup {
    Position: absolut;
    Hintergrundfarbe: weiß;
    -webkit-filter: Schlagschatten(0 1px 4px rgba(0, 0, 0, 0,2));
    Filter: Schlagschatten (0 1px 4px rgba (0, 0, 0, 0,2));
    Polsterung: 15px;
    Rahmenradius: 10px;
    Rand: 1px durchgezogen #cccccc;
    unten: 12px;
    links: -50px;
}
.ol-popup:nach,
.ol-popup:vor {
    oben: 100 %;
    Rand: durchgehend transparent;
    Inhalt: " ";
    Höhe: 0;
    Breite: 0;
    Position: absolut;
    Zeigerereignisse: keine;
}
.ol-popup:nach {
    Farbe der oberen Umrandung: weiß;
    Rahmenbreite: 10px;
    links: 48px;
    Rand links: -10px;
}
.ol-popup:vor {
    Farbe des oberen Rahmens: #cccccc;
    Rahmenbreite: 11px;
    links: 48px;
    Rand links: -11px;
}
.ol-popup-closer {
    Textdekoration: keine;
    Position: absolut;
    oben: 2px;
    rechts: 8px;
}
.popup-inhalt {
    Breite: 400px;
}
.ol-popup-closer:nach {
    Inhalt: "✖";
}
#Markierung {
    Breite: 20px;
    Höhe: 20px;
    Hintergrund: rot;
    Randradius: 50 %;
}
#textInfo {
    Breite: 200px;
    Höhe: 40px;
    Zeilenhöhe: 40px;
    Hintergrund: Burlywood;
    Farbe: gelb;
    Textausrichtung: zentriert;
    Schriftgröße: 20px;
}
</Stil>

Dies ist das Ende dieses Artikels über die drei häufigsten Verwendungen von OpenLayers6-Karten-Overlays (Markierungstext für Popup-Fenster). Weitere relevante Inhalte zu Vue OpenLayer-Popup-Karten-Overlays finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung der Kartenüberlagerung in OpenLayers6
  • Openlayers zeichnet Kartenanmerkungen
  • Lösen Sie das Problem beim Laden der Vektorkartenquelle in OpenLayers 3

<<:  Verwendung des Linux-Befehls usermod

>>:  Vollständige Schritte zum Implementieren des Standort-Punch-Ins mithilfe räumlicher MySQL-Funktionen

Artikel empfehlen

Vue3 implementiert ein Beispiel für eine Nachrichtenkomponente

Inhaltsverzeichnis Komponentendesign Definieren d...

Detaillierte Erklärung der JavaScript-Funktion dieses Zeigeproblems

Inhaltsverzeichnis 1. Die Richtung davon in der F...

So öffnen Sie das MySQL-Binlog-Protokoll

Binlog ist eine binäre Protokolldatei, die alle M...

Vue implementiert ein einfaches Einkaufswagenbeispiel

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Erklärung des Prinzips und der Verwendung von MySQL-Ansichten

Dieser Artikel veranschaulicht anhand von Beispie...

Der URL-Wert des SRC- oder CSS-Hintergrundbildes ist der Base64-codierte Code

Möglicherweise ist Ihnen aufgefallen, dass auf die...

Was macht die MySQL-Datenbank?

MySQL ist ein relationales Datenbankverwaltungssy...

Unterschied zwischen MySQL-Update-Set und und

Inhaltsverzeichnis Problembeschreibung Ursachenan...

So installieren Sie die Odoo12-Entwicklungsumgebung unter Windows 10

Vorwort Da viele Freunde sagen, dass sie keinen M...