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);