2017-08-08 1 views
1

Je souhaite superposer des photographies aériennes historiques sur une carte, en utilisant la rotation d'image disponible dans IIIF. Le problème que je suis confronté est que l'utilisation de code comme dans http://jsfiddle.net/jamesinealing/tr7obasm/, j'ai besoin de calculer manuellement les points NW et SE, qui modifient en fonction de la rotation, avant de placer l'image sur la carte. Ce que je cherche à faire est de calculer les dimensions en pixels de la nouvelle image pivotée (le cadre de délimitation, si vous voulez) et ensuite les utiliser pour obtenir au moins quelque chose d'approximatif pour les coordonnées de latitude, que je peux alors tordre.Comment calculer la hauteur et la largeur d'une image pivotée IIIF

mon code de test pour le calcul est à http://jsfiddle.net/jamesinealing/ehp65gy1/ (basé sur 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; 

Le problème est qu'il ne fonctionne que jusqu'à un angle de 90 degrés, tandis que la rotation de IIIF est une valeur de 0 à 359. J'apprécie que toute valeur de 180 ou plus donnera les mêmes résultats, donc une sorte de module est nécessaire de toute façon, mais je ne comprends pas pourquoi elle ne fonctionne pas sur 90 degrés!

Répondre

1

Les dimensions de la nouvelle boîte ne varient que selon angle % 90, soit entre 300 * 224 et 224 * 300 sur une ellipse, de sorte que vous pouvez simplement utiliser Math.abs avec l'angle ajusté et quelques if déclarations de travailler dans quel sens il devrait être.

+0

Super, merci pour l'explication claire. Je suis sûr qu'il existe des moyens plus astucieux de le faire, mais c'est mon code de travail - http://jsfiddle.net/jamesinealing/ehp65gy1/5/ – jamesinealing

+0

Et en action sur une superposition de carte en direct - http://jsfiddle.net/jamesinealing/p0qft0hs – jamesinealing