Ignore:
Timestamp:
2017-09-24T23:25:03+02:00 (7 years ago)
Author:
donvip
Message:

Edigeo: initial support of areas

Location:
applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/EdigeoFileTHF.java

    r33659 r33663  
    1212import java.util.Objects;
    1313
     14import org.openstreetmap.josm.actions.SimplifyWayAction;
     15import org.openstreetmap.josm.command.SequenceCommand;
    1416import org.openstreetmap.josm.data.osm.DataSet;
    1517import org.openstreetmap.josm.tools.Logging;
     
    491493            lot.fill(ds);
    492494        }
     495        ds.getWays().forEach(w -> {
     496            SequenceCommand command = SimplifyWayAction.simplifyWay(w, 0.25);
     497            if (command != null) {
     498                command.executeCommand();
     499            }
     500        });
    493501        return this;
    494502    }
  • applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/EdigeoFileVEC.java

    r33662 r33663  
    2222import org.openstreetmap.josm.data.osm.Node;
    2323import org.openstreetmap.josm.data.osm.OsmPrimitive;
     24import org.openstreetmap.josm.data.osm.Relation;
     25import org.openstreetmap.josm.data.osm.RelationMember;
    2426import org.openstreetmap.josm.data.osm.Way;
    2527import org.openstreetmap.josm.data.projection.Projection;
     
    571573            if (rel.scdRef instanceof McdConstructionRelationDef) {
    572574                McdConstructionRelationDef crd = (McdConstructionRelationDef) rel.scdRef;
    573                 assert crd.kind == kind;
    574                 assert crd.nAttributes == 0;
    575             }
    576             for (VecBlock<?> e : rel.elements) {
    577                 if (klass.isInstance(e)) {
    578                     list.add((T) e);
     575                if (crd.kind == kind) {
     576                    assert crd.nAttributes == 0;
     577                    for (VecBlock<?> e : rel.elements) {
     578                        if (klass.isInstance(e)) {
     579                            list.add((T) e);
     580                        }
     581                    }
    579582                }
    580583            }
     
    642645            List<RelationBlock> constructionRelations, List<RelationBlock> semanticRelations) {
    643646        assert constructionRelations.size() >= 1 : constructionRelations;
    644         // TODO
    645         return null;
     647        List<FaceBlock> faces = extract(FaceBlock.class, constructionRelations, RelationKind.IS_MADE_OF);
     648        assert faces.size() >= 1;
     649        if (faces.size() == 1) {
     650            return addPrimitiveAndTags(ds, obj, faceToOsmPrimitive(ds, proj, faces.get(0)));
     651        } else {
     652            Relation r = new Relation();
     653            r.put("type", "multipolygon");
     654            for (FaceBlock face : faces) {
     655                r.addMember(new RelationMember("outer", faceToOsmPrimitive(ds, proj, face)));
     656            }
     657            return addPrimitiveAndTags(ds, obj, r);
     658        }
     659    }
     660
     661    private static OsmPrimitive faceToOsmPrimitive(DataSet ds, Projection proj, FaceBlock face) {
     662        List<ArcBlock> leftArcs = extract(ArcBlock.class, face.getConstructionRelations(), RelationKind.HAS_FOR_LEFT_FACE);
     663        List<ArcBlock> rightArcs = extract(ArcBlock.class, face.getConstructionRelations(), RelationKind.HAS_FOR_RIGHT_FACE);
     664        assert leftArcs.size() >= 1 || rightArcs.size() >= 1;
     665        if ((leftArcs.size() == 1 && rightArcs.isEmpty()) || (leftArcs.isEmpty() && rightArcs.size() == 1)) {
     666            Way w = new Way();
     667            ArcBlock ab = (leftArcs.isEmpty() ? rightArcs : leftArcs).get(0);
     668            for (EastNorth en : ab.points) {
     669                w.addNode(getNodeAt(ds, proj, en));
     670            }
     671            return w;
     672        } else {
     673            // TODO
     674            return new Way();
     675        }
    646676    }
    647677
  • applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/pci/EdigeoPciReader.java

    r33662 r33663  
    4141        EdigeoFileVEC.addObjectPostProcessor("19", "boundary=administrative;admin_level=8"); // Municipality limit trigger
    4242        EdigeoFileVEC.addObjectPostProcessor("21", "highway=road"); // Path
     43        EdigeoFileVEC.addObjectPostProcessor("33", "barrier=wall;bridge=yes"); // bridge parapet
     44        EdigeoFileVEC.addObjectPostProcessor("34", "landuse=reservoir;natural=water;water=reservoir"); // reservoir, lake
    4345        EdigeoFileVEC.addObjectPostProcessor("39", "barrier=wall"); // Common wall
    4446        EdigeoFileVEC.addObjectPostProcessor("40", "barrier=wall"); // Non-adjacent wall
    4547        EdigeoFileVEC.addObjectPostProcessor("45", "barrier=hedge"); // Common hedge
    4648        EdigeoFileVEC.addObjectPostProcessor("46", "barrier=hedge"); // Non-adjacent hedge
     49        EdigeoFileVEC.addObjectPostProcessor("65", "leisure=swimming_pool;access=private"); // Swimming pool
    4750
    4851        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
     
    5760                p.remove(t);
    5861            }
    59             p.put("name", sb.toString());
     62            p.put("name", sb.toString().replaceAll("   ", " ").replaceAll("  ", " "));
    6063        }, "TEX_id");
    6164
     
    7679            }
    7780        }, o -> o.hasScdIdentifier("ZONCOMMUNI_id"));
     81
     82        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
     83            p.put("boundary", "administrative");
     84            p.put("admin_level", "8");
     85            p.put("ref:INSEE", "XX"+p.get("IDU_id")); // TODO: find department number
     86            p.put("name", p.get("TEX2_id")); // TODO: lowercase
     87            p.remove("IDU_id");
     88            p.remove("TEX2_id");
     89        }, o -> o.hasScdIdentifier("COMMUNE_id"));
     90
     91        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
     92            p.put("boundary", "cadastral");
     93            p.put("ref", p.get("IDU_id"));
     94            p.remove("IDU_id");
     95        }, o -> o.hasScdIdentifier("SECTION_id") || o.hasScdIdentifier("SUBDSECT_id") || o.hasScdIdentifier("PARCELLE_id"));
     96
     97        EdigeoFileVEC.addObjectPostProcessor((o, p) -> p.put("wall", "no"), "DUR_id", "02");
     98        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
     99            p.put("building", "yes");
     100            p.remove("DUR_id");
     101        }, o -> o.hasScdIdentifier("BATIMENT_id"));
    78102    }
    79103
Note: See TracChangeset for help on using the changeset viewer.