]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network/src/org/simantics/district/network/ModelledCRS.java
Final push of district changes
[simantics/district.git] / org.simantics.district.network / src / org / simantics / district / network / ModelledCRS.java
index fd129ff095e3d86b5a92b0db0b0ab5d44819ef8c..23e68f2b273453c7a2636f2331c2bd417028447c 100644 (file)
@@ -16,15 +16,45 @@ public class ModelledCRS implements CRS {
     public ModelledCRS(ReadGraph graph, Resource type) throws DatabaseException, FactoryException {
         String wkt = graph.getRelatedValue2(type, DistrictNetworkResource.getInstance(graph).HasSRTEXT, Bindings.STRING);
         CoordinateReferenceSystem crs = org.geotools.referencing.CRS.parseWKT(wkt);
+        
         this.calculator = new GeodeticCalculator(crs);
     }
     
     @Override
     public double calculateDistance(double[] start, double[] end) {
-        // TODO: fix the scale..
-        calculator.setStartingGeographicPoint(start[0] / 100000, start[1] / 100000);
-        calculator.setDestinationGeographicPoint(end[0] / 100000, end[1] / 100000);
-        return calculator.getOrthodromicDistance();
+        calculator.setStartingGeographicPoint(start[0], start[1]);
+        calculator.setDestinationGeographicPoint(end[0], end[1]);
+        double dist = calculator.getOrthodromicDistance();
+        return dist;
     }
 
+    
+    // TODO: these only work with Spherical Mercator
+    public static double xToLongitude(double x) {
+        return x;
+    }
+    
+    public static double yToLatitude(double y) {
+        double rad = Math.toRadians(y);
+        double sinh = Math.sinh(rad);
+        double atan = Math.atan(sinh);
+        double finald = Math.toDegrees(atan);
+        return finald;
+    }
+    
+    public static double longitudeToX(double lon) {
+        return lon;
+    }
+    
+    private static double asinh(double x) {
+        return Math.log(x + Math.sqrt(x*x + 1.0));
+    }
+    
+    public static double latitudeToY(double lat) {
+        double frad = Math.toRadians(lat);
+        double ftan = Math.tan(frad);
+        double fsin = asinh(ftan);
+        double f = Math.toDegrees(fsin);
+        return f;
+    }
 }