Changeset 8584 in josm


Ignore:
Timestamp:
2015-07-08T20:59:09+02:00 (9 years ago)
Author:
wiktorn
Message:
  • added axis definition to ESPG projections definition, where it's not default (i.e. North/East)
  • added switchXY boolean in Projection interface
  • WMTS and WMS (1.3.0) uses now switchXY when doing requests against servers
  • better error reporting when there are problems with parsing the WMTS TileSource

Addresses: #10623

Now http://webgis.linz.at/WMTS/1.0.0/getCapabilities.xml should work.

Wallonie services still being debugged.

Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/data/projection/epsg

    r8568 r8584  
    2222<2154> +proj=lcc +lat_0=46.5 +lat_1=44 +lat_2=49 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +nadgrids=null +units=m +bounds=-5.5,41,10.2,51  <>
    2323# PUWG 2000 Zone 5 (Poland)
    24 <2176> +proj=tmerc +lon_0=15 +k_0=0.999923 +x_0=5500000 +ellps=GRS80 +nadgrids=null +units=m +bounds=13.5,49,16.5,54.84  <>
     24<2176> +proj=tmerc +lon_0=15 +k_0=0.999923 +x_0=5500000 +ellps=GRS80 +nadgrids=null +units=m +axis=neu +bounds=13.5,49,16.5,54.84  <>
    2525# PUWG 2000 Zone 6 (Poland)
    26 <2177> +proj=tmerc +lon_0=18 +k_0=0.999923 +x_0=6500000 +ellps=GRS80 +nadgrids=null +units=m +bounds=16.5,49,19.5,54.84  <>
     26<2177> +proj=tmerc +lon_0=18 +k_0=0.999923 +x_0=6500000 +ellps=GRS80 +nadgrids=null +units=m +axis=neu +bounds=16.5,49,19.5,54.84  <>
    2727# PUWG 2000 Zone 7 (Poland)
    28 <2178> +proj=tmerc +lon_0=21 +k_0=0.999923 +x_0=7500000 +ellps=GRS80 +nadgrids=null +units=m +bounds=19.5,49,22.5,54.84  <>
     28<2178> +proj=tmerc +lon_0=21 +k_0=0.999923 +x_0=7500000 +ellps=GRS80 +nadgrids=null +units=m +axis=neu +bounds=19.5,49,22.5,54.84  <>
    2929# PUWG 2000 Zone 8 (Poland)
    30 <2179> +proj=tmerc +lon_0=24 +k_0=0.999923 +x_0=8500000 +ellps=GRS80 +nadgrids=null +units=m +bounds=22.5,49,25.5,54.84  <>
     30<2179> +proj=tmerc +lon_0=24 +k_0=0.999923 +x_0=8500000 +ellps=GRS80 +nadgrids=null +units=m +axis=neu +bounds=22.5,49,25.5,54.84  <>
    3131# PUWG 1992 (Poland)
    32 <2180> +proj=tmerc +lon_0=19 +k_0=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +nadgrids=null +units=m +bounds=14.12,49,24.15,54.84  <>
     32<2180> +proj=tmerc +lon_0=19 +k_0=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +nadgrids=null +units=m +axis=neu +bounds=14.12,49,24.15,54.84  <>
    3333# UTM France (DOM) Fort Marigot
    3434<2969> +proj=tmerc +lon_0=-63 +k_0=0.9996 +x_0=500000 +ellps=intl +towgs84=136.596,248.148,-429.789 +units=m +bounds=-63.25,17.6,-62.5,18.5  <>
     
    4646<3004> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +units=m +bounds=11,34,24,48 <>
    4747# SWEREF99 13 30 / EPSG:3008 (Sweden)
    48 <3008> +proj=tmerc +lon_0=13.5 +x_0=150000 +ellps=GRS80 +nadgrids=null +units=m +bounds=12.1,55.2,14.65,62.26  <>
     48<3008> +proj=tmerc +lon_0=13.5 +x_0=150000 +ellps=GRS80 +nadgrids=null +units=m +axis=neu +bounds=12.1,55.2,14.65,62.26  <>
    4949# LKS-92 (Latvia TM)
    50 <3059> +proj=tmerc +lon_0=24 +k_0=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +nadgrids=null +units=m +bounds=-180,-90,180,90  <>
     50<3059> +proj=tmerc +lon_0=24 +k_0=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +nadgrids=null +units=m +axis=neu +bounds=-180,-90,180,90  <>
    5151# Lambert Zone (Estonia)
    52 <3301> +proj=lcc +lat_0=57.51755393055556 +lat_1=59.333333333333336 +lat_2=58 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +nadgrids=null +units=m +bounds=21.64,56.05,28.58,61.13  <>
     52<3301> +proj=lcc +lat_0=57.51755393055556 +lat_1=59.333333333333336 +lat_2=58 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +nadgrids=null +units=m +axis=neu +bounds=21.64,56.05,28.58,61.13  <>
    5353# Belgian Lambert 2008
    5454<3812> +proj=lcc +lat_0=50d47'52.134" +lat_1=49d50'0" +lat_2=51d10'0" +lon_0=4d21'33.177" +x_0=649328 +y_0=665262 +ellps=GRS80 +nadgrids=null +units=m +bounds=2.54,49.51,6.4,51.5  <>
     
    7474<3950> +proj=lcc +lat_0=50 +lat_1=49.25 +lat_2=50.75 +lon_0=3 +x_0=1700000 +y_0=9200000 +ellps=GRS80 +nadgrids=null +units=m +bounds=-5.5,47.5,10.2,51.1  <>
    7575# ETRS89
    76 <4258> +proj=lonlat +ellps=GRS80 +datum=GRS80 +bounds=-180,-90,180,90  <>
     76<4258> +proj=lonlat +ellps=GRS80 +datum=GRS80 +axis=neu +bounds=-180,-90,180,90  <>
    7777# WGS 84
    78 <4326> +proj=lonlat +ellps=WGS84 +datum=WGS84 +bounds=-180,-90,180,90  <>
     78<4326> +proj=lonlat +ellps=WGS84 +datum=WGS84 +axis=neu +bounds=-180,-90,180,90  <>
    7979# Swiss Grid (Switzerland)
    8080<21781> +proj=somerc +lat_0=46d57'8.66" +lon_0=7d26'22.5" +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.374,15.056,405.346 +units=m +bounds=5.7,45.7,10.6,47.9  <>
     
    114114<31370> +proj=lcc +lat_0=90 +lat_1=49d50'0.00204" +lat_2=51d10'0.00204" +lon_0=4d22'2.952" +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=-99.06,53.32,-112.49,0.419,-0.83,1.885,-1.0 +units=m +bounds=2.54,49.51,6.4,51.5  <>
    115115# Gauß-Krüger Zone 2
    116 <31466> +proj=tmerc +lon_0=6 +x_0=2500000 +ellps=bessel +nadgrids=BETA2007.gsb +units=m +bounds=3.5,-5,8.5,85  <>
     116<31466> +proj=tmerc +lon_0=6 +x_0=2500000 +ellps=bessel +nadgrids=BETA2007.gsb +units=m +axis=neu +bounds=3.5,-5,8.5,85  <>
    117117# Gauß-Krüger Zone 3
    118 <31467> +proj=tmerc +lon_0=9 +x_0=3500000 +ellps=bessel +nadgrids=BETA2007.gsb +units=m +bounds=6.5,-5,11.5,85  <>
     118<31467> +proj=tmerc +lon_0=9 +x_0=3500000 +ellps=bessel +nadgrids=BETA2007.gsb +units=m +axis=neu +bounds=6.5,-5,11.5,85  <>
    119119# Gauß-Krüger Zone 4
    120 <31468> +proj=tmerc +lon_0=12 +x_0=4500000 +ellps=bessel +nadgrids=BETA2007.gsb +units=m +bounds=9.5,-5,14.5,85  <>
     120<31468> +proj=tmerc +lon_0=12 +x_0=4500000 +ellps=bessel +nadgrids=BETA2007.gsb +units=m +axis=neu +bounds=9.5,-5,14.5,85  <>
    121121# Gauß-Krüger Zone 5
    122 <31469> +proj=tmerc +lon_0=15 +x_0=5500000 +ellps=bessel +nadgrids=BETA2007.gsb +units=m +bounds=12.5,-5,17.5,85  <>
     122<31469> +proj=tmerc +lon_0=15 +x_0=5500000 +ellps=bessel +nadgrids=BETA2007.gsb +units=m +axis=neu +bounds=12.5,-5,17.5,85  <>
    123123# UTM zone 1N
    124124<32601> +proj=tmerc +lon_0=-177 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +units=m +bounds=-182,-5,-172,85  <>
  • trunk/src/org/openstreetmap/josm/data/imagery/TemplatedWMSTileSource.java

    r8540 r8584  
    139139        if (baseUrl.toLowerCase().contains("crs=epsg:4326")) {
    140140            switchLatLon = true;
    141         } else if (baseUrl.toLowerCase().contains("crs=") && "EPSG:4326".equals(myProjCode)) {
    142             switchLatLon = true;
     141        } else if (baseUrl.toLowerCase().contains("crs=")) {
     142            // assume WMS 1.3.0
     143            switchLatLon = Main.getProjection().switchXY();
    143144        }
    144145        String bbox;
  • trunk/src/org/openstreetmap/josm/data/imagery/WMTSTileSource.java

    r8571 r8584  
    4747import org.openstreetmap.josm.data.coor.LatLon;
    4848import org.openstreetmap.josm.data.projection.Projection;
     49import org.openstreetmap.josm.data.projection.Projections;
    4950import org.openstreetmap.josm.gui.ExtendedDialog;
    5051import org.openstreetmap.josm.io.CachedFile;
     
    6667    private static final String PATTERN_HEADER  = "\\{header\\(([^,]+),([^}]+)\\)\\}";
    6768
    68     private static final String URL_GET_ENCODING_PARAMS = "SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER={layer}&STYLE={style}&"
     69    private static final String URL_GET_ENCODING_PARAMS = "SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER={layer}&STYLE={Style}&"
    6970            + "FORMAT={format}&tileMatrixSet={TileMatrixSet}&tileMatrix={TileMatrix}&tileRow={TileRow}&tileCol={TileCol}";
    7071
     
    229230
    230231        } catch (Exception e) {
    231             Main.error(e);
    232         }
    233         return null;
     232            throw new IllegalArgumentException(e);
     233        }
    234234    }
    235235
     
    268268            matrixSet.crs = crsToCode(getStringByXpath(matrixSetNode, "SupportedCRS"));
    269269            NodeList tileMatrixList = getByXpath(matrixSetNode, "TileMatrix");
     270            Projection matrixProj = Projections.getProjectionByCode(matrixSet.crs);
     271            if (matrixProj == null) {
     272                // use current projection if none found. Maybe user is using custom string
     273                matrixProj = Main.getProjection();
     274            }
    270275            for (int matrixId = 0; matrixId < tileMatrixList.getLength(); matrixId++) {
    271276                Node tileMatrixNode = tileMatrixList.item(matrixId);
     
    274279                tileMatrix.scaleDenominator = Double.parseDouble(getStringByXpath(tileMatrixNode, "ScaleDenominator"));
    275280                String[] topLeftCorner = getStringByXpath(tileMatrixNode, "TopLeftCorner").split(" ");
    276                 tileMatrix.topLeftCorner = new EastNorth(Double.parseDouble(topLeftCorner[1]), Double.parseDouble(topLeftCorner[0]));
     281
     282                if(matrixProj.switchXY()) {
     283                    tileMatrix.topLeftCorner = new EastNorth(Double.parseDouble(topLeftCorner[1]), Double.parseDouble(topLeftCorner[0]));
     284                } else {
     285                    tileMatrix.topLeftCorner = new EastNorth(Double.parseDouble(topLeftCorner[0]), Double.parseDouble(topLeftCorner[1]));
     286                }
    277287                tileMatrix.tileHeight = Integer.parseInt(getStringByXpath(tileMatrixNode, "TileHeight"));
    278288                tileMatrix.tileWidth = Integer.parseInt(getStringByXpath(tileMatrixNode, "TileHeight"));
     
    291301    private static String crsToCode(String crsIdentifier) {
    292302        if (crsIdentifier.startsWith("urn:ogc:def:crs:")) {
    293             return crsIdentifier.replaceFirst("urn:ogc:def:crs:([^:]*):[^:]*:(.*)$", "$1:$2");
     303            return crsIdentifier.replaceFirst("urn:ogc:def:crs:([^:]*):.*:(.*)$", "$1:$2");
    294304        }
    295305        return crsIdentifier;
     
    439449        }
    440450        double scale = matrix.scaleDenominator * this.crsScale;
    441         EastNorth ret = new EastNorth(matrix.topLeftCorner.getX() + x * scale, matrix.topLeftCorner.getY() - y * scale);
     451        EastNorth ret = new EastNorth(matrix.topLeftCorner.east() + x * scale, matrix.topLeftCorner.north() - y * scale);
    442452        return Main.getProjection().eastNorth2latlon(ret).toCoordinate();
    443453    }
     
    589599        EastNorth min = proj.latlon2eastNorth(bounds.getMin());
    590600        EastNorth max = proj.latlon2eastNorth(bounds.getMax());
    591         return (int) Math.ceil(Math.abs(max.getY() - min.getY()) / scale);
     601        return (int) Math.ceil(Math.abs(max.north() - min.north()) / scale);
    592602    }
    593603
     
    601611        EastNorth min = proj.latlon2eastNorth(bounds.getMin());
    602612        EastNorth max = proj.latlon2eastNorth(bounds.getMax());
    603         return (int) Math.ceil(Math.abs(max.getX() - min.getX()) / scale);
     613        return (int) Math.ceil(Math.abs(max.east() - min.east()) / scale);
    604614    }
    605615}
  • trunk/src/org/openstreetmap/josm/data/projection/CustomProjection.java

    r8570 r8584  
    5050    protected Bounds bounds;
    5151    private double metersPerUnit = METER_PER_UNIT_DEGREE; // default to degrees
     52    private String axis = "enu"; // default axis orientation is East, North, Up
    5253
    5354    /**
     
    9899        no_defs("no_defs", false),
    99100        init("init", true),
     101        /** crs units to meter multiplier */
    100102        to_meter("to_meter", true),
     103        /** definition of axis for projection */
     104        axis("axis", true),
    101105        // JOSM extensions, not present in PROJ.4
    102106        wmssrs("wmssrs", true),
     
    212216            if (s != null) {
    213217                this.metersPerUnit = parseDouble(s, Param.to_meter.key);
     218            }
     219            s = parameters.get(Param.axis.key);
     220            if (s != null) {
     221                this.axis  = s;
    214222            }
    215223        }
     
    548556    }
    549557
     558    @Override
     559    public boolean switchXY() {
     560        // TODO: support for other axis orientation such as West South, and Up Down
     561        return this.axis.startsWith("ne");
     562    }
     563
    550564    private static Map<String, Double> getUnitsToMeters() {
    551565        Map<String, Double> ret = new ConcurrentHashMap<>();
  • trunk/src/org/openstreetmap/josm/data/projection/Projection.java

    r8568 r8584  
    7979     */
    8080    double getMetersPerUnit();
     81
     82    /**
     83     * Does this projection natural order of coordinates is North East,
     84     * instead of East North
     85     *
     86     * @return true if natural order of coordinates is North East, false if East North
     87     */
     88    boolean switchXY();
    8189}
  • trunk/src/org/openstreetmap/josm/gui/layer/WMTSLayer.java

    r8570 r8584  
    6969                return tileSource;
    7070            }
    71         } catch (Exception e) {
    72             Main.warn("Could not create imagery layer:");
     71            return null;
     72        } catch (IOException e) {
    7373            Main.warn(e);
     74            throw new IllegalArgumentException(e);
    7475        }
    75         return null;
    7676    }
    7777
  • trunk/test/data/wmts/getCapabilities-wien.xml

    r8569 r8584  
    6060                        <ResourceURL format="image/png" template="http://webgis.linz.at/WMTS/1.0.0/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" resourceType="tile"/>
    6161                </Layer>
    62                 <Layer>
    63                         <ows:Title>Stadtkarte</ows:Title>
    64                         <ows:WGS84BoundingBox crs="urn:ogc:def:crs:OGC:2:84">
    65                                 <ows:LowerCorner>14.42 48.21</ows:LowerCorner>
    66                                 <ows:UpperCorner>14.24 48.38</ows:UpperCorner>
    67                         </ows:WGS84BoundingBox>
    68                         <ows:Identifier>Stadtkarte</ows:Identifier>
    69                         <Style isDefault="true">
    70                                 <ows:Identifier>normal</ows:Identifier>
    71                         </Style>
    72                         <Format>image/png</Format>
    73                         <TileMatrixSetLink>
    74                                 <TileMatrixSet>Stadtkarte_standard</TileMatrixSet> 
    75                         </TileMatrixSetLink>
    76                         <ResourceURL format="image/png" template="http://webgis.linz.at/WMTS/1.0.0/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" resourceType="tile"/>
    77                 </Layer>
    78                 <Layer>
    79                         <ows:Title>Beschriftungen</ows:Title>
    80                         <ows:WGS84BoundingBox crs="urn:ogc:def:crs:OGC:2:84">
    81                                 <ows:LowerCorner>14.42 48.21</ows:LowerCorner>
    82                                 <ows:UpperCorner>14.24 48.38</ows:UpperCorner>
    83                         </ows:WGS84BoundingBox>
    84                         <ows:Identifier>Beschriftungen</ows:Identifier>
    85                         <Style isDefault="true">
    86                                 <ows:Identifier>normal</ows:Identifier>
    87                         </Style>
    88                         <Format>image/png</Format>
    89                         <TileMatrixSetLink>
    90                                 <TileMatrixSet>Beschriftungen_alles</TileMatrixSet>
    91                         </TileMatrixSetLink>
    92                         <ResourceURL format="image/png" template="http://webgis.linz.at/WMTS/1.0.0/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" resourceType="tile"/>
    93                 </Layer>
    94 
    9562                <TileMatrixSet>
    9663                        <ows:Identifier>Orthofotos_standard</ows:Identifier>
  • trunk/test/data/wmts/getcapabilities-pseudo-mercator.xml

    r8568 r8584  
    5353      <ows:Identifier>EPSG:3857:0</ows:Identifier>
    5454      <ScaleDenominator>559082264.0287178</ScaleDenominator>
    55       <TopLeftCorner>20037509.917339604 -20037508.342789244</TopLeftCorner>
     55      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
    5656      <TileWidth>256</TileWidth>
    5757      <TileHeight>256</TileHeight>
     
    6363      <ows:Identifier>EPSG:3857:1</ows:Identifier>
    6464      <ScaleDenominator>279541132.0143589</ScaleDenominator>
    65       <TopLeftCorner>20037509.917339604 -20037508.342789244</TopLeftCorner>
     65      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
    6666      <TileWidth>256</TileWidth>
    6767      <TileHeight>256</TileHeight>
     
    7373      <ows:Identifier>EPSG:3857:2</ows:Identifier>
    7474      <ScaleDenominator>139770566.0071794</ScaleDenominator>
    75       <TopLeftCorner>20037509.917339604 -20037508.342789244</TopLeftCorner>
     75      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
    7676      <TileWidth>256</TileWidth>
    7777      <TileHeight>256</TileHeight>
     
    8383      <ows:Identifier>EPSG:3857:3</ows:Identifier>
    8484      <ScaleDenominator>69885283.00358972</ScaleDenominator>
    85       <TopLeftCorner>20037509.917339604 -20037508.342789244</TopLeftCorner>
     85      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
    8686      <TileWidth>256</TileWidth>
    8787      <TileHeight>256</TileHeight>
     
    9393      <ows:Identifier>EPSG:3857:4</ows:Identifier>
    9494      <ScaleDenominator>34942641.50179486</ScaleDenominator>
    95       <TopLeftCorner>20037509.917339604 -20037508.342789244</TopLeftCorner>
     95      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
    9696      <TileWidth>256</TileWidth>
    9797      <TileHeight>256</TileHeight>
     
    103103      <ows:Identifier>EPSG:3857:5</ows:Identifier>
    104104      <ScaleDenominator>17471320.75089743</ScaleDenominator>
    105       <TopLeftCorner>20037509.917339604 -20037508.342789244</TopLeftCorner>
     105      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
    106106      <TileWidth>256</TileWidth>
    107107      <TileHeight>256</TileHeight>
     
    113113      <ows:Identifier>EPSG:3857:6</ows:Identifier>
    114114      <ScaleDenominator>8735660.375448715</ScaleDenominator>
    115       <TopLeftCorner>20037509.917339604 -20037508.342789244</TopLeftCorner>
     115      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
    116116      <TileWidth>256</TileWidth>
    117117      <TileHeight>256</TileHeight>
     
    123123      <ows:Identifier>EPSG:3857:7</ows:Identifier>
    124124      <ScaleDenominator>4367830.187724357</ScaleDenominator>
    125       <TopLeftCorner>20037509.917339604 -20037508.342789244</TopLeftCorner>
     125      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
    126126      <TileWidth>256</TileWidth>
    127127      <TileHeight>256</TileHeight>
     
    133133      <ows:Identifier>EPSG:3857:8</ows:Identifier>
    134134      <ScaleDenominator>2183915.093862179</ScaleDenominator>
    135       <TopLeftCorner>20037509.917339604 -20037508.342789244</TopLeftCorner>
     135      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
    136136      <TileWidth>256</TileWidth>
    137137      <TileHeight>256</TileHeight>
     
    143143      <ows:Identifier>EPSG:3857:9</ows:Identifier>
    144144      <ScaleDenominator>1091957.546931089</ScaleDenominator>
    145       <TopLeftCorner>20037509.917339604 -20037508.342789244</TopLeftCorner>
     145      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
    146146      <TileWidth>256</TileWidth>
    147147      <TileHeight>256</TileHeight>
     
    153153      <ows:Identifier>EPSG:3857:10</ows:Identifier>
    154154      <ScaleDenominator>545978.7734655447</ScaleDenominator>
    155       <TopLeftCorner>20037509.917339604 -20037508.342789244</TopLeftCorner>
     155      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
    156156      <TileWidth>256</TileWidth>
    157157      <TileHeight>256</TileHeight>
  • trunk/test/unit/org/openstreetmap/josm/data/imagery/WMTSTileSourceTest.java

    r8570 r8584  
    33
    44import static org.junit.Assert.assertEquals;
     5import static org.junit.Assert.assertTrue;
    56
    67import java.io.File;
     
    1011import org.junit.BeforeClass;
    1112import org.junit.Test;
     13import org.openstreetmap.gui.jmapviewer.TileXY;
    1214import org.openstreetmap.gui.jmapviewer.tilesources.TemplatedTMSTileSource;
    1315import org.openstreetmap.josm.JOSMFixture;
    1416import org.openstreetmap.josm.Main;
     17import org.openstreetmap.josm.data.Bounds;
    1518import org.openstreetmap.josm.data.coor.LatLon;
    1619import org.openstreetmap.josm.data.projection.Projections;
     
    6972        assertEquals("TileXMax", 5, testSource.getTileXMax(3));
    7073        assertEquals("TileYMax", 4, testSource.getTileYMax(3));
     74
    7175    }
    7276
     
    7579        Main.setProjection(Projections.getProjectionByCode("EPSG:31370"));
    7680        WMTSTileSource testSource = new WMTSTileSource(testImageryWALLONIE);
    77     }
     81        Bounds wallonieBounds = new Bounds(
     82                new LatLon(49.485372459967245, 2.840548314430268),
     83                new LatLon(50.820959517561256, 6.427849693016202)
     84                );
     85        verifyBounds(wallonieBounds, testSource, 10, 20324, 17724);
     86
     87    }
     88
     89    private void verifyBounds(Bounds bounds, WMTSTileSource testSource, int z, int x, int y) {
     90        LatLon ret = new LatLon(testSource.tileXYToLatLon(y, y, z));
     91        assertTrue(ret.toDisplayString() + " doesn't lie within: " + bounds.toString(), bounds.contains(ret));
     92    }
     93
     94
    7895
    7996    @Test
     
    83100        int zoomOffset = 10;
    84101
     102        // Linz - 11/1105/709.png
    85103        verifyMercatorTile(testSource, 0, 0, 1, zoomOffset);
     104        verifyMercatorTile(testSource, 1105, 709, 2, zoomOffset);
     105        verifyMercatorTile(testSource, 1, 1, 1, zoomOffset);
     106        verifyMercatorTile(testSource, 2, 2, 1, zoomOffset);
    86107        verifyMercatorTile(testSource, 0, 0, 2, zoomOffset);
    87108        verifyMercatorTile(testSource, 1, 1, 2, zoomOffset);
    88         for (int x = 0; x < 4; x++) {
    89             for (int y = 0; y < 4; y++) {
     109
     110
     111        LatLon ll = new LatLon(testSource.tileXYToLatLon(500,  500, 1));
     112
     113        TileXY xy = testSource.latLonToTileXY(new LatLon(48.21, 14.24).toCoordinate(), 1);
     114        assertTrue("X index is negative: " + xy.getXIndex(), xy.getXIndex() > 0);
     115        assertTrue(xy.getYIndex() > 0);
     116        for(int x = 0; x < 4; x++) {
     117            for(int y = 0; y < 4; y++) {
    90118                verifyMercatorTile(testSource, x, y, 3, zoomOffset);
    91119            }
    92120        }
    93         for (int x = 0; x < 8; x++) {
    94             for (int y = 0; y < 4; y++) {
     121        for(int x = 0; x < 8; x++) {
     122            for(int y = 0; y < 4; y++) {
    95123                verifyMercatorTile(testSource, x, y, zoomOffset);
    96124            }
    97125        }
    98126
    99         verifyMercatorTile(testSource, 2 << 9 - 1, 2 << 8 - 1, zoomOffset);
     127        verifyMercatorTile(testSource, 2<<9 - 1, 2<<8 - 1, zoomOffset);
    100128
    101129        assertEquals("TileXMax", 1, testSource.getTileXMax(1));
     
    122150        assertEquals("TileYMax", 74, testSource.getTileYMax(3));
    123151        assertEquals(
    124                 "http://mapy.geoportal.gov.pl/wss/service/WMTS/guest/wmts/TOPO?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=MAPA "
    125                 + "TOPOGRAFICZNA&STYLE=&FORMAT=image/jpeg&TileMatrixSet=EPSG:4326&TileMatrix=EPSG:4326:0&TileRow=1&TileCol=1",
     152                "http://mapy.geoportal.gov.pl/wss/service/WMTS/guest/wmts/TOPO?SERVICE=WMTS&REQUEST=GetTile&"
     153                + "VERSION=1.0.0&LAYER=MAPA TOPOGRAFICZNA&STYLE=&FORMAT=image/jpeg&tileMatrixSet=EPSG:4326&"
     154                + "tileMatrix=EPSG:4326:0&tileRow=1&tileCol=1",
    126155                testSource.getTileUrl(1,  1,  1));
    127156    }
Note: See TracChangeset for help on using the changeset viewer.