/*
* Copyright (c) 2016 Vivid Solutions.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v. 1.0 which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
*
* http://www.eclipse.org/org/documents/edl-v10.php.
*/
package org.locationtech.jts.io.geojson;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.geojson.GeoJsonReader;
import org.locationtech.jts.io.geojson.GeoJsonWriter;
import test.jts.GeometryTestCase;
public class GeoJsonTest extends GeometryTestCase {
public GeoJsonWriter geoJsonWriter;
public GeoJsonReader geoJsonReader;
public GeoJsonTest(String name) {
super(name);
}
@Override
public void setUp() throws Exception {
this.geoJsonWriter = new GeoJsonWriter();
this.geoJsonReader = new GeoJsonReader();
}
public void testPoint() throws ParseException {
runTest("POINT (1 2)");
}
public void testLineString() throws ParseException {
runTest("LINESTRING (1 2, 10 20, 100 200)");
}
public void testPolygon() throws ParseException {
runTest("POLYGON ((0 0, 100 0, 100 100, 0 100, 0 0))");
}
public void testPolygonWithHole() throws ParseException {
runTest("POLYGON ((0 0, 100 0, 100 100, 0 100, 0 0), (1 1, 1 10, 10 10, 10 1, 1 1) )");
}
public void testMultiPoint() throws ParseException {
runTest("MULTIPOINT ((0 0), (1 4), (100 200))");
}
public void testMultiLineString() throws ParseException {
runTest("MULTILINESTRING ((0 0, 1 10), (10 10, 20 30), (123 123, 456 789))");
}
public void testMultiPolygon() throws ParseException {
runTest("MULTIPOLYGON ( ((0 0, 100 0, 100 100, 0 100, 0 0), (1 1, 1 10, 10 10, 10 1, 1 1) ), ((200 200, 200 250, 250 250, 250 200, 200 200)) )");
}
public void testGeometryCollection() throws ParseException {
runTest("GEOMETRYCOLLECTION ( POINT ( 1 1), LINESTRING (0 0, 10 10), POLYGON ((0 0, 100 0, 100 100, 0 100, 0 0)) )");
}
public void testNestedGeometryCollection() throws ParseException {
runTest("GEOMETRYCOLLECTION ( POINT (20 20), GEOMETRYCOLLECTION ( POINT ( 1 1), LINESTRING (0 0, 10 10), POLYGON ((0 0, 100 0, 100 100, 0 100, 0 0)) ) )");
}
// empty atomic geometries are not supported in GeoJSON
public void testMultiPointEmpty() throws ParseException {
runTest("MULTIPOINT EMPTY");
}
public void testMultiLineStringEmpty() throws ParseException {
runTest("MULTILINESTRING EMPTY");
}
public void testMultiPolygonEmpty() throws ParseException {
runTest("MULTIPOLYGON EMPTY");
}
public void testGeometryCollectionEmpty() throws ParseException {
runTest("GEOMETRYCOLLECTION EMPTY");
}
private void runTest(String wkt) throws ParseException {
Geometry expected = read(wkt);
String json = this.geoJsonWriter.write(expected);
Geometry result = this.geoJsonReader.read(json);
checkEqual(result, expected);
}
}