Ignore:
Timestamp:
2009-12-02T16:17:08+01:00 (15 years ago)
Author:
rcernoch
Message:

CzechAddress: Splitting ways is modified to reflect a new API

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/actions/SplitAreaByEmptyWayAction.java

    r18413 r18892  
    77import java.util.Collection;
    88import java.util.Collections;
     9import java.util.List;
    910
    1011import javax.swing.JOptionPane;
     
    1213import org.openstreetmap.josm.Main;
    1314import org.openstreetmap.josm.actions.JosmAction;
     15import org.openstreetmap.josm.data.osm.Node;
    1416import org.openstreetmap.josm.data.osm.OsmPrimitive;
    1517import org.openstreetmap.josm.data.osm.Relation;
     
    111113    private int splitArea(Way area, Way border, Way newArea1, Way newArea2) {
    112114
    113         Way tempBorder = new Way(border);
     115        for (Relation r : Main.main.getCurrentDataSet().getRelations())
     116            for (RelationMember rm : r.getMembers())
     117                if (rm.refersTo(area) || rm.refersTo(border))
     118                    return 2;
    114119
    115         int index1 = area.getNodes().indexOf(tempBorder.firstNode());
    116         int index2 = area.getNodes().indexOf(tempBorder.lastNode());
     120        List<Node> bordNodes = border.getNodes();
     121        List<Node> areaNodes = area.getNodes();
     122
     123        int index1 = areaNodes.indexOf(bordNodes.get(0));
     124        int index2 = areaNodes.indexOf(bordNodes.get(bordNodes.size()-1));
    117125        if (index1 == index2)
    118126            return 1;
    119127
    120128        if (index1 > index2) {
    121             Collections.reverse(tempBorder.getNodes());
    122             index1 = area.getNodes().indexOf(tempBorder.firstNode());
    123             index2 = area.getNodes().indexOf(tempBorder.lastNode());
     129            Collections.reverse(areaNodes);
     130            index1 = areaNodes.indexOf(bordNodes.get(0));
     131            index2 = areaNodes.indexOf(bordNodes.get(bordNodes.size()-1));
    124132        }
    125 
    126         for (Relation relation : Main.main.getCurrentDataSet().getRelations())
    127             for (RelationMember areaMember : relation.getMembers())
    128                 if (area.equals(areaMember.getMember()))
    129                     return 2;
    130133
    131134        for (String key : area.keySet()) {
     
    134137        }
    135138
    136         newArea1.getNodes().addAll(area.getNodes().subList(0, index1));
    137         newArea1.getNodes().addAll(tempBorder.getNodes());
    138         newArea1.getNodes().addAll(area.getNodes().subList(index2, area.getNodes().size()-1));
    139         newArea1.getNodes().add(area.getNodes().get(0));
     139        List<Node> newNodeList1 = newArea1.getNodes();
     140        List<Node> newNodeList2 = newArea1.getNodes();
    140141
    141         Collections.reverse(tempBorder.getNodes());
    142         newArea2.getNodes().addAll(area.getNodes().subList(index1, index2));
    143         newArea2.getNodes().addAll(tempBorder.getNodes());
    144         newArea2.getNodes().add(area.getNodes().get(index1));
     142        newNodeList1.addAll(areaNodes.subList(0, index1));
     143        newNodeList1.addAll(bordNodes);
     144        newNodeList1.addAll(areaNodes.subList(index2 + 1, areaNodes.size()));
    145145
    146         removeDuplicateNodesFromWay(newArea1);
    147         removeDuplicateNodesFromWay(newArea2);
     146        Collections.reverse(bordNodes);
     147        newNodeList2.addAll(areaNodes.subList(index1, index2));
     148        newNodeList2.addAll(bordNodes);
     149
     150        newArea1.setNodes(newNodeList1);
     151        newArea2.setNodes(newNodeList2);
    148152
    149153        return 0;
    150154    }
    151 
    152     /**
    153      * Removes all consequent nodes, which are on the same way.
    154      */
    155     void removeDuplicateNodesFromWay(Way w) {
    156         int i=0;
    157         while (i<w.getNodes().size()-1) {
    158             if (w.getNodes().get(i).equals(w.getNodes().get(i+1)))
    159                 w.getNodes().remove(i);
    160             else
    161                 i++;
    162         }
    163     }
    164155}
Note: See TracChangeset for help on using the changeset viewer.