X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.network%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fnetwork%2FModelledCRS.java;h=23e68f2b273453c7a2636f2331c2bd417028447c;hb=1bc60c2213f9b3fc7b4d935ba9afda2b767290e5;hp=fd129ff095e3d86b5a92b0db0b0ab5d44819ef8c;hpb=b10b919b6756df3b423dd416df6b1b06abc15f22;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.network/src/org/simantics/district/network/ModelledCRS.java b/org.simantics.district.network/src/org/simantics/district/network/ModelledCRS.java index fd129ff0..23e68f2b 100644 --- a/org.simantics.district.network/src/org/simantics/district/network/ModelledCRS.java +++ b/org.simantics.district.network/src/org/simantics/district/network/ModelledCRS.java @@ -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; + } }