Package org.osm2world.core.map_data.creation

Source Code of org.osm2world.core.map_data.creation.OSMToMapDataConverterTest

package org.osm2world.core.map_data.creation;

import static java.util.Arrays.asList;
import static org.junit.Assert.*;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.junit.Ignore;
import org.junit.Test;
import org.osm2world.core.map_data.data.MapArea;
import org.osm2world.core.map_data.data.MapData;
import org.osm2world.core.map_data.data.MapNode;
import org.osm2world.core.math.VectorXZ;
import org.osm2world.core.osm.creation.OsmosisReader;
import org.osm2world.core.osm.data.OSMData;

public class OSMToMapDataConverterTest {

  /**
   * loads {@link MapData} from a file in the test files directory
   */
  private static MapData loadMapData(String filename) throws IOException {
   
    File testFile = new File("test"+File.separator+"files"
        +File.separator+filename);
   
    OSMData osmData = new OsmosisReader(testFile).getData();
    OriginMapProjection mapProjection = new MetricMapProjection();
    mapProjection.setOrigin(osmData);
   
    return new OSMToMapDataConverter(mapProjection).createMapData(osmData);
   
  }
 
  /**
   * test code for a group multipolygon test files which
   * represent the same case with different multipolygon variants
   */
  private void genericMultipolygonTest(String filename) throws IOException {
   
    MapData mapData = loadMapData(filename);
   
    assertSame(13, mapData.getMapNodes().size());
    assertSame(0, mapData.getMapWaySegments().size());
    assertSame(1, mapData.getMapAreas().size());
   
    MapArea area = mapData.getMapAreas().iterator().next();

    assertSame(2, area.getHoles().size());
    assertSame(6, area.getOuterPolygon().size());
    assertSame(13, area.getAreaSegments().size());
   
  }
 
  @Test
  public void testMultipolygon() throws IOException {
    genericMultipolygonTest("mp_two_holes.osm");
  }
 
  @Test
  public void testMultipolygonOuterTagged() throws IOException {
    genericMultipolygonTest("mp_two_holes_outer_tagged.osm");
  }
 
  @Test
  public void testMultipolygonAdvanced() throws IOException {
    genericMultipolygonTest("mp_two_holes_advanced.osm");
  }
 
  @Test
  public void testMultipolygonAdvanced2() throws IOException {
    genericMultipolygonTest("mp_two_holes_advanced2.osm");
  }
 
  @Ignore
  @Test
  public void testMultipolygonTouchingInners() throws IOException {
    genericMultipolygonTest("mp_two_holes_touching_inners.osm");
  }
 
  private void genericCoastlineTest(String filename, List<LatLon> landSites,
      List<LatLon> waterSites) throws IOException {

    /* create map data */
   
    File testFile = new File("test"+File.separator+"files"
        +File.separator+filename);
   
    OSMData osmData = new OsmosisReader(testFile).getData();
    OriginMapProjection mapProjection = new MetricMapProjection();
    mapProjection.setOrigin(osmData);
   
    OSMToMapDataConverter converter = new OSMToMapDataConverter(mapProjection);
    MapData mapData = converter.createMapData(osmData);
   
    /* check coastline properties */
   
    List<MapArea> waterAreas = new ArrayList<MapArea>();

    for (MapArea area : mapData.getMapAreas()) {
      if (area.getTags().contains("natural", "water")) {
        waterAreas.add(area);
      }
    }
   
    assertFalse(waterAreas.isEmpty());
   
    for (LatLon landSite : landSites) {
     
      VectorXZ v = mapProjection.calcPos(landSite);
     
      for (MapArea waterArea : waterAreas) {
        assertFalse(waterArea.getPolygon().contains(v));
      }
     
    }
   
    for (LatLon waterSite : waterSites) {
     
      VectorXZ v = mapProjection.calcPos(waterSite);
     
      boolean isWater = false;
     
      for (MapArea waterArea : waterAreas) {
        if (waterArea.getPolygon().contains(v)) {
          isWater = true;
        }
      }
     
      assertTrue(isWater);
     
    }

  }
 
  @Test
  public void  testCoastlineBigIsland() throws IOException {

    genericCoastlineTest("coastline_big_island.osm",
        asList(new LatLon(51.4946619, 2.1931507)),
        asList(new LatLon(51.4994015, 2.183386),
            new LatLon(51.4982682, 2.2522352),
            new LatLon(51.4590992, 2.2500837),
            new LatLon(51.4569336, 2.1838825)));
       
  }
 
  @Test
  public void  testCoastlineIslands() throws IOException {
   
    genericCoastlineTest("coastline_islands.osm",
        asList(new LatLon(51.4662933, 2.2364075),
            new LatLon(51.4780457, 2.2009898)),
        asList(new LatLon(51.4815502, 2.2271393),
            new LatLon(51.4596942, 2.1930457)));
   
  }
 
  @Test
  public void  testCoastlineIslandsAndCoast() throws IOException {
   
    genericCoastlineTest("coastline_islands_and_coast.osm",
        asList(new LatLon(51.4957716, 2.2466687),
            new LatLon(51.456188, 2.2522958),
            new LatLon(51.4662933, 2.2364075),
            new LatLon(51.4780457, 2.2009898)),
        asList(new LatLon(51.4815502, 2.2271393),
            new LatLon(51.4596942, 2.1930457)));
   
  }
 
  @Test
  public void  testCoastlineMultipleCoasts() throws IOException {
   
    genericCoastlineTest("coastline_multiple_coasts.osm",
        asList(new LatLon(51.4730977, 2.2165471)),
        asList(new LatLon(51.4654685, 2.2374005),
            new LatLon(51.4978323, 2.1844396),
            new LatLon(51.4555692, 2.2178711)));
   
  }
 
  /**
   * reads two nodes with the same coordinates
   */
  @Test
  public void testSameCoordNodes() throws IOException {
   
    MapData mapData = loadMapData("sameCoordNodes.osm");
   
    assertSame(2, mapData.getMapNodes().size());
   
    MapNode[] nodes = mapData.getMapNodes().toArray(new MapNode[2]);
    assertNotSame(nodes[0].getOsmNode().id, nodes[1].getOsmNode().id);
   
  }
 
  /**
   * reads a self intersecting polygon (can be filtered, but must not crash)
   */
  @Test
  public void testSelfIntersection() throws IOException {
   
    MapData mapData = loadMapData("self_intersection.osm");
   
  }
 
}
TOP

Related Classes of org.osm2world.core.map_data.creation.OSMToMapDataConverterTest

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.