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