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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to