1
2
3
4
5
6 package gov.usgs.volcanoes.winston.server.http.cmd.fdsnws.constraint;
7
8 import java.awt.geom.Point2D;
9
10 import gov.usgs.proj.Projection;
11 import gov.usgs.volcanoes.core.util.StringUtils;
12 import gov.usgs.volcanoes.winston.Channel;
13 import gov.usgs.volcanoes.winston.Instrument;
14
15
16
17
18
19
20
21 public class GeographicCircleConstraint extends GeographicConstraint {
22
23 private static double DEFAULT_LATITUDE = 0;
24 private static double DEFAULT_LONGITUDE = 0;
25 private static double DEFAULT_MINRADIUS = 0;
26 private static double DEFAULT_MAXRADIUS = 180;
27
28 private Point2D.Double point;
29 private double minRadius;
30 private double maxRadius;
31
32
33
34
35
36
37
38
39
40 public GeographicCircleConstraint(final String latitude, final String longitude,
41 final String minRadius, final String maxRadius) {
42 final double lat = StringUtils.stringToDouble(latitude, DEFAULT_LATITUDE);
43 final double lon = StringUtils.stringToDouble(longitude, DEFAULT_LONGITUDE);
44
45 point = new Point2D.Double(lat, lon);
46
47 this.minRadius = StringUtils.stringToDouble(minRadius, DEFAULT_MINRADIUS);
48 this.maxRadius = StringUtils.stringToDouble(maxRadius, DEFAULT_MAXRADIUS);
49 }
50
51 public boolean matches(final Channel chan) {
52 final Instrument i = chan.getInstrument();
53 final double lat = i.getLatitude();
54 final double lon = i.getLongitude();
55
56 if (Double.isNaN(lat) || Double.isNaN(lon)) {
57 return false;
58 }
59
60 final Point2D.Double p = new Point2D.Double(lat, lon);
61 final double radius = Projection.distanceBetweenDegree(point, p);
62
63 return (radius >= minRadius && radius <= maxRadius);
64 }
65
66 @Override
67 public String toString() {
68 return "FdsnGeographicCircleConstraint: " + point.x + "," + point.y + " " + minRadius + " >< "
69 + maxRadius;
70 }
71 }