Skip to content

Commit

Permalink
デルタID列、GeoDeltaコードから各頂点の座標を取得する処理を追加
Browse files Browse the repository at this point in the history
  • Loading branch information
nayutaya committed Nov 29, 2011
1 parent 3d762d4 commit 6bdd607
Show file tree
Hide file tree
Showing 2 changed files with 115 additions and 0 deletions.
86 changes: 86 additions & 0 deletions src/java/geodelta-test/src/jp/nayutaya/geodelta/GeoDeltaTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -78,4 +78,90 @@ public void getCenter_code()
assertArrayEquals(new double[] {+71.480, +0.000}, GeoDelta.getCenter("ZK"), 1.0E-3);
assertArrayEquals(new double[] {+71.480, +0.000}, GeoDelta.getCenter("Z2"), 1.0E-3);
}

@Test
public void getCoordinates_ids1()
{
final double[][] delta0 = GeoDelta.getCoordinates(new byte[] {0});
assertEquals(4, delta0.length);
assertArrayEquals(new double[] {+71.480, +0.000}, delta0[0], 1.0E-3);
assertArrayEquals(new double[] {+0.000, +0.000}, delta0[1], 1.0E-3);
assertArrayEquals(new double[] {+82.467, -90.000}, delta0[2], 1.0E-3);
assertArrayEquals(new double[] {+82.467, +90.000}, delta0[3], 1.0E-3);

final double[][] delta4 = GeoDelta.getCoordinates(new byte[] {4});
assertArrayEquals(new double[] {-71.480, +0.000}, delta4[0], 1.0E-3);
assertArrayEquals(new double[] {+0.000, +0.000}, delta4[1], 1.0E-3);
assertArrayEquals(new double[] {-82.467, +90.000}, delta4[2], 1.0E-3);
assertArrayEquals(new double[] {-82.467, -90.000}, delta4[3], 1.0E-3);
}

@Test
public void getCoordinates_ids2()
{
final double[][][] delta = new double[8][][];
for ( int id = 0; id < 8; id++ )
{
delta[id] = GeoDelta.getCoordinates(new byte[] {(byte)id});
}

assertArrayEquals(delta[0][1], delta[1][3], 1.0E-15);
assertArrayEquals(delta[0][1], delta[3][2], 1.0E-15);
assertArrayEquals(delta[0][1], delta[4][1], 1.0E-15);
assertArrayEquals(delta[0][1], delta[5][2], 1.0E-15);
assertArrayEquals(delta[0][1], delta[7][3], 1.0E-15);
assertArrayEquals(delta[0][2], delta[2][3], 1.0E-15);
assertArrayEquals(delta[0][2], delta[3][1], 1.0E-15);
assertArrayEquals(delta[0][3], delta[1][1], 1.0E-15);
assertArrayEquals(delta[0][3], delta[2][2], 1.0E-15);
assertArrayEquals(delta[1][2], delta[2][1], 1.0E-15);
assertArrayEquals(delta[1][2], delta[3][3], 1.0E-15);
assertArrayEquals(delta[1][2], delta[5][3], 1.0E-15);
assertArrayEquals(delta[1][2], delta[6][1], 1.0E-15);
assertArrayEquals(delta[1][2], delta[7][2], 1.0E-15);
assertArrayEquals(delta[4][3], delta[6][2], 1.0E-15);
assertArrayEquals(delta[4][3], delta[7][1], 1.0E-15);
assertArrayEquals(delta[4][2], delta[5][1], 1.0E-15);
assertArrayEquals(delta[4][2], delta[6][3], 1.0E-15);
}

@Test
public void getCoordinates_ids3()
{
final double[][][] delta = new double[4][][];
for ( int id = 0; id < 4; id++ )
{
delta[id] = GeoDelta.getCoordinates(new byte[] {0, (byte)id});
}

assertArrayEquals(delta[0][1], delta[2][3], 1.0E-15);
assertArrayEquals(delta[0][1], delta[3][2], 1.0E-15);
assertArrayEquals(delta[0][2], delta[1][3], 1.0E-15);
assertArrayEquals(delta[0][2], delta[3][1], 1.0E-15);
assertArrayEquals(delta[0][3], delta[1][2], 1.0E-15);
assertArrayEquals(delta[0][3], delta[2][1], 1.0E-15);
}

@Test
public void getCoordinates_code()
{
{
final double[][] expected = GeoDelta.getCoordinates(new byte[] {0});
final double[][] actual = GeoDelta.getCoordinates("Z");
assertEquals(4, actual.length);
assertArrayEquals(expected[0], actual[0], 1.0E-15);
assertArrayEquals(expected[1], actual[1], 1.0E-15);
assertArrayEquals(expected[2], actual[2], 1.0E-15);
assertArrayEquals(expected[3], actual[3], 1.0E-15);
}

{
final double[][] expected = GeoDelta.getCoordinates(new byte[] {0, 1, 2});
final double[][] actual = GeoDelta.getCoordinates("Z8");
assertArrayEquals(expected[0], actual[0], 1.0E-15);
assertArrayEquals(expected[1], actual[1], 1.0E-15);
assertArrayEquals(expected[2], actual[2], 1.0E-15);
assertArrayEquals(expected[3], actual[3], 1.0E-15);
}
}
}
29 changes: 29 additions & 0 deletions src/java/geodelta/src/jp/nayutaya/geodelta/GeoDelta.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,33 @@ public static double[] getCenter(final String code)
final byte[] ids = Encoder.decode(code);
return GeoDelta.getCenter(ids);
}

/**
* デルタID列から中心座標と各頂点の座標を取得する。
*
* @param ids デルタID列
* @return 中心座標と各頂点の座標を含む配列
*/
public static double[][] getCoordinates(final byte[] ids)
{
final double[][] coordinates = Geometry.getCoordinates(ids);
final double[][] result = new double[4][];
for ( int i = 0; i < 4; i++ )
{
result[i] = Projector.nxyToLatLng(coordinates[i][0], coordinates[i][1]);
}
return result;
}

/**
* GeoDeltaコードから中心座標と各頂点の座標を取得する。
*
* @param code GeoDeltaコード
* @return 中心座標と各頂点の座標を含む配列
*/
public static double[][] getCoordinates(final String code)
{
final byte[] ids = Encoder.decode(code);
return GeoDelta.getCoordinates(ids);
}
}

0 comments on commit 6bdd607

Please sign in to comment.