Source: open-layers/ol-polyline.js

/**

 * @namespace WPGMZA

 * @module OLPolyline

 * @requires WPGMZA.Polyline

 */

(function($) {

	

	var Parent;

	

	WPGMZA.OLPolyline = function(row, olFeature)

	{

		var self = this;

		

		WPGMZA.Polyline.call(this, row);

		

		this.olStyle = new ol.style.Style();

		

		if(olFeature)

		{

			this.olFeature = olFeature;

		}

		else

		{

			var coordinates = [];

			

			if(row && row.points)

			{

				var path = this.parseGeometry(row.points);

				

				for(var i = 0; i < path.length; i++)

					coordinates.push(ol.proj.fromLonLat([

						parseFloat(path[i].lng),

						parseFloat(path[i].lat)

					]));

			}

			

			var params = this.getStyleFromSettings();

			this.olStyle = new ol.style.Style(params);

			

			this.olFeature = new ol.Feature({

				geometry: new ol.geom.LineString(coordinates)

			});

		}

		

		this.layer = new ol.layer.Vector({

			source: new ol.source.Vector({

				features: [this.olFeature]

			}),

			style: this.olStyle

		});

		

		this.layer.getSource().getFeatures()[0].setProperties({

			wpgmzaPolyling: this

		});

	}

	

	Parent = WPGMZA.Polyline;

		

	WPGMZA.OLPolyline.prototype = Object.create(Parent.prototype);

	WPGMZA.OLPolyline.prototype.constructor = WPGMZA.OLPolyline;

	

	WPGMZA.OLPolyline.prototype.getStyleFromSettings = function()

	{

		var params = {};

		

		if(this.settings.strokeOpacity)

			params.stroke = new ol.style.Stroke({

				color: WPGMZA.hexOpacityToRGBA(this.settings.strokeColor, this.settings.strokeOpacity),

				width: parseInt(this.settings.strokeWeight)

			});

			

		return params;

	}

	

	WPGMZA.OLPolyline.prototype.updateStyleFromSettings = function()

	{

		// Re-create the style - working on it directly doesn't cause a re-render

		var params = this.getStyleFromSettings();

		this.olStyle = new ol.style.Style(params);

		this.layer.setStyle(this.olStyle);

	}

	

	WPGMZA.OLPolyline.prototype.setEditable = function(editable)

	{

		

	}

	

	WPGMZA.OLPolyline.prototype.setPoints = function(points)

	{

		if(this.olFeature)

			this.layer.getSource().removeFeature(this.olFeature);

		

		var coordinates = [];

		

		for(var i = 0; i < points.length; i++)

			coordinates.push(ol.proj.fromLonLat([

				parseFloat(points[i].lng),

				parseFloat(points[i].lat)

			]));

		

		this.olFeature = new ol.Feature({

			geometry: new ol.geom.LineString(coordinates)

		});

		

		this.layer.getSource().addFeature(this.olFeature);

	}

	

	WPGMZA.OLPolyline.prototype.toJSON = function()

	{

		var result = Parent.prototype.toJSON.call(this);

		var coordinates = this.olFeature.getGeometry().getCoordinates();

		

		result.points = [];

		

		for(var i = 0; i < coordinates.length; i++)

		{

			var lonLat = ol.proj.toLonLat(coordinates[i]);

			var latLng = {

				lat: lonLat[1],

				lng: lonLat[0]

			};

			result.points.push(latLng);

		}

		

		return result;

	}

	

})(jQuery);