polygon rotation
by tlebras
HTML
<link rel="stylesheet" href="http://openlayers.org/en/master/css/ol.css">
<script src="http://openlayers.org/en/master/build/ol.js"></script>
<body>
<div id="map" class="map"></div>
</body>
JavaScript
var view = new ol.View({
center: ol.proj.transform([0, 0], 'EPSG:4326', 'EPSG:3857'),
zoom: 4
});
var map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()})
],
view: view
});
var points = [[1,0],[1,-6],[-1,-6],[-1,0],[1,0] ];
var polygonCenter=[0,-3];
var getRotation = function(dx, dy) {
var rot = 0;
if (dx == 0 && dy == 0) return 0;
if (dy == 0)
rot = (dx > 0) ? 0 : Math.PI;
else if (dx == 0)
rot = (dy > 0) ? 0.5 * Math.PI : 1.5 * Math.PI;
else {
var rot = Math.atan(dy/dx);
if (dx < 0 && dy > 0) rot += Math.PI;
if (dx < 0 && dy < 0) rot += Math.PI;
if (dx > 0 && dy < 0) rot += 2 * Math.PI;
}
return rot;
};
var rotateTransform = function (array) {
var outArr=[];
for (var i = 0; i < array.length-1; i++) {
outArr.push([]);
var ptx = array[i][0];
var pty = array[i][1];
var rot = getRotation(ptx - polygonCenter[0], pty - polygonCenter[1]);
var rad = Math.sqrt(Math.pow(ptx - polygonCenter[0], 2) + Math.pow(pty -polygonCenter[1], 2));
var newRot = rot + 50;
outArr[i][0] = (polygonCenter[0] + rad * Math.cos(newRot));
outArr[i][1] = (polygonCenter[1] + rad * Math.sin(newRot));
}
outArr.push([])
outArr[array.length-1][0]=outArr[0][0];
outArr[array.length-1][1]=outArr[0][1];
return outArr;
};
var polygon = new ol.Feature({geometry: new ol.geom.Polygon([points])});
polygon.applyTransform(ol.proj.getTransform('EPSG:4326', 'EPSG:3857'));
// Create feature with polygon.
var feature = new ol.Feature(polygon);
// Create vector source and the feature to it.
var vectorSource = new ol.source.Vector();
vectorSource.addFeature(feature);
// Create vector layer attached to the vector source.
var vectorLayer = new ol.layer.Vector({
source: vectorSource
});
// Add the vector layer to the map.
map.addLayer(vectorLayer);