Changeset 19857 in osm for applications/editors/josm


Ignore:
Timestamp:
2010-02-04T15:44:49+01:00 (15 years ago)
Author:
petrdlouhy
Message:

increased tolerance (will be needed until tracer don't make nodes in middle of lines)
connect only with buildings
fixed data inconsistences in some cases

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/tracer/src/tracer/TracerAction.java

    r19856 r19857  
    3939import org.xml.sax.SAXException;
    4040import org.openstreetmap.josm.data.osm.BBox;
     41import org.openstreetmap.josm.data.osm.OsmPrimitive;
    4142
    4243/**
     
    153154    }
    154155
     156    private boolean isBuilding(Way w){
     157        return (w.getKeys().get("building") == null ? false : w.getKeys().get("building").equals("yes"));
     158    }
     159
     160    private boolean isInBuilding(Node n){
     161        for(OsmPrimitive op :n.getReferrers())
     162            if(op instanceof Way)
     163                if(isBuilding((Way) op))
     164                    return true;
     165            return false;
     166    }
     167
     168
    155169    private Command connectObjects(Way way){
    156170            List<Command> cmds = new LinkedList<Command>();
    157171            Way newWay = new Way(way);
    158             for (int i = 0; i < newWay.getNodesCount(); i++) {
    159                 Node n = newWay.getNode(i);
     172            for (int i = 1; i < way.getNodesCount(); i++) {
     173                Node n = way.getNode(i);
    160174                if (cancel) {
    161175                    return null;
    162176                }
    163177
    164                 try {
    165178                    LatLon ll = n.getCoor();
    166179
    167                     double minDistanceSq = 0.00001;
     180                    double minDistanceSq = 0.000015;
    168181                    List<Node> nodes = Main.main.getCurrentDataSet().searchNodes(new BBox(
    169182                            ll.getX() - minDistanceSq,
     
    174187                    Node nearestNode = null;
    175188                    for (Node nn : nodes) {
    176                         if (!nn.isUsable() || way.containsNode(nn) || newWay.containsNode(nn)) {
     189                        if (!nn.isUsable() || way.containsNode(nn) || newWay.containsNode(nn) || !isInBuilding(nn)) {
    177190                            continue;
    178191                        }
     
    184197                    }
    185198
     199                    //System.out.println("Nearest: " + nearestNode);
     200                    //System.out.println("-------");
    186201                    if (nearestNode == null) {
    187202                        // hledani blizke usecky, kam bod pridat ... nebo vytvorit samostatny bod?
     
    198213
    199214                        for (Way ww : ways) {
    200                             if (!ww.isUsable() || ww == way || ww == newWay) {
     215                            if (!ww.isUsable() || ww == way || ww == newWay || !isBuilding(ww)) {
    201216                                continue;
    202217                            }
     
    214229                        }
    215230
    216                         if (minDist < 0.00001) {
     231                        //System.out.println("Nearest way:" + nearestWay);
     232                        if (minDist < 0.000015) {
    217233                            Way newNWay = new Way(nearestWay);
    218234                            newNWay.addNode(nearestNodeIndex + 1, n);
     235                            //System.out.println("New way:" + newNWay);
    219236                            cmds.add(new ChangeCommand(nearestWay, newNWay));
    220237                        }
    221238                    } else {
     239                          nearestNode.setCoor(ll.getCenter(nearestNode.getCoor()));
    222240                          int j = newWay.getNodes().indexOf(n);
    223241                          newWay.addNode(j, nearestNode);
     
    225243                          newWay.removeNode(n);
    226244                          cmds.add(new DeleteCommand(n));
    227                           i--;
    228245                    }
    229 
    230                 } catch (Exception ex) {
    231                     ex.printStackTrace();
    232                 }
    233             }
    234             /**/
    235             // projdi kazdou novou usecku a zjisti, zda by nemela vest pres existujici body         
     246            }
     247            // projdi kazdou novou usecku a zjisti, zda by nemela vest pres existujici body
    236248            int i = 0;
    237249            while (i < newWay.getNodesCount()) {
     
    245257                LatLon n1 = newWay.getNodes().get(i).getCoor();
    246258                LatLon n2 = newWay.getNodes().get((i + 1) % newWay.getNodesCount()).getCoor();
    247 
    248                 double minDistanceSq = 0.00001;
    249                 double maxAngle = 10;
     259                //System.out.println(newWay.getNodes().get(i) + "-----" + newWay.getNodes().get((i + 1) % newWay.getNodesCount()));
     260
     261                double minDistanceSq = 0.000015;
     262                double maxAngle = 15;
    250263                List<Node> nodes = Main.main.getCurrentDataSet().searchNodes(new BBox(
    251264                        Math.min(n1.getX(), n2.getX()) - minDistanceSq,
     
    256269                Node nearestNode = null;
    257270                for (Node nod : nodes) {
    258                     if (!nod.isUsable() || way.containsNode(nod) || newWay.containsNode(nod)) {
     271                    if (!nod.isUsable() || way.containsNode(nod) || newWay.containsNode(nod) || !isInBuilding(nod)) {
    259272                        continue;
    260273                    }
     
    277290                }
    278291
    279                 System.out.println("Nearest_: " + nearestNode);
    280                 System.out.println("");
     292                //System.out.println("Nearest_: " + nearestNode);
     293                //System.out.println("");
    281294                if (nearestNode == null) {
    282295                    // tato usecka se nerozdeli
     
    291304            }
    292305
    293             cmds.add(new ChangeCommand(way, newWay));
     306                cmds.add(new ChangeCommand(way, newWay));
    294307
    295308            Command cmd = new SequenceCommand(tr("Merge objects nodes"), cmds);
     
    338351            commands.add(new AddCommand(way));
    339352            if(!ctrl) commands.add(connectObjects(way));
    340 
     353           
    341354            if (!commands.isEmpty()) {
    342355                Main.main.undoRedo.add(new SequenceCommand(tr("Tracer building"), commands));
    343                
     356
    344357                if(shift) Main.main.getCurrentDataSet().addSelected(way);
    345358                else Main.main.getCurrentDataSet().setSelected(way);
Note: See TracChangeset for help on using the changeset viewer.