1

I am using GeoServer 2.13. I am trying to load WMTS layer into ArcGIS Desktop, but WMTS layer is not loading into it. When I am trying to load into QGIS, its loading successfully. WMTS URL is below

http://localhost/geoserver/gwc/service/wmts?

I also checked the User access log, ArcGIS requested URL is different than QGIS requested URL.

ArcGIS request log:

0:0:0:0:0:0:0:1 - - [21/Jul/2018:13:18:37 +0530] "GET /geoserver/gwc/rest/wmts/nurc:Pk50095/raster/EPSG:4326/EPSG:4326:13/1965/8789?format=image/jpeg HTTP/1.1" 401 1253 0:0:0:0:0:0:0:1 - - [21/Jul/2018:13:18:37 +0530] "GET /geoserver/gwc/rest/wmts/nurc:Pk50095/raster/EPSG:4326/EPSG:4326:13/1964/8788?format=image/jpeg HTTP/1.1" 401 1254 0:0:0:0:0:0:0:1 - - [21/Jul/2018:13:18:37 +0530] "GET /geoserver/gwc/rest/wmts/nurc:Pk50095/raster/EPSG:4326/EPSG:4326:13/1964/8789?format=image/jpeg HTTP/1.1" 401 1254 0:0:0:0:0:0:0:1 - - [21/Jul/2018:13:18:41 +0530] "GET /geoserver/gwc/rest/wmts/nurc:Pk50095/raster/EPSG:4326/EPSG:4326:13/1967/8789?format=image/jpeg HTTP/1.1" 401 1171

Qgis request log:

0:0:0:0:0:0:0:1 - - [21/Jul/2018:13:30:11 +0530] "GET /geoserver/gwc/service/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=nurc:Pk50095&STYLE=raster&FORMAT=image/jpeg&TILEMATRIXSET=EPSG:4326&TILEMATRIX=EPSG:4326:12&TILEROW=983&TILECOL=4391 HTTP/1.1" 200 926 0:0:0:0:0:0:0:1 - - [21/Jul/2018:13:30:11 +0530] "GET /geoserver/gwc/service/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=nurc:Pk50095&STYLE=raster&FORMAT=image/jpeg&TILEMATRIXSET=EPSG:4326&TILEMATRIX=EPSG:4326:12&TILEROW=984&TILECOL=4397 HTTP/1.1" 200 7429 0:0:0:0:0:0:0:1 - - [21/Jul/2018:13:30:11 +0530] "GET /geoserver/gwc/service/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=nurc:Pk50095&STYLE=raster&FORMAT=image/jpeg&TILEMATRIXSET=EPSG:4326&TILEMATRIX=EPSG:4326:12&TILEROW=982&TILECOL=4398 HTTP/1.1" 200 7281

Can anyone suggest me how to load WMTS layer into ArcGIS Desktop?

  • The service URL to give to ArcGIS should be without parameters, so only localhost/geoserver/gwc/service/wmts? – nmtoken Sep 23 '18 at 21:43
  • @nmtoken Are you able to access GeoServer WMTS layer into ArcGIS Desktop using this URL? – sumant singh Sep 25 '18 at 4:15
  • Well, using a URL like localhost/gs213/gwc/service/wmts? in the Add WMTS Server dialogue of ArcMap (10.3.1) works for me, in that ArcMap is able to create a WMTS GetCapabilities (GC) request and parse the response to give a list of layers. If I do the same for QGIS, I get an error because QGIS makes a WMS request! QGIS needs the full GC request with parameters, or a static capabilities document. The GeoServer GC response gives a ServiceMetadataURL URL for a static capabilities document pointing to something like ...rest/wmts/WMTSCapabilities.xml"/> – nmtoken Sep 25 '18 at 10:59
  • If you look at the GeoServer GC response you will see that the ResourceURL for a layer is specified with a template like <ResourceURL format="image/jpeg" resourceType="tile" template="http://localhost/gs213/inspire-wg/gwc/rest/wmts/UKCoShelf_BGS_1M_SBS/{style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}?format=image/jpeg"/>. ArcMap is doing it's best trying to follow the info that the service has given it, when it requests, http://localhost/gs213/inspire-wg/gwc/rest/wmts/UKCoShelf_BGS_1M_SBS/raster/EPSG:4326/EPSG:4326:0/0/1?format=image/jpeg the issue is the resource doesn't exist – nmtoken Sep 25 '18 at 11:08
1

It seems that Arcmap is not making a key value pair (kvp) request of the sort that geoserver expects. So it would seem not to be parsing (or following) the capabilities file.

<ows:Operation name="GetTile">
  <ows:DCP>
    <ows:HTTP>
      <ows:Get xlink:href="http://localhost:9080/geoserver/gwc/service/wmts?">
        <ows:Constraint name="GetEncoding">
          <ows:AllowedValues>
            <ows:Value>KVP</ows:Value>
          </ows:AllowedValues>
        </ows:Constraint>
      </ows:Get>
    </ows:HTTP>
  </ows:DCP>
</ows:Operation>

So having advertised that it won't accept REST style requests GeoServer really shouldn't then advertise them under the layers (But I need to check the spec to be sure):

      <ResourceURL format="image/png" resourceType="tile" template="http://localhost:9080/geoserver/gwc/rest/wmts/topp:states/{style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}?format=image/png"/>
      <ResourceURL format="image/jpeg" resourceType="tile" template="http://localhost:9080/geoserver/gwc/rest/wmts/topp:states/{style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}?format=image/jpeg"/>
      <ResourceURL format="text/plain" resourceType="FeatureInfo" template="http://localhost:9080/geoserver/gwc/rest/wmts/topp:states/{style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}/{J}/{I}?format=text/plain"/>

However when I try

http://localhost:9080/geoserver/gwc/rest/wmts/topp:states/population/EPSG:4326/EPSG:4326:0/0/0?format=image/png

it does return an image so it should work in ArcMap.

It is possible that you can force kvp instead of rest in the gui somewhere, or it maybe that you will need to purchase an additional plugin to use interoperable services.

  • I tried to implement your valuable answer. I also tried with external geowebcache but still, I am facing the same problem. can you share me any link or document to implement "force kvp instead of rest in the GUI"? – sumant singh Jul 24 '18 at 4:02
  • 1
    I'm afraid I don't know much about arcmap – Ian Turton Jul 24 '18 at 8:34
  • The issue is more that the GetCapabilities response gives URL template that isn't honoured – nmtoken Sep 25 '18 at 10:50
  • I started editing this, but it probably would have looked like vandalism so I reverted. One issue here is that REST does not have a URL style, (it's a common misconception); REST is driven by hypermedia, the client parses the hypermedia and discovers the links it needs to follow to get the resource, it doesn't create them... I would say that the GC advertises that only KVP is supported, (rather than REST not) and the ResourceURL does indeed give a URL template including a KVP i.e. ...format=text/plain so it isn't advertising something it doesn't support. – nmtoken Sep 27 '18 at 11:55
  • I don't use GeoServer (or indeed ArcMap) that often so I may indeed have configured something incorrectly, but as per my comment to the question, if I do a GC request to my WMTS service (running 2.13.2) the response gives me a URL that doesn't exist (localhost/gs213/gwc/rest/wmts/WMTSCapabilities.xml) and similarly the (KVP) tile request I gave points to a resource that doesn't exist, That's nothing to do with ArcMap. – nmtoken Sep 27 '18 at 12:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.