Package org.osm2world.core.map_data.data.overlaps

Examples of org.osm2world.core.map_data.data.overlaps.MapOverlapWA


    /* check whether the line corresponds to one of the area segments */
       
    for (MapAreaSegment areaSegment : area.getAreaSegments()) {
      if (areaSegment.sharesBothNodes(line)) {
       
        MapOverlapWA newOverlap =
          new MapOverlapWA(line, area, MapOverlapType.SHARE_SEGMENT,
              Collections.<VectorXZ>emptyList(),
              Collections.<MapAreaSegment>emptyList());
       
        line.addOverlap(newOverlap);
        area.addOverlap(newOverlap);
       
        return;
       
      }
    }
   
    /* calculate whether the line contains or intersects the area (or neither) */
   
    boolean contains;
    boolean intersects;
   
    {
      final PolygonWithHolesXZ polygon = area.getPolygon();
     
      if (!line.isConnectedTo(area)) {
 
        intersects = polygon.intersects(segmentXZ);
        contains = !intersects && polygon.contains(segmentXZ);
       
      } else {
     
        /* check whether the line intersects the area somewhere
         * else than just at the common node(s).
         */
       
        intersects = false;
     
        double segmentLength = distance(segmentXZ.p1, segmentXZ.p2);
       
        for (VectorXZ pos : polygon.intersectionPositions(segmentXZ)) {
          if (distance(pos, segmentXZ.p1) > segmentLength / 100
              && distance(pos, segmentXZ.p2) > segmentLength / 100) {
            intersects = true;
            break;
          }
        }
 
        /* check whether the area contains the line's center.
         * Unless the line intersects the area outline,
         * this means that the area contains the line itself.
         */
             
        contains = !intersects && polygon.contains(segmentXZ.getCenter());
       
      }
     
    }
   
    /* add an overlap if detected */
         
    if (contains || intersects) {
     
      /* find out which area segments intersect the way segment */

      List<VectorXZ> intersectionPositions = emptyList();
      List<MapAreaSegment> intersectingSegments = emptyList();
     
      if (intersects) {

        intersectionPositions = new ArrayList<VectorXZ>();
        intersectingSegments = new ArrayList<MapAreaSegment>();
       
        for (MapAreaSegment areaSegment : area.getAreaSegments()) {
         
          VectorXZ intersection = segmentXZ.getIntersection(
              areaSegment.getStartNode().getPos(),
              areaSegment.getEndNode().getPos());
         
          if (intersection != null) {
            intersectionPositions.add(intersection);
            intersectingSegments.add(areaSegment);
          }
         
        }
       
      }
     
      /* add the overlap */
     
      MapOverlapWA newOverlap = new MapOverlapWA(line, area,
            intersects ? MapOverlapType.INTERSECT : MapOverlapType.CONTAIN,
            intersectionPositions, intersectingSegments);
     
      line.addOverlap(newOverlap);
      area.addOverlap(newOverlap);
View Full Code Here


            && overlap.type == MapOverlapType.INTERSECT) {
         
          if (!(overlap.getOther(segment).getPrimaryRepresentation()
              instanceof AbstractAreaWorldObject)) continue;
         
          MapOverlapWA overlapWA = (MapOverlapWA) overlap;
         
          for (int i = 0; i < overlapWA.getIntersectionPositions().size(); i++) {
         
            VectorXZ pos = overlapWA.getIntersectionPositions().get(i);
           
            if (GeometryUtil.isBetween(pos, start, end)) {
             
              centerlineXZ.add(pos);
             
View Full Code Here

         * require minimum distance at intersection points
         * (these have been inserted into this segment,
         * but not into the area)
         */
       
        MapOverlapWA overlapWA = (MapOverlapWA) overlap;
       
        if (overlap.type == MapOverlapType.INTERSECT
            && otherWO instanceof AbstractAreaWorldObject) {
         
          AbstractAreaWorldObject otherAAWO =
              ((AbstractAreaWorldObject)otherWO);
         
          for (int i = 0; i < overlapWA.getIntersectionPositions().size(); i++) {
           
            VectorXZ pos =
                overlapWA.getIntersectionPositions().get(i);
            MapAreaSegment areaSegment =
                overlapWA.getIntersectingAreaSegments().get(i);
           
            EleConnector thisConn = primaryRep.getEleConnectors()
                .getConnector(pos);
           
            EleConnector base1 = otherAAWO.getEleConnectors()
View Full Code Here

TOP

Related Classes of org.osm2world.core.map_data.data.overlaps.MapOverlapWA

Copyright © 2018 www.massapicom. 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.