/**
* @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);