]> gerrit.simantics Code Review - simantics/district.git/blob - org.simantics.district.network/src/org/simantics/district/network/ModelledCRS.java
fd129ff095e3d86b5a92b0db0b0ab5d44819ef8c
[simantics/district.git] / org.simantics.district.network / src / org / simantics / district / network / ModelledCRS.java
1 package org.simantics.district.network;
2
3 import org.geotools.referencing.GeodeticCalculator;
4 import org.opengis.referencing.FactoryException;
5 import org.opengis.referencing.crs.CoordinateReferenceSystem;
6 import org.simantics.databoard.Bindings;
7 import org.simantics.db.ReadGraph;
8 import org.simantics.db.Resource;
9 import org.simantics.db.exception.DatabaseException;
10 import org.simantics.district.network.ontology.DistrictNetworkResource;
11
12 public class ModelledCRS implements CRS {
13
14     private GeodeticCalculator calculator;
15
16     public ModelledCRS(ReadGraph graph, Resource type) throws DatabaseException, FactoryException {
17         String wkt = graph.getRelatedValue2(type, DistrictNetworkResource.getInstance(graph).HasSRTEXT, Bindings.STRING);
18         CoordinateReferenceSystem crs = org.geotools.referencing.CRS.parseWKT(wkt);
19         this.calculator = new GeodeticCalculator(crs);
20     }
21     
22     @Override
23     public double calculateDistance(double[] start, double[] end) {
24         // TODO: fix the scale..
25         calculator.setStartingGeographicPoint(start[0] / 100000, start[1] / 100000);
26         calculator.setDestinationGeographicPoint(end[0] / 100000, end[1] / 100000);
27         return calculator.getOrthodromicDistance();
28     }
29
30 }