55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | |
| This program is free software; you can redistribute it and/or modify
 | |
| it under the terms of the GNU AFFERO General Public License as published by
 | |
| the Free Software Foundation; either version 3 of the License, or
 | |
| any later version.
 | |
| 
 | |
| This program is distributed in the hope that it will be useful,
 | |
| but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| GNU General Public License for more details.
 | |
| 
 | |
| You should have received a copy of the GNU Affero General Public License
 | |
| along with this program; if not, write to the Free Software
 | |
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | |
| or see http://www.gnu.org/licenses/agpl.txt.
 | |
| */
 | |
| 
 | |
| // Leaflet bugfixes
 | |
| // [assorted bugfixes to Leaflet functions we use]
 | |
| 
 | |
| 
 | |
| // return closest point on segment or distance to that point
 | |
| L.LineUtil._sqClosestPointOnSegment = function (p, p1, p2, sqDist) {
 | |
| 	var x = p1.x,
 | |
| 		y = p1.y,
 | |
| 		dx = p2.x - x,
 | |
| 		dy = p2.y - y,
 | |
| 		dot = dx * dx + dy * dy,
 | |
| 		t;
 | |
| 
 | |
| 	if (dot > 0) {
 | |
| 		t = ((p.x - x) * dx + (p.y - y) * dy) / dot;
 | |
| 
 | |
| 		if (t > 1) {
 | |
| 			x = p2.x;
 | |
| 			y = p2.y;
 | |
| 		} else if (t > 0) {
 | |
| 			x += dx * t;
 | |
| 			y += dy * t;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	dx = p.x - x;
 | |
| 	dy = p.y - y;
 | |
| 		
 | |
| 	// DS_CHANGE: modified return values
 | |
| 	if(sqDist)
 | |
| 		return dx*dx + dy*dy;
 | |
| 	else {
 | |
| 		var p = new L.Point(x,y);
 | |
| 		p._sqDist = dx*dx + dy*dy;
 | |
| 		return p;
 | |
| 	}
 | |
| };
 |