Ticket #11169: fix_pbfwriter_v2.patch

File fix_pbfwriter_v2.patch, 5.5 KB (added by GerdP, 9 years ago)
  • pbf/src/org/openstreetmap/josm/plugins/pbf/io/PbfWriter.java

     
    9797                        stable.incr(tag.getKey());
    9898                        stable.incr(tag.getValue());
    9999                    }
    100                     if (!omit_metadata && i.getUser() != null) {
    101                         stable.incr(i.getUser().getName());
     100                    if (!omit_metadata) {
     101                        String userId = i.getUser() != null ? i.getUser().getName() : null;
     102                        if (userId == null)
     103                                userId = "";
     104                        stable.incr(userId);
    102105                    }
    103106                }
    104107            }
     
    116119                for (OsmPrimitive e : entities) {
    117120
    118121                    int uid = e.getUser() == null ? -1 : (int) e.getUser().getId();
    119                     int userSid = stable.getIndex(e.getUser() == null ? "" : e.getUser().getName());
     122                    String userId = e.getUser() != null ? e.getUser().getName() : null;
     123                    if (userId == null)
     124                        userId = "";
     125                    int userSid = stable.getIndex(userId);
    120126                    int timestamp = (int) (e.getTimestamp().getTime() / date_granularity);
    121127                    int version = e.getVersion();
    122128                    long changeset = e.getChangesetId();
     
    186192                }
    187193
    188194                for (Node i : contents) {
    189                     long id = i.getId();
     195                    long id = i.getUniqueId();
    190196                    bi.addId(id - lastid);
    191197                    lastid = id;
    192198                    LatLon coor = i.getCoor();
     
    224230                StringTable stable = getStringTable();
    225231                Osmformat.PrimitiveGroup.Builder builder = Osmformat.PrimitiveGroup.newBuilder();
    226232                for (Node i : contents) {
    227                     long id = i.getId();
     233                    long id = i.getUniqueId();
    228234                    LatLon coor = i.getCoor();
    229235                    int lat = mapDegrees(coor.lat());
    230236                    int lon = mapDegrees(coor.lon());
     
    257263                Osmformat.PrimitiveGroup.Builder builder = Osmformat.PrimitiveGroup.newBuilder();
    258264                for (Way i : contents) {
    259265                    Osmformat.Way.Builder bi = Osmformat.Way.newBuilder();
    260                     bi.setId(i.getId());
     266                    bi.setId(i.getUniqueId());
    261267                    long lastid = 0;
    262268                    for (Node j : i.getNodes()) {
    263                         long id = j.getId();
     269                        long id = j.getUniqueId();
    264270                        bi.addRefs(id - lastid);
    265271                        lastid = id;
    266272                    }
     
    299305                Osmformat.PrimitiveGroup.Builder builder = Osmformat.PrimitiveGroup.newBuilder();
    300306                for (Relation i : contents) {
    301307                    Osmformat.Relation.Builder bi = Osmformat.Relation.newBuilder();
    302                     bi.setId(i.getId());
     308                    bi.setId(i.getUniqueId());
    303309                    RelationMember[] arr = new RelationMember[i.getMembers().size()];
    304310                    i.getMembers().toArray(arr);
    305311                    long lastid = 0;
    306312                    for (RelationMember j : i.getMembers()) {
    307                         long id = j.getMember().getId();
     313                        long id = j.getMember().getUniqueId();
    308314                        bi.addMemids(id - lastid);
    309315                        lastid = id;
    310316                        if (j.getType() == OsmPrimitiveType.NODE) {
     
    476482
    477483        public void process(DataSet ds) {
    478484            processor.processSources(ds.dataSources);
    479             for (Node n : ds.getNodes()) {
    480                 processor.processNode(n);
    481             }
    482             for (Way w : ds.getWays()) {
    483                 processor.processWay(w);
    484             }
    485             for (Relation r : ds.getRelations()) {
    486                 processor.processRelation(r);
    487             }
     485                        ds.getNodes().stream().sorted((n1, n2) -> Long.compare(n1.getUniqueId(), n2.getUniqueId()))
     486                                        .filter(n -> n.getCoor() != null).forEach((n) -> processor.processNode(n));
     487                        ds.getWays().stream().sorted((w1, w2) -> Long.compare(w1.getUniqueId(), w2.getUniqueId()))
     488                                        .filter(w -> w.getNodesCount() > 0).forEach((w) -> processor.processWay(w));
     489                        ds.getRelations().stream().sorted((r1, r2) -> Long.compare(r1.getUniqueId(), r2.getUniqueId()))
     490                                        .filter(r -> r.getMembersCount() > 0).forEach((r) -> processor.processRelation(r));
    488491        }
    489492
    490493        public void complete() {
  • pbf/test/unit/org/openstreetmap/josm/plugins/pbf/io/PbfExporterTest.java

     
    3232     * @throws Exception if an error occurs
    3333     */
    3434    @Test
    35     @Ignore("TODO: to fix")
    3635    public void testTicket11169() throws Exception {
    3736        try (InputStream is = Compression.ZIP.getUncompressedInputStream(
    3837                new FileInputStream(TestUtils.getRegressionDataFile(11169, "Portsmouth_Area.osm.zip")))) {