Roar:

I think you could also try patching geotools to be forgiving in this case.
--
Jody Garnett


On Mon, Dec 5, 2022 at 7:07 AM Roar Brænden <roar.brenden...@gmail.com>
wrote:

> Hi,
>
> I've looked more into how to handle this irregular capabilities document
> within GeoTools, and found a solution that works without contacting NASA.
> It isn't the prettiest thing, but it works. The main point is to make a
> custom WMTSConfiguration that overrides the binding for positiveInteger.
>
> I've made a gist of the solution, if anyone is interested.
>
> https://gist.github.com/roarbra/c676cdc933fe2c4880c9e17995e9516d
>
> Best regards,
> Roar Brænden
>
>
> 2. des. 2022 kl. 16:09 skrev Matthijs Laan via GeoTools-GT2-Users <
> geotools-gt2-users@lists.sourceforge.net>:
>
> Looking further into this specific service, apparently this WMTS
> capabilities document is generated by a Lua script that just copies the
> width and height values from a YAML configuration file, without making sure
> the resulting capabilities valid according to the WMTS schema.
>
> The Lua code is here:
> https://github.com/nasa-gibs/onearth/blob/main/src/modules/gc_service/gc_service.lua#L514
>
> An example YAML file with a 85.5 height for a legend is here, among other
> places:
> https://github.com/nasa-gibs/onearth/blob/main/docker/sample_configs/layers/epsg4326/best/GEDI_ISS_L3_Elevation_Mean_Lowest_Mode_201904-202004.yaml#L43
>
> Maybe you can send an e-mail to supp...@earthdata.nasa.gov to ask them to
> change their YAML files to use integer legend widths and heights or create
> an issue in their GitHub repository.
>
> Matthijs
>
> On 02/12/2022 11.15, Matthijs Laan via GeoTools-GT2-Users wrote:
>
> XML Schema says Capabilities are invalid.
>
>                     <attribute name="width" type="positiveInteger">
>                         <annotation>
>                             <documentation>Width (in pixels) of the legend
> image</documentation>
>                         </annotation>
>                     </attribute>
>                     <attribute name="height" type="positiveInteger">
>                         <annotation>
>                             <documentation>Height (in pixels) of the
> legend image</documentation>
>                         </annotation>
>                     </attribute>
>
> Matthijs
>
> On 30/11/2022 15.55, Roar Brænden wrote:
>
> Hi,
>
> It seems like this height=85.5 is coming from the capabilities document.
> Here for instance:
>
> <Style isDefault="true">
> <ows:Title xml:lang="en">default</ows:Title>
> <ows:Identifier>default</ows:Identifier>
> <LegendURL width="378" xlink:href="
> https://gibs.earthdata.nasa.gov/legends/AMSU_Brightness_Temp_H.svg";
> xlink:role="http://earthdata.nasa.gov/gibs/legend-type/horizontal"; height
> ="85.5" format="image/svg+xml" xlink:title="GIBS Color Map Legend:
> Horizontal" xlink:type="simple"/>
> <LegendURL width="135" xlink:href="
> https://gibs.earthdata.nasa.gov/legends/AMSU_Brightness_Temp_V.svg";
> xlink:role="http://earthdata.nasa.gov/gibs/legend-type/vertical"; height="
> 288" format="image/svg+xml" xlink:title="GIBS Color Map Legend: Vertical"
> xlink:type="simple"/>
> </Style>
>
> Haven't looked in the WMTS specification to see if that is against the
> rules, but sure isn't anything the user could fix. Geotools is tolerant
> elsewhere, so it could certainly be a place for a little flexibility. Not
> sure how to handle it though.
>
> Best regards,
>
> Roar Brænden
>
>
> 30. nov. 2022 kl. 10:11 skrev Ian Turton <ijtur...@gmail.com>:
>
> Height is in pixels and is an integer value so your value of 85.5 is a
> problem, your code example doesn't show how you are generating the size
> request but I would expect a height/width of 255 or 512 for a WMTS request.
> It's possible that the GeoTools WMTS code doesn't understand the TIME
> dimension or the value RESTful as an encoding, you'll need to turn the
> logging level up to find out exactly why that URL is being used.
>
> Ian
>
> On Wed, 30 Nov 2022 at 08:45, Daniel Kindermann <daniel.k...@gmx.de>
> wrote:
>
>> Hello GeoTools community,
>>
>> I'm new to GeoTools. Currently I'm trying to establish a connection to a
>> WMTS. I followed the instructions in the WMTS — GeoTools 28-SNAPSHOT
>> User Guide
>> <https://docs.geotools.org/stable/userguide/extension/wmts/index.html#wmtstileservice>.
>> Unfortunately the request to the WMTS failes.
>>
>> *Here are my system information:*
>>
>> GeoTools version 28-SNAPSHOT (built from
>> r175672287370cf2c54eb30f2bbaa04f743835523)
>> Java version: 17.0.4.1
>> Operating system: Windows 10 10.0
>> GeoTools jars on classpath:
>>
>> I use Maven. My pom.xml is pretty much the one from the quickstart
>> tutorial but of course I added the gt-wmts dependency.
>>
>> *Here is my error message:*
>>
>> Nov. 30, 2022 9:39:18 AM org.geotools.data.ows.AbstractOpenWebService
>> internalIssueRequest
>> SCHWERWIEGEND: Failed to execute request
>> https://gibs.earthdata.nasa.gov/wmts/epsg4326/best/wmts.cgi?REQUEST=GetCapabilities&VERSION=1.0.0&SERVICE=WMTS
>> Exception in thread "main" java.lang.RuntimeException: Parsing failed for
>> height: java.lang.NumberFormatException: For input string: "85.5"
>>     at org.geotools.xsd.impl.ParseExecutor.visit(ParseExecutor.java:153)
>>     at
>> org.geotools.xsd.impl.BindingWalker$BindingExecutionChain.execute(BindingWalker.java:218)
>>     at org.geotools.xsd.impl.BindingWalker.walk(BindingWalker.java:184)
>>     at org.geotools.xsd.impl.BindingWalker.walk(BindingWalker.java:188)
>>     at
>> org.geotools.xsd.impl.ElementHandlerImpl.startElement(ElementHandlerImpl.java:180)
>>     at
>> org.geotools.xsd.impl.ParserHandler.startElement(ParserHandler.java:378)
>>     at
>> java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:518)
>>     at
>> java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:183)
>>     at
>> java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:351)
>>     at
>> java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2726)
>>     at
>> java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
>>     at
>> java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
>>     at
>> java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:542)
>>     at
>> java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:889)
>>     at
>> java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:825)
>>     at
>> java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
>>     at
>> java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1224)
>>     at
>> java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:637)
>>     at
>> java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:326)
>>     at org.geotools.xsd.Parser.parse(Parser.java:183)
>>     at org.geotools.xsd.Parser.parse(Parser.java:125)
>>     at
>> org.geotools.ows.wmts.response.WMTSGetCapabilitiesResponse.<init>(WMTSGetCapabilitiesResponse.java:84)
>>     at
>> org.geotools.ows.wmts.WMTSSpecification$GetCapsRequest.createResponse(WMTSSpecification.java:415)
>>     at
>> org.geotools.ows.wmts.WMTSSpecification$GetCapsRequest.createResponse(WMTSSpecification.java:387)
>>     at
>> org.geotools.data.ows.AbstractOpenWebService.internalIssueRequest(AbstractOpenWebService.java:461)
>>     at
>> org.geotools.data.ows.AbstractOpenWebService.issueRequest(AbstractOpenWebService.java:489)
>>     at
>> org.geotools.data.ows.AbstractOpenWebService.negotiateVersion(AbstractOpenWebService.java:287)
>>     at
>> org.geotools.data.ows.AbstractOpenWebService.<init>(AbstractOpenWebService.java:124)
>>     at
>> org.geotools.data.ows.AbstractOpenWebService.<init>(AbstractOpenWebService.java:97)
>>     at
>> org.geotools.data.ows.AbstractOpenWebService.<init>(AbstractOpenWebService.java:88)
>>     at
>> org.geotools.data.ows.AbstractOpenWebService.<init>(AbstractOpenWebService.java:77)
>>     at
>> org.geotools.ows.wmts.WebMapTileServer.<init>(WebMapTileServer.java:151)
>>     at org.geotools.tutorial.App.main(App.java:28)
>> Caused by: java.lang.NumberFormatException: For input string: "85.5"
>>     at
>> java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
>>     at java.base/java.lang.Integer.parseInt(Integer.java:668)
>>     at java.base/java.math.BigInteger.<init>(BigInteger.java:536)
>>     at java.base/java.math.BigInteger.<init>(BigInteger.java:674)
>>     at
>> org.geotools.xs.bindings.XSIntegerBinding.parse(XSIntegerBinding.java:96)
>>     at org.geotools.xsd.impl.ParseExecutor.visit(ParseExecutor.java:142)
>>     ... 32 more
>>
>> *Here is my code sample: *
>>
>> public class App {
>>     public static void main(String[] args) throws ServiceException,
>> IOException {
>>
>>         System.out.println(GeoTools.getAboutInfo());
>>
>>         URL url = null;
>>         try {
>>           url = new URL("
>> https://gibs.earthdata.nasa.gov/wmts/epsg4326/best/wmts.cgi";);
>>         } catch (MalformedURLException e) {
>>           // will not happen
>>         }
>>         WebMapTileServer wmts = null;
>>         try {
>>           wmts = new WebMapTileServer(url);
>>         } catch (IOException e) {
>>           // There was an error communicating with the server
>>           // For example, the server is down
>>         } catch (ServiceException e) {
>>           // The server returned a ServiceException (unusual in this case)
>>         } catch (SAXException e) {
>>           // Unable to parse the response from the server
>>           // For example, the capabilities it returned was not valid
>>         }
>>
>>         System.out.println(wmts.getCapabilities().getService().getName());
>>     }
>> }
>>
>> I tried different servers. I get a response to a manual request from all
>> of them.
>>
>> It would be very much appreciated if anyone has a solution or a hint for
>> me.
>>
>> Thanks in advance,
>>
>> Daniel
>> _______________________________________________
>> GeoTools-GT2-Users mailing list
>> GeoTools-GT2-Users@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
>>
>
>
> --
> Ian Turton
> _______________________________________________
> GeoTools-GT2-Users mailing list
> GeoTools-GT2-Users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
>
>
>
>
> _______________________________________________
> GeoTools-GT2-Users mailing 
> listGeoTools-GT2-Users@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
>
>
>
>
> _______________________________________________
> GeoTools-GT2-Users mailing 
> listGeoTools-GT2-Users@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
>
>
> _______________________________________________
> GeoTools-GT2-Users mailing list
> GeoTools-GT2-Users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
>
>
> _______________________________________________
> GeoTools-GT2-Users mailing list
> GeoTools-GT2-Users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
>
_______________________________________________
GeoTools-GT2-Users mailing list
GeoTools-GT2-Users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users

Reply via email to