Ignore:
Timestamp:
2016-08-21T07:42:12+02:00 (8 years ago)
Author:
gerdp
Message:
  • don't ignore bounds data
  • use DataSet.setUploadDiscouraged(true) if any OSM primitive is lacking the version info
File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/o5m/src/org/openstreetmap/josm/plugins/o5m/io/O5mReader.java

    r32833 r32857  
    2828import java.util.Map;
    2929
     30import org.openstreetmap.josm.Main;
     31import org.openstreetmap.josm.data.Bounds;
     32import org.openstreetmap.josm.data.DataSource;
    3033import org.openstreetmap.josm.data.coor.LatLon;
    3134import org.openstreetmap.josm.data.osm.DataSet;
     
    5053public class O5mReader extends AbstractReader {
    5154        public IllegalDataException exception = null;
    52 
     55        private boolean discourageUpload;
     56       
    5357    private static void checkCoordinates(LatLon coor) throws IllegalDataException {
    5458        if (!coor.isValid()) {
     
    115119        private int version;
    116120                private User osmUser;
    117        
     121        private String header;
    118122        /**
    119123         * A parser for the o5m format
    120          * @param processor A mapProcessor instance
    121124         * @param stream The InputStream that contains the OSM data in o5m format
    122          * @param skipArray An Array of longs that is used to hold information of file position of the first occurrence of
    123          * each known 05m data type (esp. nodes, ways, and relations).
    124125         */
    125126        O5mReader(InputStream stream) {
     
    144145                                throw new IOException(tr("wrong header byte ") + Integer.toHexString(start));
    145146                        readFile();
     147                        if (discourageUpload)
     148                                ds.setUploadDiscouraged(true);
    146149                } catch (IOException e) {
    147150                        e.printStackTrace();
     
    189192                        else if (fileType == WAY_DATASET) readWay();
    190193                        else if (fileType == REL_DATASET) readRel();
    191                         //else if (fileType == BBOX_DATASET) readBBox();
     194                        else if (fileType == BBOX_DATASET) readBBox();
    192195                        else if (fileType == TIMESTAMP_DATASET) readFileTimestamp();
    193196                        else if (fileType == HEADER_DATASET) readHeader();
     
    222225         * @throws IOException
    223226         */
    224                 /*
    225227        private void readBBox() {
    226                 double leftf = (double) (100L*readSignedNum32()) * FACTOR;
    227                 double bottomf = (double) (100L*readSignedNum32()) * FACTOR;
    228                 double rightf = (double) (100L*readSignedNum32()) * FACTOR;
    229                 double topf = (double) (100L*readSignedNum32()) * FACTOR;
    230                 assert bytesToRead == 0;
    231                 setBBox(bottomf, leftf, topf, rightf);
    232         }
    233                  */
     228                double minlon = FACTOR * 100L * readSignedNum32();
     229                double minlat = FACTOR * 100L * readSignedNum32();
     230                double maxlon = FACTOR * 100L * readSignedNum32();
     231                double maxlat = FACTOR * 100L * readSignedNum32();
     232
     233            Bounds b = new Bounds(minlat, minlon, maxlat, maxlon);
     234            if (!b.isCollapsed() && LatLon.isValidLat(minlat) && LatLon.isValidLat(maxlat)
     235                                 && LatLon.isValidLon(minlon) && LatLon.isValidLon(maxlon)) {
     236                ds.dataSources.add(new DataSource(b, header));
     237            } else {
     238                Main.error("Invalid Bounds: "+b);
     239            }
     240        }
    234241
    235242        /**
     
    255262                        assert flat >= -90.0 && flat <= 90.0; 
    256263                        assert flon >= -180.0 && flon <= 180.0; 
     264                        if (version == 0)
     265                                discourageUpload = true;
    257266                        Node node = new Node(lastNodeId, version == 0 ? 1:version);
    258267                        node.setCoor(new LatLon(flat, flon).getRoundedToOsmPrecision());
     
    295304                        if (bytesToRead == 0)
    296305                                return; // only wayId + version: this is a delete action, we ignore it
     306                        if (version == 0)
     307                                discourageUpload = true;
    297308                        final Way way = new Way(lastWayId, version == 0 ? 1:version);
    298309                        checkChangesetId(lastChangeSet);
     
    339350                        if (bytesToRead == 0)
    340351                                return; // only relId + version: this is a delete action, we ignore it
     352                        if (version == 0)
     353                                discourageUpload = true;
    341354                        final Relation rel = new Relation(lastRelId, version == 0 ? 1:version);
    342355                        checkChangesetId(lastChangeSet);
     
    565578                        throw new IOException(tr("unsupported header"));
    566579                }
     580                header = new String(ioBuf, 0, 3, "UTF-8");
    567581        }
    568582       
Note: See TracChangeset for help on using the changeset viewer.