/* * Copyright 2015-present Open Networking Laboratory * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.onlab.util; import com.google.common.base.MoreObjects; /** * Geo location specified in terms of longitude and latitude. */ public class GeoLocation { public static final double EARTH_RADIUS_KM = 6378.1370D; private final double latitude; private final double longitude; /** * Creates a new location using the specified coordinates. * * @param latitude latitude line * @param longitude longitude line */ public GeoLocation(double latitude, double longitude) { this.latitude = latitude; this.longitude = longitude; } /** * Returns the latitude of this location. * * @return latitude */ public double latitude() { return latitude; } /** * Returns the longitude of this location. * * @return longitude */ public double longitude() { return longitude; } /** * Returns the distance in kilometers, between this location and another. * * @param other other geo location * @return distance in kilometers */ public double kilometersTo(GeoLocation other) { double hereLat = Math.toRadians(latitude); double hereLon = Math.toRadians(longitude); double thereLat = Math.toRadians(other.latitude); double thereLon = Math.toRadians(other.longitude); double cos = Math.sin(hereLat) * Math.sin(thereLat) + Math.cos(hereLat) * Math.cos(thereLat) * Math.cos(hereLon - thereLon); return Math.acos(cos) * EARTH_RADIUS_KM; } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("latitude", latitude) .add("longitude", longitude) .toString(); } }