/**
* 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.onebusaway.geospatial.model.CoordinatePoint;
import org.onebusaway.geospatial.model.EncodedPolylineBean;
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class PolylineEncoderTest {
@Test
public void testDecode() {
String polyline = "mz{aHryriV???tE???jE??AlC???lF??AlF??AnF???fF???|F???P?N???lE???T?\\???xD???|@???nD???xB???L?zG???nG?V???jD??qAxC??i@vAKXGTABAJ?B?B??AfF?D@`A??BPBZBr@???d@@`B?V?d@???zBAf@Cb@E^AX??Ad@??AfB?|A??@~G???vF???zF??A`H??WzAUx@??]v@??GL??yAzCg@x@??GH_@b@??c@f@??mC~C??gBtBi@f@??ABMF??cAn@kAl@wE`C??_Aj@C@eAx@a@Z[T??YT]Vg@`@??OVKVGRI`@CVG~@??@fA???pC??@tE??@lB?zA?P??AbN???lL??@hK?vC???N???T??AzN???LAhF?T?fG???dH";
List<CoordinatePoint> decode = PolylineEncoder.decode(polyline);
assertEquals(157, decode.size());
CoordinatePoint p = decode.get(0);
assertEquals(47.661350000000006, p.getLat(), 1e-5);
assertEquals(-122.32618000000001, p.getLon(), 1e-5);
}
@Test
public void testEncodedAndDecodeSignedNumber() {
String value = PolylineEncoder.encodeSignedNumber(10);
assertEquals(10, PolylineEncoder.decodeSignedNumber(value));
value = PolylineEncoder.encodeSignedNumber(-10);
assertEquals(-10, PolylineEncoder.decodeSignedNumber(value));
value = PolylineEncoder.encodeSignedNumber(123456);
assertEquals(123456, PolylineEncoder.decodeSignedNumber(value));
value = PolylineEncoder.encodeSignedNumber(-123456);
assertEquals(-123456, PolylineEncoder.decodeSignedNumber(value));
}
@Test
public void testEncodeAndDecodeNumber() {
String result = PolylineEncoder.encodeNumber(10);
assertEquals(10, PolylineEncoder.decodeNumber(result));
result = PolylineEncoder.encodeNumber(4712345);
assertEquals(4712345, PolylineEncoder.decodeNumber(result));
}
@Test
public void testEncoder() {
List<CoordinatePoint> points = new ArrayList<CoordinatePoint>();
points.add(new CoordinatePoint(38.5, -120.2));
points.add(new CoordinatePoint(40.7, -120.95));
points.add(new CoordinatePoint(43.252, -126.453));
String expected = "_p~iF~ps|U_ulLnnqC_mqNvxq`@";
EncodedPolylineBean actual = PolylineEncoder.createEncodings(points, 0);
Assert.assertEquals(expected, actual.getPoints());
List<CoordinatePoint> decodedPoints = PolylineEncoder.decode(actual);
GeospatialTestSupport.assertEqualsPointLists(points, decodedPoints, 1e-5);
}
@Test
public void test2() {
List<CoordinatePoint> points = new ArrayList<CoordinatePoint>();
points.add(new CoordinatePoint(47.67839087880088, -122.27878118907307));
points.add(new CoordinatePoint(47.67845871865856, -122.27342376951559));
points.add(new CoordinatePoint(47.682076843204875, -122.2735240417865));
String expected = "}d_bHlqiiVKo`@sUR";
EncodedPolylineBean actual = PolylineEncoder.createEncodings(points, 0);
Assert.assertEquals(expected, actual.getPoints());
List<CoordinatePoint> decodedPoints = PolylineEncoder.decode(actual);
GeospatialTestSupport.assertEqualsPointLists(points, decodedPoints, 1e-5);
}
@Test
public void test3() {
double[] lat = {47.67839087880088, 47.67845871865856, 47.682076843204875};
double[] lon = {
-122.27878118907307, -122.27342376951559, -122.2735240417865};
String expected = "}d_bHlqiiVKo`@sUR";
EncodedPolylineBean actual = PolylineEncoder.createEncodings(lat, lon, 0);
Assert.assertEquals(expected, actual.getPoints());
}
@Test
public void test4() {
double[] lat = {
47.3, 47.67839087880088, 47.67845871865856, 47.682076843204875, 47.4};
double[] lon = {
-122.3, -122.27878118907307, -122.27342376951559, -122.2735240417865,
-122.4};
String expected = "}d_bHlqiiVKo`@sUR";
EncodedPolylineBean actual = PolylineEncoder.createEncodings(lat, lon, 1,
3, 0);
Assert.assertEquals(expected, actual.getPoints());
}
}