Changeset 30660 in osm for applications


Ignore:
Timestamp:
2014-09-19T03:40:36+02:00 (10 years ago)
Author:
donvip
Message:

[josm_pbf] fix #josm9704 : fix write bugs + read bounds + honor required features

Location:
applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/io
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/io/PbfReader.java

    r30341 r30660  
    1313import java.util.Map;
    1414
     15import org.openstreetmap.josm.Main;
     16import org.openstreetmap.josm.data.Bounds;
    1517import org.openstreetmap.josm.data.coor.LatLon;
    1618import org.openstreetmap.josm.data.osm.DataSet;
     19import org.openstreetmap.josm.data.osm.DataSource;
    1720import org.openstreetmap.josm.data.osm.Node;
    1821import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
     
    3033import crosby.binary.Osmformat;
    3134import crosby.binary.Osmformat.DenseNodes;
     35import crosby.binary.Osmformat.HeaderBBox;
    3236import crosby.binary.Osmformat.HeaderBlock;
    3337import crosby.binary.Osmformat.Info;
     
    4549        public IllegalDataException exception = null;
    4650       
     51        private double parseRawDegrees(long raw) {
     52            return raw * .000000001;
     53        }
     54       
    4755        @Override
    4856        protected void parse(HeaderBlock header) {
     57           
     58            for (String requiredFeature : header.getRequiredFeaturesList()) {
     59                switch (requiredFeature) {
     60                case "OsmSchema-V0.6":
     61                    ds.setVersion("0.6");
     62                    break;
     63                case "DenseNodes":
     64                    break;
     65                default:
     66                    throw new UnsupportedOperationException("Unsupported feature: "+requiredFeature);
     67                }
     68            }
     69           
     70            HeaderBBox bbox = header.getBbox();
     71            if (bbox != null) {
     72                double minlat = parseRawDegrees(bbox.getBottom());
     73                double minlon = parseRawDegrees(bbox.getLeft());
     74                double maxlat = parseRawDegrees(bbox.getTop());
     75                double maxlon = parseRawDegrees(bbox.getRight());
     76                Bounds b = new Bounds(minlat, minlon, maxlat, maxlon);
     77                if (!b.isCollapsed() && LatLon.isValidLat(minlat) && LatLon.isValidLat(maxlat)
     78                                     && LatLon.isValidLon(minlon) && LatLon.isValidLon(maxlon)) {
     79                    ds.dataSources.add(new DataSource(b, header.getSource()));
     80                } else {
     81                    Main.error("Invalid Bounds: "+b);
     82                }
     83            }
    4984        }
    5085
  • applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/io/PbfWriter.java

    r30659 r30660  
    332332            public void processSources(Collection<DataSource> sources) {
    333333                switchTypes();
    334                 for (DataSource source: sources) {
    335                     processBounds(source);
     334                // Can only write one bbox
     335                if (!sources.isEmpty()) {
     336                    processBounds(sources.iterator().next());
    336337                }
    337338            }
     
    356357                }
    357358                for (Node n : node) {
    358                     nodes.add(n);
    359                     checkLimit();
     359                    if (n.getCoor() != null) {
     360                        nodes.add(n);
     361                        checkLimit();
     362                    }
    360363                }
    361364            }
     
    410413            Osmformat.HeaderBBox.Builder bbox = Osmformat.HeaderBBox.newBuilder();
    411414            bbox.setLeft(mapRawDegrees(entity.bounds.getMinLon()));
    412             bbox.setBottom(mapRawDegrees(entity.bounds.getMaxLat()));
     415            bbox.setBottom(mapRawDegrees(entity.bounds.getMinLat()));
    413416            bbox.setRight(mapRawDegrees(entity.bounds.getMaxLon()));
    414             bbox.setTop(mapRawDegrees(entity.bounds.getMinLat()));
     417            bbox.setTop(mapRawDegrees(entity.bounds.getMaxLat()));
    415418            headerblock.setBbox(bbox);
    416419
Note: See TracChangeset for help on using the changeset viewer.