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

So verwenden Sie Node zum Implementieren des statischen Datei-Cachings

Inhaltsverzeichnis Cache Klassifizierung des Cach...

CocosCreator ScrollView-Optimierungsreihe: Frame-Laden

Inhaltsverzeichnis 1. Einleitung 2. Analyse des f...

Detaillierte Erklärung zur Verwendung der Element-el-button-Button-Komponente

1. Hintergrund Schaltflächen werden sehr häufig v...

Lösung für die nicht angezeigte IP-Adresse unter Linux

Inhaltsverzeichnis Vorwort Lösung: Schritt 1 Schr...

Analyse des Sperrmechanismus der MySQL-Datenbank

Bei gleichzeitigen Zugriffen kann es zu nicht wie...

So installieren und speichern Sie die PostgreSQL-Datenbank in Docker

Überspringen Sie die Docker-Installationsschritte...

Ursachen und Lösungen für MySQL-Deadlocks

Die Datenbank ist wie das Betriebssystem eine gem...

Eine kleine Einführung in die Verwendung der Position in HTML

Ich habe gestern gerade etwas HTML gelernt und kon...

Tipps zur Verwendung von DIV-Containern mit fester Höhe in IE6 und IE7

Es gibt viele Unterschiede zwischen IE6 und IE7 in...