Package org.onebusaway.geospatial.services

Source Code of org.onebusaway.geospatial.services.SphericalGeometryLibraryTest

/**
* Copyright (C) 2011 Brian Ferris <bdferris@onebusaway.org>
*
* 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.onebusaway.geospatial.services;

import static org.junit.Assert.assertEquals;

import org.junit.Test;
import org.onebusaway.geospatial.model.CoordinateBounds;
import org.onebusaway.geospatial.model.CoordinatePoint;

public class SphericalGeometryLibraryTest {

  @Test
  public void testDistanceFast() {
    double d1 = SphericalGeometryLibrary.distanceFaster(47.66855200022102,
        -122.2901701927185, 47.67031486931084, -122.28911876678467);
    assertEquals(158.73, d1, 0.01);

    double d2 = SphericalGeometryLibrary.distanceFaster(47.670300419806246,
        -122.29019165039062, 47.67579094347484, -122.30066299438477);
    assertEquals(914.30, d2, 0.01);

    double d3 = SphericalGeometryLibrary.distanceFaster(47.2561898535,
        -122.439996129, 47.2555220025, -122.439844215);
    assertEquals(52.96, d3, 0.01);
  }

  @Test
  public void testDistance() {

    double d1 = SphericalGeometryLibrary.distance(47.66855200022102,
        -122.2901701927185, 47.67031486931084, -122.28911876678467);
    assertEquals(211.24, d1, 0.01);

    double d2 = SphericalGeometryLibrary.distance(47.670300419806246,
        -122.29019165039062, 47.67579094347484, -122.30066299438477);
    assertEquals(993.70, d2, 0.01);

    double d3 = SphericalGeometryLibrary.distance(47.2561898535,
        -122.439996129, 47.2555220025, -122.439844215);
    assertEquals(75.14, d3, 0.01);
  }

  @Test
  public void testBounds() {

    CoordinateBounds bounds = SphericalGeometryLibrary.bounds(
        47.97527158291236, -122.3527193069458, 400);

    double d1 = SphericalGeometryLibrary.distance(bounds.getMaxLat(),
        bounds.getMaxLon(), bounds.getMinLat(), bounds.getMaxLon());
    assertEquals(800, d1, 0.01);

    double d2 = SphericalGeometryLibrary.distance(bounds.getMaxLat(),
        bounds.getMinLon(), bounds.getMinLat(), bounds.getMinLon());
    assertEquals(800, d2, 0.01);

    double d3 = SphericalGeometryLibrary.distance(bounds.getMinLat(),
        bounds.getMaxLon(), bounds.getMinLat(), bounds.getMinLon());
    assertEquals(800, d3, 0.1);

    double d4 = SphericalGeometryLibrary.distance(bounds.getMaxLat(),
        bounds.getMaxLon(), bounds.getMaxLat(), bounds.getMinLon());
    assertEquals(800, d4, 0.1);
  }

  @Test
  public void testBoundsLatAndLon() {

    CoordinateBounds bounds = SphericalGeometryLibrary.bounds(
        47.97527158291236, -122.3527193069458, 400, 200);

    double d1 = SphericalGeometryLibrary.distance(bounds.getMaxLat(),
        bounds.getMaxLon(), bounds.getMinLat(), bounds.getMaxLon());
    assertEquals(800, d1, 0.01);

    double d2 = SphericalGeometryLibrary.distance(bounds.getMaxLat(),
        bounds.getMinLon(), bounds.getMinLat(), bounds.getMinLon());
    assertEquals(800, d2, 0.01);

    double d3 = SphericalGeometryLibrary.distance(bounds.getMinLat(),
        bounds.getMaxLon(), bounds.getMinLat(), bounds.getMinLon());
    assertEquals(400, d3, 0.1);

    double d4 = SphericalGeometryLibrary.distance(bounds.getMaxLat(),
        bounds.getMaxLon(), bounds.getMaxLat(), bounds.getMinLon());
    assertEquals(400, d4, 0.1);
  }

  @Test
  public void testGetCenterOfBounds() {
    CoordinateBounds b = new CoordinateBounds(-1.0, -2.0, 4.0, 3.6);
    CoordinatePoint p = SphericalGeometryLibrary.getCenterOfBounds(b);
    assertEquals(1.5, p.getLat(), 0.0);
    assertEquals(0.8, p.getLon(), 0.0);
  }

  @Test
  public void testGetOrientation() {
    double lat0 = 47.6538286680302;
    double lon0 = -122.30780805044554;

    double orientation = SphericalGeometryLibrary.getOrientation(lat0, lon0,
        47.65385757615516, -122.30632747106932);
    assertEquals(1.1, orientation, 0.1);

    orientation = SphericalGeometryLibrary.getOrientation(lat0, lon0,
        47.65415388351328, -122.3063596575775);
    assertEquals(12.6, orientation, 0.1);

    orientation = SphericalGeometryLibrary.getOrientation(lat0, lon0,
        47.65441405444146, -122.30704630308531);
    assertEquals(37.5, orientation, 0.1);

    orientation = SphericalGeometryLibrary.getOrientation(lat0, lon0,
        47.65435623879166, -122.30780805044554);
    assertEquals(90.0, orientation, 0.1);

    orientation = SphericalGeometryLibrary.getOrientation(lat0, lon0,
        47.65405270558003, -122.30883265428923);
    assertEquals(167.6, orientation, 0.1);

    orientation = SphericalGeometryLibrary.getOrientation(lat0, lon0,
        47.653510677599435, -122.30930472307585);
    assertEquals(192.0, orientation, 0.1);
   
    orientation = SphericalGeometryLibrary.getOrientation(lat0, lon0,
        47.65312041396976, -122.30780805044554);
    assertEquals(270.0, orientation, 0.1);
  }

  @Test
  public void testProjectPointToSegmentApproximate() {

    CoordinatePoint p = new CoordinatePoint(40.737284, -73.955430);
    CoordinatePoint seg1 = new CoordinatePoint(40.737997, -73.955472);
    CoordinatePoint seg2 = new CoordinatePoint(40.734575, -73.954979);

    CoordinatePoint r = SphericalGeometryLibrary.projectPointToSegmentAppropximate(
        p, seg1, seg2);

    assertEquals(40.73729256997116, r.getLat(), 0.0);
    assertEquals(-73.95537051431788, r.getLon(), 0.0);
  }
}
TOP

Related Classes of org.onebusaway.geospatial.services.SphericalGeometryLibraryTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.