diff options
Diffstat (limited to 'extlib/leaflet/src/layer/vector/Polyline.js')
-rw-r--r-- | extlib/leaflet/src/layer/vector/Polyline.js | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/extlib/leaflet/src/layer/vector/Polyline.js b/extlib/leaflet/src/layer/vector/Polyline.js new file mode 100644 index 00000000..606d7d71 --- /dev/null +++ b/extlib/leaflet/src/layer/vector/Polyline.js @@ -0,0 +1,112 @@ +
+L.Polyline = L.Path.extend({
+ initialize: function(latlngs, options) {
+ L.Path.prototype.initialize.call(this, options);
+ this._latlngs = latlngs;
+ },
+
+ options: {
+ // how much to simplify the polyline on each zoom level
+ // more = better performance and smoother look, less = more accurate
+ smoothFactor: 1.0,
+ noClip: false,
+
+ updateOnMoveEnd: true
+ },
+
+ projectLatlngs: function() {
+ this._originalPoints = [];
+
+ for (var i = 0, len = this._latlngs.length; i < len; i++) {
+ this._originalPoints[i] = this._map.latLngToLayerPoint(this._latlngs[i]);
+ }
+ },
+
+ getPathString: function() {
+ for (var i = 0, len = this._parts.length, str = ''; i < len; i++) {
+ str += this._getPathPartStr(this._parts[i]);
+ }
+ return str;
+ },
+
+ getLatLngs: function() {
+ return this._latlngs;
+ },
+
+ setLatLngs: function(latlngs) {
+ this._latlngs = latlngs;
+ this._redraw();
+ return this;
+ },
+
+ addLatLng: function(latlng) {
+ this._latlngs.push(latlng);
+ this._redraw();
+ return this;
+ },
+
+ spliceLatLngs: function(index, howMany) {
+ var removed = [].splice.apply(this._latlngs, arguments);
+ this._redraw();
+ return removed;
+ },
+
+ _getPathPartStr: function(points) {
+ var round = L.Path.VML;
+
+ for (var j = 0, len2 = points.length, str = '', p; j < len2; j++) {
+ p = points[j];
+ if (round) p._round();
+ str += (j ? 'L' : 'M') + p.x + ' ' + p.y;
+ }
+ return str;
+ },
+
+ _clipPoints: function() {
+ var points = this._originalPoints,
+ len = points.length,
+ i, k, segment;
+
+ if (this.options.noClip) {
+ this._parts = [points];
+ return;
+ }
+
+ this._parts = [];
+
+ var parts = this._parts,
+ vp = this._map._pathViewport,
+ lu = L.LineUtil;
+
+ for (i = 0, k = 0; i < len - 1; i++) {
+ segment = lu.clipSegment(points[i], points[i+1], vp, i);
+ if (!segment) continue;
+
+ parts[k] = parts[k] || [];
+ parts[k].push(segment[0]);
+
+ // if segment goes out of screen, or it's the last one, it's the end of the line part
+ if ((segment[1] != points[i+1]) || (i == len - 2)) {
+ parts[k].push(segment[1]);
+ k++;
+ }
+ }
+ },
+
+ // simplify each clipped part of the polyline
+ _simplifyPoints: function() {
+ var parts = this._parts,
+ lu = L.LineUtil;
+
+ for (var i = 0, len = parts.length; i < len; i++) {
+ parts[i] = lu.simplify(parts[i], this.options.smoothFactor);
+ }
+ },
+
+ _updatePath: function() {
+ this._clipPoints();
+ this._simplifyPoints();
+
+ L.Path.prototype._updatePath.call(this);
+ }
+});
\ No newline at end of file |