Anhand des folgenden Beispiels kann ich die Größe nach Maßstab und Herkunft ändern.
polygonFeature.geometry.resize(scale, origin);
vectorLayer.redraw();
Aber hat jemand Vorschläge oder Beispielcode, wie ich die Größe eines Polygons auf einer seiner Achsen ändern würde?
Zum Beispiel: Ich möchte die Größe des orangefarbenen Polygons auf etwas wie das rote Polygon ändern. Es bewegen sich also nur die Nord- und Südränder, während die Ost-West-Ränder konstant bleiben.
BEARBEITEN 1 Hier ein Anwendungsfall und Beispieldaten: Ein Benutzer möchte nur einen Teil des orangefarbenen Rechtecks, da er nur an der Küste interessiert ist und Satellitenanbieter ihm mehr für das gesamte Bild in Rechnung stellen. Der Benutzer muss angeben, welchen Teil des Bildes er bestellen möchte.
Obwohl ich nicht die gesamte Lösung mit Größengriffen benötige, brauche ich nur die Möglichkeit, die Höhe des Polygons zu ändern .
EDIT # 2: Vielleicht mache ich das falsch. Ich benötige eine Openlayers-Javascript-Lösung (Browser) und kann zum Ändern der Größe nicht zum Server zurückkehren. Vielleicht sollte ich Punkte entlang der Ost- und Westkante der Polygongeometrie interpolieren (schwarze Punkte). Erstellen Sie dann zwei Linien (grüne Linien), in denen der Benutzer ziehen kann, aber die Bewegung (Draging) auf diese interpolierten Punkte beschränkt. Wenn der Benutzer "fertig" ist, bekomme ich das verbleibende gelbe Polygon?
quelle
Antworten:
Das habe ich gesucht!
Beispiel: http://openlayers.org/dev/examples/transform-feature.html
quelle
Im allgemeinen Fall würde ich eine perspektivische Transformation verwenden, um Ihr ursprüngliches Viereck in ein Einheitsquadrat und wieder zurück zu transformieren.
Die grundlegenden Schritte sind:
Vorsichtsmaßnahmen:
Für die Arbeit, die Sie tun, sollten Sie keine seltsamen Fälle wie konkave Polygone haben. Ich bin mir nicht sicher, was mit Quads passieren würde, die die Polarregionen abdecken. Ich vermute, Sie müssten es zuerst in eine Polarprojektion projizieren.
Der in Schritt 1 veröffentlichte Link führt zu einem mathematikintensiven Papier und etwas C ++ - vorlagenintensivem Code. Es sollte jedoch nicht zu schwierig sein, herauszufinden, wie der Code funktioniert, da es sich nur um eine kleine Funktion am Anfang der Datei handelt .
quelle