Ich möchte historische Luftbilder auf einer Karte mit der in IIIF verfügbaren Bilddrehung überlagern. Das Problem, mit dem ich konfrontiert bin, ist, dass Code wie in http://jsfiddle.net/jamesinealing/tr7obasm/ ich die NW- und SE-Punkte, die basierend auf der Rotation ändern, manuell vor dem Platzieren des Bildes auf der Karte berechnen müssen.So berechnen Sie die Höhe und Breite eines gedrehten IIIF-Bildes
Was ich zu tun versuche ist, die Pixelmaße des neuen gedrehten Bildes zu berechnen (die Bounding Box, wenn Sie möchten) und dann diese zu verwenden, um zumindest etwas Näherungswert für die Koordinaten zu erhalten zwicken.
Mein Testcode für die Berechnung ist bei http://jsfiddle.net/jamesinealing/ehp65gy1/ (basierend auf https://stackoverflow.com/a/17453766)
var rotation=30;
var angle=rotation;
// var angle=((360-rotation) % 180);
var imgWidth=300;
var imgHeight=224;
w = Math.sin(angle * Math.PI/180) * imgHeight + Math.cos(angle * Math.PI/180) * imgWidth;
h = Math.sin(angle * Math.PI/180) * imgWidth + Math.cos(angle * Math.PI/180) * imgHeight;
Das Problem ist, dass es nur bis zu einem Winkel von 90 Grad arbeitet nach oben, während die IIIF Rotation 0-359 jeder beliebigen Wert ist. Ich schätze, dass jeder Wert von 180 oder höher zu den gleichen Ergebnissen führt, also ist sowieso eine Art von Modul erforderlich, aber ich kann nicht verstehen, warum es nicht über 90 Grad arbeitet!
Großartig, danke für die klare Erklärung. Ich bin mir sicher, dass es bessere Möglichkeiten gibt, dies zu tun, aber das ist mein Arbeitscode - http://jsfiddle.net/jamesinealing/ehp65gy1/5/ – jamesinealing
Und in Aktion auf einem Live-Karten-Overlay - http://jsfiddle.net/Jamesinealing/p0qft0hs – jamesinealing