Mercurial > dive4elements > gnv-client
view gnv-artifacts/src/main/java/de/intevation/gnv/utils/DistanceCalculator.java @ 522:c896282c2601
Issue 156 solved. Added width, height and points as parameter to svg and pdf output mode. Width and height have an effact on the width and height of the export, points is a boolean property which enables/disables the drawing of data points.
gnv-artifacts/trunk@616 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Mon, 25 Jan 2010 09:18:31 +0000 |
parents | 1ab23cd66870 |
children | 9a828e5a2390 |
line wrap: on
line source
/** * */ package de.intevation.gnv.utils; import com.vividsolutions.jts.geom.Point; import com.vividsolutions.jts.geom.Coordinate; import java.util.List; /** * @author Tim Englich <tim.englich@intevation.de> * */ public class DistanceCalculator { private final static double flattening = 1.0 / 298.257233563; private final static double earthRadius = 6378137.0 / 1000.0 ; /** * Constructor */ public DistanceCalculator() { } public static double calculateDistance(Point p1, Point p2){ return calculateDistance(p1.getCoordinate(), p2.getCoordinate()); } public static double calculateDistance(Coordinate p1, Coordinate p2){ double resultValue = 0.0; double b1 = p1.y; double b2 = p2.y; double l1 = p1.x; double l2 = p2.x; double F = (b1 + b2) / 2.0; double G = (b1 - b2) / 2.0; double l = (l1 - l2) / 2.0; F = (Math.PI / 180.0) * F; G = (Math.PI / 180.0) * G; l = (Math.PI / 180.0) * l; double S = ((Math.sin(G) * Math.sin(G)) * ((Math.cos(l) * Math.cos(l))))+ ((Math.cos(F) * Math.cos(F)) * ((Math.sin(l) * Math.sin(l)))); double C = ((Math.cos(G) * Math.cos(G)) * ((Math.cos(l) * Math.cos(l))))+ ((Math.sin(F) * Math.sin(F)) * ((Math.sin(l) * Math.sin(l)))); double w = Math.atan(Math.sqrt((S/C))); double D = 2.0 * w * earthRadius; double R = Math.sqrt((S*C)) / w; double H1 = (3.0 * R - 1.0 ) / (2.0 * C); double H2 = (3.0 * R + 1.0 ) / (2.0 * S); resultValue = D * (1 + (flattening * H1 * (Math.sin(F) * Math.sin(F)) * (Math.cos(G) * Math.cos(G))) - (flattening * H2 * (Math.cos(F) * Math.cos(F)) * (Math.sin(G) * Math.sin(G)))); return resultValue; } public static final double calculateDistance(List<Coordinate> path) { int N = path.size(); if (N < 2) { return 0d; } double sum = 0d; for (int i = 1; i < N; ++i) { sum += calculateDistance(path.get(i-1), path.get(i)); } return sum; } }