1 /******************************************************************************* 2 * Copyright (c) 2015 Voyager Search and MITRE 3 * All rights reserved. This program and the accompanying materials 4 * are made available under the terms of the Apache License, Version 2.0 which 5 * accompanies this distribution and is available at 6 * http://www.apache.org/licenses/LICENSE-2.0.txt 7 ******************************************************************************/ 8 9 package org.locationtech.spatial4j.distance; 10 11 import org.locationtech.spatial4j.context.SpatialContext; 12 import org.locationtech.spatial4j.shape.Circle; 13 import org.locationtech.spatial4j.shape.Point; 14 import org.locationtech.spatial4j.shape.Rectangle; 15 16 /** 17 * Performs calculations relating to distance, such as the distance between a pair of points. A 18 * calculator might be based on Euclidean space, or a spherical model, or theoretically something 19 * else like an ellipsoid. 20 */ 21 public interface DistanceCalculator { 22 23 /** The distance between <code>from</code> and <code>to</code>. */ 24 public double distance(Point from, Point to); 25 26 /** The distance between <code>from</code> and <code>Point(toX,toY)</code>. */ 27 public double distance(Point from, double toX, double toY); 28 29 /** Returns true if the distance between from and to is <= distance. */ 30 public boolean within(Point from, double toX, double toY, double distance); 31 32 /** 33 * Calculates where a destination point is given an origin (<code>from</code>) 34 * distance, and bearing (given in degrees -- 0-360). If reuse is given, then 35 * this method may reset() it and return it. 36 */ 37 public Point pointOnBearing(Point from, double distDEG, double bearingDEG, SpatialContext ctx, Point reuse); 38 39 /** 40 * Calculates the bounding box of a circle, as specified by its center point 41 * and distance. 42 */ 43 public Rectangle calcBoxByDistFromPt(Point from, double distDEG, SpatialContext ctx, Rectangle reuse); 44 45 /** 46 * The <code>Y</code> coordinate of the horizontal axis of a circle that has maximum width. On a 47 * 2D plane, this result is always <code>from.getY()</code> but, perhaps surprisingly, on a sphere 48 * it is going to be slightly different. 49 */ 50 public double calcBoxByDistFromPt_yHorizAxisDEG(Point from, double distDEG, SpatialContext ctx); 51 52 public double area(Rectangle rect); 53 54 public double area(Circle circle); 55 56 }