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