Vue + Openlayer realisiert den Drag- und Rotationsverformungseffekt von Grafiken

Vue + Openlayer realisiert den Drag- und Rotationsverformungseffekt von Grafiken

Vorwort

Openlayer verfügt über ein eigenes Erweiterungs-Plugin ol-ext, das wir hier verwenden, um Grafikoperationen zu implementieren: Ziehen, Drehen, Zoomen, Strecken, Verschieben usw. sowie dessen Ereignisüberwachung. Schließlich müssen wir die Daten nach dem Zeichnen im Backend speichern und in der Datenbank speichern.

Ressourcen zum Thema

1. ol-ext offizielle Adresse: Eingang

2. ol-ext entsprechende Datenadresse: Eintrag

3.ol-ext Quellcode Gitee-Adresse: Eintrag

4. Openlayers neueste offizielle Website: Eingang

5. API der offiziellen Openlayers-Website: Eintrag

Ergebnisse erzielen

Drehen, ziehen

Abbildung 1: Implementierungseffekt

Abbildung 2: Rotationseffekt

Abbildung 3: Links- und Rechtsbewegungseffekt

Implementierungsschritte

1. Führen Sie Openlayers in Vue ein

npm ich ol --speichern

Anhang: npm lädt den angegebenen Versionsbefehl herunter, Sie können ihn bei Bedarf verwenden

npm install --save-dev [email protected]

2. Führen Sie das OpenLayers-Erweiterungspaket ol-ext in Vue ein

npm installiere ol-ext --save

Anhang: npm lädt den angegebenen Versionsbefehl herunter, Sie können ihn bei Bedarf verwenden

npm install --save [email protected]

3. Erstellen Sie einen Kartencontainer

<Vorlage>
  <div id="Karte" Klasse="Karte"></div>
</Vorlage>

4. Führen Sie eine spezifische Konfiguration in js ein. Entsprechend Ihren spezifischen Änderungen füge ich hier meine eigene ein

ol bezogen:

importiere "ol/ol.css";
Ansicht aus „ol/View“ importieren;
Karte aus „ol/Map“ importieren;
importiere TileLayer aus „ol/layer/Tile“;
Overlay aus „ol/Overlay“ importieren;
importiere XYZ aus „ol/source/XYZ“;
importiere { Vektor als SourceVec, Cluster, Vektor als VectorSource } aus "ol/source";
importiere { Feature } von "ol";
importiere { Vektor als LayerVec, Vektor als VectorLayer } aus "ol/layer";
importiere { Punkt, Linienzug, Polygon } aus "ol/geom";
 
importieren {
    Stil,
    Symbol,
    Füllen,
    Schlaganfall,
    Text,
    Kreis als CircleStyle,
  } von "ol/style";
  importiere { OSM, TileArcGISRest } aus "ol/source";

ol-ext bezogen:

importiere ExtTransform aus „ol-ext/interaction/Transform“

5. Implementieren Sie die Map-Methode:

Daten() {
      zurückkehren {
        Karte: null,
        Zentrum: [116.39702518856394, 39.918590567855425], //Längen- und Breitengrad der Verbotenen Stadt in Peking ZentrumGröße: 11,5,
        Projektion: "EPSG:4326",
 
    }
}
montiert() {
  dies.initMap()
}
Methoden: {
      //Karte initialisieren initMap() {
        // Rendere die Karte var layers = [
          //Dunkelblauer Hintergrund// new TileLayer({
          // Quelle: neues XYZ({
          // URL:
          // "https://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}",
          // }),
          // }),
          // Hintergrund initialisieren // new TileLayer({
          // Quelle: neues OSM(),
          // })
          neue Kachelebene({
            Titel: "Straßenkarte",
            Quelle: neues XYZ({
              url: "http://localhost:8888/haoxing-map/sosomaps/roadmap/{z}/{x}/{y}.jpg", //zwh lokale Verwendung}),
          }),
        ];
 
        diese.map = neue Map({
          Schichten: Schichten,
          Ziel: "Karte",
          Ansicht: neue Ansicht({
            Zentrum: dieses.Zentrum,
            Projektion: diese.Projektion,
            Zoom: diese.Mittelgröße,
            maxZoom: 17,
            minZoom: 8,
          }),
        });
      },

6. Polygondaten zur Karte hinzufügen

montiert() {
 dies.initMap()
 dies.createPolygon()
},
 Methoden: {    
 
    //Erstelle ein Polygon createPolygon() {
        //Füge eine Ebene hinzu und lege den Punktbereich fest const polygon = new Feature({
          Geometrie: neues Polygon([
            [
              [116.39314093500519,40.0217660530101],
              [116.47762344990831,39.921746523871924],
              [116.33244947314951,39.89892653421418],
              [116.30623076162784,40.00185925352143],
            ]
          ]),
        })
        //Stil festlegen polygon.setStyle(new Style({
          Strich: neuer Strich({
            Breite: 4,
            Farbe: [255, 0, 0, 1],
          }),
        }))
        //Fügen Sie die Grafiken der Karte hinzu this.map.addLayer(new VectorLayer({
          Quelle: neue Vektorquelle ({
            Funktionen: [Polygon],
          }),
        }))
      },
 
}

