mirror of
https://github.com/Viglino/ol-ext.git
synced 2026-01-25 17:36:21 +00:00
[DOC]
This commit is contained in:
parent
e666974818
commit
b30897f1da
172
dist/ol-ext.js
vendored
172
dist/ol-ext.js
vendored
@ -7748,7 +7748,9 @@ ol.inherits(ol.interaction.LongTouch, ol.interaction.Interaction);
|
||||
/** Offset interaction for offseting feature geometry
|
||||
* @constructor
|
||||
* @extends {ol.interaction.Pointer}
|
||||
* @fires
|
||||
* @fires offsetstart
|
||||
* @fires offsetting
|
||||
* @fires offsetend
|
||||
* @param {any} options
|
||||
* @param {ol.layer.Vector | Array<ol.layer.Vector>} options.layers list of feature to transform
|
||||
* @param {ol.Collection.<ol.Feature>} options.features collection of feature to transform
|
||||
@ -7911,6 +7913,7 @@ ol.interaction.Offset.prototype.handleUpEvent_ = function(e) {
|
||||
};
|
||||
/**
|
||||
* @param {ol.MapBrowserEvent} e Event.
|
||||
* @private
|
||||
*/
|
||||
ol.interaction.Offset.prototype.handleMoveEvent_ = function(e) {
|
||||
var f = this.getFeatureAtPixel_(e);
|
||||
@ -11564,172 +11567,9 @@ ol.geom.LineString.prototype.splitAt = function(pt, tol)
|
||||
else return [this];
|
||||
}
|
||||
/** Offset a polyline
|
||||
* @param {Array<ol.coordinate} coords
|
||||
* @param {Array<ol.coordinate>} coords
|
||||
* @param {Number} offset
|
||||
* @return {Array<ol.coordinates} resulting coord
|
||||
*/
|
||||
ol.coordinate.offsetCoords = function (coords, offset)
|
||||
{
|
||||
// http://stackoverflow.com/a/11970006/796832
|
||||
// Accompanying Fiddle: http://jsfiddle.net/vqKvM/35/
|
||||
var path = [];
|
||||
var N = coords.length-1;
|
||||
var mi, mi1, li, li1, ri, ri1, si, si1, Xi1, Yi1;
|
||||
var isClosed = ol.coordinate.equal(coords[0],coords[N]);
|
||||
var max = N;
|
||||
if (!isClosed) {
|
||||
path.push(coords[0]);
|
||||
coords.push(coords[N])
|
||||
N++;
|
||||
max--;
|
||||
}
|
||||
for (var i = 0; i < max; i++) {
|
||||
i0 = i;
|
||||
i1 = (i+1) % N;
|
||||
i2 = (i+2) % N;
|
||||
mi = (coords[i1][1] - coords[i0][1])/(coords[i1][0] - coords[i0][0]);
|
||||
mi1 = (coords[i2][1] - coords[i1][1])/(coords[i2][0] - coords[i1][0]);
|
||||
li = Math.sqrt((coords[i1][0] - coords[i0][0])*(coords[i1][0] - coords[i0][0])+(coords[i1][1] - coords[i0][1])*(coords[i1][1] - coords[i0][1]));
|
||||
li1 = Math.sqrt((coords[i2][0] - coords[i1][0])*(coords[i2][0] - coords[i1][0])+(coords[i2][1] - coords[i1][1])*(coords[i2][1] - coords[i1][1]));
|
||||
ri = coords[i0][0]+offset*(coords[i1][1] - coords[i0][1])/li;
|
||||
ri1 = coords[i1][0]+offset*(coords[i2][1] - coords[i1][1])/li1;
|
||||
si = coords[i0][1]-offset*(coords[i1][0] - coords[i0][0])/li;
|
||||
si1 = coords[i1][1]-offset*(coords[i2][0] - coords[i1][0])/li1;
|
||||
Xi1 = (mi1*ri1-mi*ri+si-si1)/(mi1-mi);
|
||||
Yi1 = (mi*mi1*(ri1-ri)+mi1*si-mi*si1)/(mi1-mi);
|
||||
// Correction for vertical lines
|
||||
if(coords[i1][0] - coords[i % N][0]==0) {
|
||||
Xi1 = coords[i1][0] + offset*(coords[i1][1] - coords[i % N][1])/Math.abs(coords[i1][1] - coords[i % N][1]);
|
||||
Yi1 = mi1*Xi1 - mi1*ri1 + si1;
|
||||
}
|
||||
if (coords[i2][0] - coords[i1][0]==0 ) {
|
||||
Xi1 = coords[i2][0] + offset*(coords[i2][1] - coords[i1][1])/Math.abs(coords[i2][1] - coords[i1][1]);
|
||||
Yi1 = mi*Xi1 - mi*ri + si;
|
||||
}
|
||||
path.push([Xi1, Yi1]);
|
||||
}
|
||||
if (!isClosed) {
|
||||
coords.pop();
|
||||
path.push(coords[N-1]);
|
||||
}
|
||||
return path;
|
||||
}
|
||||
/* Copyright (c) 2016 Jean-Marc VIGLINO,
|
||||
released under the CeCILL-B license (French BSD license)
|
||||
(http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt).
|
||||
Usefull function to handle geometric operations
|
||||
*/
|
||||
/** Distance beetween 2 points
|
||||
* Usefull geometric functions
|
||||
* @param {ol.coordinate} p1 first point
|
||||
* @param {ol.coordinate} p2 second point
|
||||
* @return {number} distance
|
||||
*/
|
||||
ol.coordinate.dist2d = function(p1, p2)
|
||||
{ var dx = p1[0]-p2[0];
|
||||
var dy = p1[1]-p2[1];
|
||||
return Math.sqrt(dx*dx+dy*dy);
|
||||
}
|
||||
/** 2 points are equal
|
||||
* Usefull geometric functions
|
||||
* @param {ol.coordinate} p1 first point
|
||||
* @param {ol.coordinate} p2 second point
|
||||
* @return {boolean}
|
||||
*/
|
||||
ol.coordinate.equal = function(p1, p2)
|
||||
{ return (p1[0]==p2[0] && p1[1]==p2[1]);
|
||||
}
|
||||
/** Get center coordinate of a feature
|
||||
* @param {ol.Feature} f
|
||||
* @return {ol.coordinate} the center
|
||||
*/
|
||||
ol.coordinate.getFeatureCenter = function(f)
|
||||
{ return ol.coordinate.getGeomCenter (f.getGeometry());
|
||||
};
|
||||
/** Get center coordinate of a geometry
|
||||
* @param {ol.Feature} geom
|
||||
* @return {ol.coordinate} the center
|
||||
*/
|
||||
ol.coordinate.getGeomCenter = function(geom)
|
||||
{ switch (geom.getType())
|
||||
{ case 'Point':
|
||||
return geom.getCoordinates();
|
||||
case "MultiPolygon":
|
||||
geom = geom.getPolygon(0);
|
||||
case "Polygon":
|
||||
return geom.getInteriorPoint().getCoordinates();
|
||||
default:
|
||||
return geom.getClosestPoint(ol.extent.getCenter(geom.getExtent()));
|
||||
};
|
||||
};
|
||||
/** Split a lineString by a point or a list of points
|
||||
* NB: points must be on the line, use getClosestPoint() to get one
|
||||
* @param {ol.Coordinate | Array<ol.Coordinate>} pt points to split the line
|
||||
* @param {Number} tol distance tolerance for 2 points to be equal
|
||||
*/
|
||||
ol.geom.LineString.prototype.splitAt = function(pt, tol)
|
||||
{ if (!pt) return [this];
|
||||
if (!tol) tol = 1e-10;
|
||||
// Test if list of points
|
||||
if (pt.length && pt[0].length)
|
||||
{ var result = [this];
|
||||
for (var i=0; i<pt.length; i++)
|
||||
{ var r = [];
|
||||
for (var k=0; k<result.length; k++)
|
||||
{ var ri = result[k].splitAt(pt[i], tol);
|
||||
r = r.concat(ri);
|
||||
}
|
||||
result = r;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
// Nothing to do
|
||||
if (ol.coordinate.equal(pt,this.getFirstCoordinate())
|
||||
|| ol.coordinate.equal(pt,this.getLastCoordinate()))
|
||||
{ return [this];
|
||||
}
|
||||
// Get
|
||||
var c0 = this.getCoordinates();
|
||||
var ci=[c0[0]], p0, p1;
|
||||
var c = [];
|
||||
for (var i=0; i<c0.length-1; i++)
|
||||
{ // Filter equal points
|
||||
if (ol.coordinate.equal(c0[i],c0[i+1])) continue;
|
||||
// Extremity found
|
||||
if (ol.coordinate.equal(pt,c0[i+1]))
|
||||
{ ci.push(c0[i+1]);
|
||||
c.push(new ol.geom.LineString(ci));
|
||||
ci = [];
|
||||
}
|
||||
// Test alignement
|
||||
else if (!ol.coordinate.equal(pt,c0[i]))
|
||||
{ var d1, d2;
|
||||
if (c0[i][0] == c0[i+1][0])
|
||||
{ d1 = d2 = (c0[i][1]-pt[1]) / (c0[i][1]-c0[i+1][1]);
|
||||
}
|
||||
else if (c0[i][1] == c0[i+1][1])
|
||||
{ d1 = d2 = (c0[i][0]-pt[0]) / (c0[i][0]-c0[i+1][0]);
|
||||
}
|
||||
else
|
||||
{ d1 = (c0[i][0]-pt[0]) / (c0[i][0]-c0[i+1][0]);
|
||||
d2 = (c0[i][1]-pt[1]) / (c0[i][1]-c0[i+1][1]);
|
||||
}
|
||||
if (Math.abs(d1-d2)<tol && 0<=d1 && d1<=1)
|
||||
{ ci.push(pt);
|
||||
c.push (new ol.geom.LineString(ci));
|
||||
ci = [pt];
|
||||
}
|
||||
}
|
||||
ci.push(c0[i+1]);
|
||||
}
|
||||
if (ci.length>1) c.push (new ol.geom.LineString(ci));
|
||||
if (c.length) return c;
|
||||
else return [this];
|
||||
}
|
||||
/** Offset a polyline
|
||||
* @param {Array<ol.coordinate} coords
|
||||
* @param {Number} offset
|
||||
* @return {Array<ol.coordinates} resulting coord
|
||||
* @return {Array<ol.coordinates>} resulting coord
|
||||
* @see http://stackoverflow.com/a/11970006/796832
|
||||
* @see https://drive.google.com/viewerng/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxqa2dhZGdldHN0b3JlfGd4OjQ4MzI5M2Y0MjNmNzI2MjY
|
||||
*/
|
||||
|
||||
2
dist/ol-ext.min.js
vendored
2
dist/ol-ext.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user