Changeset 9610 in josm


Ignore:
Timestamp:
2016-01-24T14:42:03+01:00 (3 years ago)
Author:
stoecker
Message:

fix #12425 - add checksum based no-tile detection

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/data/maps.xsd

    r9517 r9610  
    680680                                                                </xs:complexType>
    681681                                                        </xs:element>
     682                                                        <!-- list of checksums, that indicate "no tile at this zoom level" situation -->
     683                                                        <xs:element name="no-tile-checksum" minOccurs="0" maxOccurs="unbounded">
     684                                                                <xs:complexType>
     685                                                                        <xs:attribute name="type" type="xs:string" />
     686                                                                        <xs:attribute name="value" type="xs:string" />
     687                                                                </xs:complexType>
     688                                                        </xs:element>
    682689                                                        <!-- tile size provided by imagery source. Default - 256 -->
    683690                                                        <xs:element name="tile-size" minOccurs="0" maxOccurs="1" type="xs:positiveInteger" />
  • trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java

    r9371 r9610  
    220220        @pref String description;
    221221        @pref Map<String, String> noTileHeaders;
     222        @pref Map<String, String> noTileChecksums;
    222223        @pref int tileSize = OsmMercator.DEFAUL_TILE_SIZE;
    223224        @pref Map<String, String> metadataHeaders;
     
    281282            }
    282283
     284            if (i.noTileChecksums != null && !i.noTileChecksums.isEmpty()) {
     285                noTileChecksums = i.noTileChecksums;
     286            }
     287
    283288            if (i.metadataHeaders != null && !i.metadataHeaders.isEmpty()) {
    284289                metadataHeaders = i.metadataHeaders;
     
    409414            noTileHeaders = e.noTileHeaders;
    410415        }
     416        if (e.noTileChecksums != null) {
     417            noTileChecksums = e.noTileChecksums;
     418        }
    411419        setTileSize(e.tileSize);
    412420        metadataHeaders = e.metadataHeaders;
     
    440448        this.description = i.description;
    441449        this.noTileHeaders = i.noTileHeaders;
     450        this.noTileChecksums = i.noTileChecksums;
    442451        this.metadataHeaders = i.metadataHeaders;
    443452        this.isEpsg4326To3857Supported = i.isEpsg4326To3857Supported;
     
    485494                Objects.equals(this.description, other.description) &&
    486495                Objects.equals(this.noTileHeaders, other.noTileHeaders) &&
     496                Objects.equals(this.noTileChecksums, other.noTileChecksums) &&
    487497                Objects.equals(this.metadataHeaders, other.metadataHeaders);
    488498    }
     
    978988
    979989    /**
     990     * Sets the map of &lt;checksum type, checksum value&gt; that if any tile with that checksum
     991     * will be returned, then this tile will be treated as "no tile at this zoom level"
     992     *
     993     * @param noTileChecksums Map of &lt;checksum type, checksum value&gt; which will be treated as "no tile at this zoom level"
     994     * @since 9610
     995     */
     996    public void setNoTileChecksums(Map<String, String> noTileChecksums) {
     997       this.noTileChecksums = noTileChecksums;
     998    }
     999
     1000    @Override
     1001    public Map<String, String> getNoTileChecksums() {
     1002        return noTileChecksums;
     1003    }
     1004
     1005    /**
    9801006     * Returns the map of &lt;header name, metadata key&gt; indicating, which HTTP headers should
    9811007     * be moved to metadata
  • trunk/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java

    r9414 r9610  
    206206        Collection<String> newKnownDefaults = new TreeSet<>(knownDefaults);
    207207        for (ImageryInfo def : defaultLayers) {
    208             // temporary migration code, so all user preferences will get updated with new settings from JOSM site (can be removed ~Dez. 2015)
    209             if (def.getNoTileHeaders() != null || def.getTileSize() > 0 || def.getMetadataHeaders() != null) {
    210                 for (ImageryInfo i: layers) {
    211                     if (isSimilar(def,  i)) {
    212                         if (def.getNoTileHeaders() != null) {
    213                             i.setNoTileHeaders(def.getNoTileHeaders());
    214                         }
    215                         if (def.getTileSize() > 0) {
    216                             i.setTileSize(def.getTileSize());
    217                         }
    218                         if (def.getMetadataHeaders() != null && def.getMetadataHeaders().size() > 0) {
    219                             i.setMetadataHeaders(def.getMetadataHeaders());
    220                         }
    221                         changed = true;
    222                     }
    223                 }
    224             }
    225 
    226208            if (def.isDefaultEntry()) {
    227209                boolean isKnownDefault = false;
  • trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java

    r9414 r9610  
    4545        SHAPE,
    4646        NO_TILE,
     47        NO_TILESUM,
    4748        METADATA,
    4849        UNKNOWN,            // element is not recognized in the current context
     
    9495        private List<String> projections;
    9596        private Map<String, String> noTileHeaders;
     97        private Map<String, String> noTileChecksums;
    9698        private Map<String, String> metadataHeaders;
    9799
     
    107109            projections = null;
    108110            noTileHeaders = null;
     111            noTileChecksums = null;
    109112        }
    110113
     
    125128                    newState = State.ENTRY;
    126129                    noTileHeaders = new HashMap<>();
     130                    noTileChecksums = new HashMap<>();
    127131                    metadataHeaders = new HashMap<>();
    128132                }
     
    170174                    noTileHeaders.put(atts.getValue("name"), atts.getValue("value"));
    171175                    newState = State.NO_TILE;
     176                } else if ("no-tile-checksum".equals(qName)) {
     177                    noTileChecksums.put(atts.getValue("type"), atts.getValue("value"));
     178                    newState = State.NO_TILESUM;
    172179                } else if ("metadata-header".equals(qName)) {
    173180                    metadataHeaders.put(atts.getValue("header-name"), atts.getValue("metadata-key"));
     
    225232                    entry.setNoTileHeaders(noTileHeaders);
    226233                    noTileHeaders = null;
     234                    entry.setNoTileChecksums(noTileChecksums);
     235                    noTileChecksums = null;
    227236                    entry.setMetadataHeaders(metadataHeaders);
    228237                    metadataHeaders = null;
Note: See TracChangeset for help on using the changeset viewer.