7. Fügen Sie der Karte spezifische Betriebsmethoden und Effekte hinzu 

montiert() {
  dies.initMap()
  dies.createPolygon()
  dies.onEdit()
},
//Operationsereignis onEdit() {
   const transform = neue ExtTransform({
       enableRotatedTransform: false,
       Treffertoleranz: 2,
       übersetzen: true, // ziehen strecken: false, // strecken skalieren: true, // skalieren drehen: true, // drehen translateFeature: false,
       noFlip: wahr,
       // Ebenen: [],
    })
   this.map.addInteraction(transformieren)
 
 
  //Startereignis transform.on(['rotatestart','translatestart'], function(e){
          // Drehung
          let startangle = e.feature.get('angle')||0;
          // Übersetzung
          konsole.log(1111);
          Konsole.log(Startwinkel);
        });
  //Rotation transform.on('rotierend', Funktion (e) {
          konsole.log(2222);
          console.log("drehen: "+((e.angle*180/Math.PI -180)%360+180).toFixed(2));
          konsole.log(e);
        });
 //Verschieben transform.on('translating', function (e){
          konsole.log(3333);
          Konsole.log(e.delta);
          konsole.log(e);
 
        });
 //Drag-Ereignis transform.on('scaling', function (e){
          konsole.log(4444);
          Konsole.log(z. B. Maßstab);
          konsole.log(e);
        });
  //Ereignisende transform.on(['rotateend', 'translateend', 'scaleend'], function (e) {
          konsole.log(5555);
        });
 
},

Dies ist das Ende dieses Artikels über Vue+Openlayer zum Erzielen von Drag- und Rotationsverformungseffekten von Grafiken. Weitere verwandte Vue Openlayer-Inhalte 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:
  • Vue verwendet Openlayers zum Laden von Tiandi Map und Amap
  • Realisieren Sie Kartenaggregations- und Streueffekte basierend auf Vue + OpenLayer
  • Openlayers zeichnet Verwaltungsabteilungen im Vue-Projekt
  • Vue+Openlayers benutzerdefinierte Track-Animation
  • Vue verwendet OpenLayers, um bewegte Punktanimationen zu implementieren

<<:  Detaillierte Erklärung der MySQL DEFINER-Verwendung

>>:  Linux-Betrieb und -Wartung – Tutorial zur grundlegenden Datenträgerverwaltung

Artikel empfehlen

Implementierungsschritte der MySQL-Master-Slave-Replikation

Inhaltsverzeichnis MySQL Master-Slave-Replikation...

JavaScript-Puzzlespiel

In diesem Artikelbeispiel wird der spezifische Ja...

Beispieloperation MySQL Kurzlink

So richten Sie einen MySQL-Kurzlink ein 1. Überpr...

mysql5.7-Remotezugriffseinstellungen

Das Einrichten des Fernzugriffs in mysql5.7 funkt...

Entwicklungsdetails von Vue3-Komponenten

Inhaltsverzeichnis 1. Einleitung 2. Komponentenen...

Vier Möglichkeiten, CSS und HTML zu kombinieren

(1) Jedes HTML-Tag hat ein Attribut style, das CS...

Einfache Methode zur Installation von MySQL unter Linux

Bei der Onlinesuche nach Methoden zur Installatio...

Detaillierte Erklärung zum Ändern des Standardports von nginx

Finden Sie zunächst heraus, wo sich die Konfigura...

Zusammenfassung der Zeilenumbruchprobleme bei Textbereichen in HTML

Kürzlich stieß ich auf das Problem, ob die Daten b...

Vue einfache Implementierung einer Plattenspielerlotterie

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