You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by si...@apache.org on 2011/09/14 19:07:12 UTC

svn commit: r1170718 - /labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MapSegment.java

Author: simoneg
Date: Wed Sep 14 17:07:12 2011
New Revision: 1170718

URL: http://svn.apache.org/viewvc?rev=1170718&view=rev
Log:
Added some basic shape geometry calcs (missed a file)

Added:
    labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MapSegment.java

Added: labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MapSegment.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MapSegment.java?rev=1170718&view=auto
==============================================================================
--- labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MapSegment.java (added)
+++ labs/magma/trunk/beans-map/src/main/java/org/apache/magma/beans/MapSegment.java Wed Sep 14 17:07:12 2011
@@ -0,0 +1,66 @@
+package org.apache.magma.beans;
+
+public class MapSegment {
+
+	private static long
+	avgRadius = 6371009;
+	
+	private MapCoordinate from,to;
+
+	private double distance = -1;
+	
+	public MapSegment(MapCoordinate from, MapCoordinate to) {
+		this.from = from;
+		this.to = to;
+	}
+	
+	public synchronized double getDistance() {
+		if (distance != -1) return distance;
+		
+		double lat1 = from.getRadLatitude();
+		double lon1 = from.getRadLongitude();
+		double lat2 = to.getRadLatitude();
+		double lon2 = to.getRadLongitude();
+		
+		
+		double dLat = lat2 - lat1;
+		double dLon = lon2 - lon1;
+
+		double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
+		          Math.cos(lat1) * Math.cos(lat2) * 
+		          Math.sin(dLon/2) * Math.sin(dLon/2);
+		
+		double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
+		double d = avgRadius * c;
+		
+		distance = d;
+		
+		return distance;
+	}
+	
+	public MapCoordinate findPointAt(double meters) {
+		double dist = getDistance();
+		
+		if (meters > dist) throw new IllegalArgumentException("Given meters (" + meters + ") are more than length of the segment (" + dist + ")"); 
+		
+		double rel = meters / dist;
+		
+		double lat1 = from.getLatitude();
+		double lon1 = from.getLongitude();
+		double lat2 = to.getLatitude();
+		double lon2 = to.getLongitude();
+		
+		
+		double dLat = lat2 - lat1;
+		double dLon = lon2 - lon1;
+
+		dLat *= rel;
+		dLon *= rel;
+		
+		MapCoordinate ret = new MapCoordinate();
+		ret.setLatitude((float)(lat1 + dLat));
+		ret.setLongitude((float)(lon1 + dLon));
+		return ret;
+	}
+	
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org