kartverket / NGIS-OpenAPI

Tjenestebasert grensesnitt mot NGIS, basert på OpenAPI og REST.
3 stars 9 forks source link

Get features med crs_EPSG=2583 gir bad request #110

Closed larsop closed 1 year ago

larsop commented 1 year ago

Testet denne

https://openapi-test13.kartverket.no/v1/datasets/b3930a04-dfbd-4887-8c02-c744c14f6181/features?bbox=557716.6009229957126080989837646484375,6699045.832963265478610992431640625,557727.258105255314148962497711181640625,6699068.2812737561762332916259765625&crs_EPSG=25832&normalized_for_visualization=true&limit=10000&query=eq(*,ArealressursFlate)

Denne gir nå en annen feil tilbake


594) 594 - HTTP Headers: Server=[nginx/1.14.1],Date=[Tue, 07 Feb 2023 08:22:13 GMT],Content-Type=[text/html],Content-Length=[173],Connection=[close] - 
2023-02-07 09:22:12,396 [main] DEBUG ApiClientHttpRequestInterceptor ngis.openapi.client.client.invoker.ApiClient$ApiClientHttpRequestInterceptor.logResponse(ApiClient.java:595) 595 - Response Body: <html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.14.1</center>
</body>
</html>
 - 
NilsIvarNes commented 1 year ago

Om du tar bort BBOX-filteret fra spørringa så svarer det hos meg i hvert fall: image

Ingen objekter innenfor angitt BBOX kanskje?

larsop commented 1 year ago

Det burde vært data hvis der hvis jeg har bruk riktig bbox. Kan du skjekke om det er data i basen ?

Hvis det ikke er data burde man også fått en annen mld enn bad request også.

NilsIvarNes commented 1 year ago

Jeg får ikke "bad request" når jeg sender inn spørringen du angir, men dette svaret:

{ "type": "FeatureCollection", "crs": { "type": "name", "properties": { "name": "EPSG:25832" } }, "features": [] }

Her finnes det data: image

Jeg får et fornuftig svar med data når jeg angir en bbox innenfor dette området.

larsop commented 1 year ago

1) Nå det feiler på tom liste så tyder det på at det er noe feil med den auto generte koden. Er dette testet av noen andre med autogenerert kode ?

2) Vedlagt er bilde av

POLYGON ((10.048219965180731 60.42358717068289, 10.04841996518073 60.42358717068289, 10.04841996518073 60.4237871706829, 10.048219965180731 60.4237871706829, 10.048219965180731 60.42358717068289))

bbox_fkb50

som da blir til

'bbox=557716.6009229957126080989837646484375,6699045.832963265478610992431640625,557727.258105255314148962497711181640625,6699068.2812737561762332916259765625&crs_EPSG=25832& '

Så jeg burde fått data tilbake.

NilsIvarNes commented 1 year ago

Veldig mye desimaler i koordinatene dine, men bboxen du angir nederst angir et område på ca 10x20m med nedre vestre hjørne på ca N=6699045 og Ø=557716. Dette stemmer ikke med firkanten du viser på kartet og i dette området er det ikke data (jf. skisse lenger opp i tråden)

larsop commented 1 year ago

OK , da tester jeg med nytt område i nærheten av Hallingby


           //Server POLYGON ((10.170758010553756 60.2679114417879, 10.171069697626468 60.276633824059374, 10.198321554802591 60.27639076345716, 10.198002618669145 60.267668466669384, 10.170758010553756 60.2679114417879))
            //Client bbox POLYGON ((564771.1673553517 6681823.152059217, 564771.1673553516 6682794.787117041, 566278.8326446546 6682794.787117038, 566278.8326446546 6681823.152059213, 564771.1673553517 6681823.152059217)) for srid 25832

Dette blir da

` https://openapi-test13.kartverket.no/v1/datasets/b3930a04-dfbd-4887-8c02-c744c14f6181/features?bbox=564771.167355351732112467288970947265625,6681823.152059216983616352081298828125,566278.832644654554314911365509033203125,6682794.7871170379221439361572265625&crs_EPSG=25832&normalized_for_visualization=true&limit=10000&query=eq(*,ArealressursFlate)

` Feilen er forsatt den samme

2023-02-07 14:03:13,676 [main] DEBUG ApiClientHttpRequestInterceptor ngis.openapi.client.client.invoker.ApiClient$ApiClientHttpRequestInterceptor.logResponse(ApiClient.java:595) 595 - Response Body: <html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.14.1</center>
</body>
</html>
 - 

Vedlagt data fra test på qms12 for det samme området med den gamle koden.

ar5_fc_Merged_farm_test_ngis_50.json.gz

og et bilde

bbox_2_fkb50

Hvis du vil jeg skal teste på bestemte steder så er det veldig fint om jeg bbox på denne måten i grader.

POLYGON ((10.170758010553756 60.2679114417879, 10.171069697626468 60.276633824059374, 10.198321554802591 60.27639076345716, 10.198002618669145 60.267668466669384, 10.170758010553756 60.2679114417879))

for da kan jeg ta ting rett i qgis, siden jeg ikke har Fyssak.

NilsIvarNes commented 1 year ago

Spørringen du angir over svarer fornuftig hos meg i Postman. Så da er det vel lite trolig at "bad request" svaret du får har noe med selve spørringen eller bbox å gjøre? Et eller annet i header e.l. da, kanskje?

larsop commented 1 year ago

Ja det høres slik ut, jeg bruker den autogenererte koden via yaml filen og feil melding jeg for tilbake hjelper meg ikke.

Kan dere sjekke i loggen på server siden om hva som er feil ?

Dette er de parameterene jeg har til igjennom java auto generert kode.

/**
     * Hent ut features fra et dataset
     * Henter en liste over alle dataset som brukeren har lese- eller skrivetilgang til.
     * <p><b>200</b> - OK
     * <p><b>401</b> - Gyldig autentisering av brukeren mangler eller er ugyldig
     * <p><b>406</b> - Formatet klienten ønsker på data er ugyldig. Klienten har f.eks en ugyldig Accept-header og kan ikke motta data på et format som serveren kan levere
     * <p><b>403</b> - Ugyldig brukernavn og/eller passord
     * <p><b>404</b> - Fant ikke angitt dataset
     * <p><b>500</b> - Intern feil på serveren
     * <p><b>501</b> - Intern feil på serveren (kallet er ikke implementert)
     * <p><b>503</b> - Intern feil på serveren (tjenesten er utilgjengelig)
     * @param xClientProductVersion Brukes for å kunne identifisere klienten som er brukt (required)
     * @param datasetId UUID of the dataset to get (required)
     * @param references Angir hvilke refererte features som skal hentes ut i tillegg til feature det spørres direkte etter med lokalid.  Punkter har ingen referanser, og parameteret påvirker derfor ikke uthenting av et punkt.  &#x60;none&#x60; - Ingen refererte features hentes ut. Ingen ekstra features låses. - Flater får *ikke* med linje-features til avgrensningskurver.  &#x60;direct&#x60; - Features med direkte referanser hentes ut. Kun direkte referanser låses. - Kurver får med features til flater som bruker kurven i avgrensningen, samt de andre linje-features til avgrensningskurvene i flatene. Både kurven og alle flatene låses, men ikke de andre linje-features i avgrensningen i flatene. - Flater får med alle linje-features til avgrensningskurvene i flaten. Kun flaten låses.  &#x60;all&#x60; - Features med direkte og indirekte tilhørende referanser hentes ut. Alle referanser som hentes ut låses. - Kurver får i tillegg til referanser fra &#x60;direct&#x60; også med:   - flate-features som har avgrensningskurver som begynner eller slutter i valgt linjes endepunkter    - linje-features i flate-features i forrige pkt som begynner eller slutter i valgt linjes endepunkter  - Flater får samme referanser som i &#x60;direct&#x60;. Både flaten og alle avgrensningskurvene låses.  (required)
     * @param lockingType Angir låsetype som skal brukes (foreløpig er kun &#x60;user_lock&#x60; støttet). Krever at brukeren har skrivetilgang mot dataset&#x27;et.  *user_lock*  Hver bruker har én lås per dataset. Hver gang data hentes ut med &#x60;user_lock&#x60; legges objektene til denne låsen.  Alle objekter i låsen låses opp neste gang brukeren skriver data til dataset&#x27;et.  Låsen vil fjernes neste gang brukeren skriver data til dataset&#x27;et med &#x60;user_lock&#x60;, eller dersom låsen slettes.  (optional)
     * @param bbox Henter ut objekter i et bestemt område (angitt med et rektangel)  Dette kan være aktuelt for å få ut alle objekter som ikke er direkte knyttet til et objekt, som f.eks mønelinje og takkant til en bygning.  Merk: I kombinasjon med &#x60;bbox&#x60; blir alltid &#x60;references&#x60; satt til &#x60;none&#x60;  (optional)
     * @param crsEPSG Angir EPSG-kode for koordinatsystemet til koordinatene som sendes inn i spørringen (f.eks i bbox), som sendes inn som data, og som sendes tilbake. Påkrevd dersom bbox-parameteret brukes.  (optional)
     * @param normalizedForVisualization Angir at rekkefølgen på x- og y-aksen skal være snudd mot det som er spesifisert i EPSG-koden.  (optional)
     * @param limit Angir grense for antall objekter som skal returneres av gangen. Hvert dataset har en øvre grense som vil overstyre det klienten ber om, eller brukes dersom klienten ikke angir dette parameteret.  Dersom resultatet inneholder flere objekter enn grensen, vil responsen inneholde en lenke med &#x60;rel&#x3D;next&#x60; i [&#x60;Link&#x60;](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link)-header. Denne lenken skal brukes direkte (det er ikke tillatt å tolke lenken ytterligere) for å hente ut neste del av resultatet, som vil være tilsvarende. De siste objektene fra operasjonen er hentet ut når resultatet ikke lenger inneholder en [&#x60;Link&#x60;](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link)-header med &#x60;rel&#x3D;next&#x60;.  (optional)
     * @param cursor Brukes til porsjonering av data (optional)
     * @param query ### Filter på egenskaper og/eller objekttype for å begrense hvilke features som hentes ut.  Spørrespråket er basert på [RQL](https://github.com/persvr/rql).  Foreløpig støttes kun &#x60;eq&#x60; og &#x60;in&#x60; for bestemte objekttyper og egenskaper.  Eksemplene inneholder alle støttede spørringer.  (optional)
     * @param datasetAt Angir hvilket tidspunkt (i henhold til ISO 8601, eks. &#x60;2020-01-30T12:13:14&#x60;) man ønsker å hente ut data på.  Kan kombineres med andre parametre, f.eks &#x60;bbox&#x60;, &#x60;query&#x60;, &#x60;crs_EPSG&#x60; osv.  (optional)
     * @param datasetModified ### Intervall for uthenting av historiske endringer  Må kombineres med &#x60;Accept&#x60;-header med samme dataformat som ved lagring av endringer.  Kan kombineres med andre parametre, f.eks &#x60;bbox&#x60;, &#x60;query&#x60;, &#x60;crs_EPSG&#x60; osv.  Formatet er &lt;fra&gt;/&lt;til&gt; hvor &#x60;..&#x60; er det samme som hhv. \&quot;fra og med første endring\&quot; eller \&quot;til og med siste endring\&quot;.  Hvis man ikke angir &#x60;..&#x60; må man angi et tidspunkt i henhold til ISO 8601, eks. &#x60;2020-01-30T12:13:14&#x60;. Man kan også angi høyere oppløsning enn sekund og tidssone med &#x60;Z&#x60; (betyr UTC) eller offset f.eks &#x60;+02:00&#x60;.  (optional)
     * @return Object
     * @throws RestClientException if an error occurs while attempting to invoke the API
     */
    public Object getDatasetFeatures(String xClientProductVersion, UUID datasetId, String references, String lockingType, BoundingBox bbox, Integer crsEPSG, Boolean normalizedForVisualization, Integer limit, byte[] cursor, String query, OffsetDateTime datasetAt, String datasetModified) throws RestClientException {
        return getDatasetFeaturesWithHttpInfo(xClientProductVersion, datasetId, references, lockingType, bbox, crsEPSG, normalizedForVisualization, limit, cursor, query, datasetAt, datasetModified).getBody();
    }
larsop commented 1 year ago

Sjekka litt mere i logger

Failed to run path:/datasets/b3930a04-dfbd-4887-8c02-c744c14f6181/features will set debug to true and rerun  - 
org.springframework.http.InvalidMediaTypeException: Invalid mime type "application/vnd.kartverket.sosi+json version=2.0": Invalid token character ' ' in token "vnd.kartverket.sosi+json version=2.0"

Dette er vel noe som kommer fra yaml fila.

larsop commented 1 year ago

Vi har tidligere hatt problemmer tegnsett og UTF-8 kan det være noe slikt ?

larsop commented 1 year ago

Når jeg tester mot https://qmsrest.westeurope.cloudapp.azure.com:8080/v1/ med siste yaml for jeg ingen feil og for hentet ned data.

Har Norkart utv miljø der jeg kan teste fkb 5.0 ?

larsop commented 1 year ago

Fikk det til å funke med curl

        curl -i \
        -H 'Authorization:????????' \
        -H 'Accept:application/vnd.kartverket.sosi+json version=2.0' \
        -H 'Content-Type:application/vnd.kartverket.sosi+json version=2.0' \
        -H 'X-Client-Product-Version:curls ar5_java_web' \
        "https://openapi-test13.kartverket.no/v1/datasets/b3930a04-dfbd-4887-8c02-c744c14f6181/features?bbox=564771.167355351732112467288970947265625,6681823.152059216983616352081298828125,566278.832644654554314911365509033203125,6682794.7871170379221439361572265625&crs_EPSG=25832&normalized_for_visualization=true&limit=10000&query=eq(*,ArealressursFlate)" \
        -o /tmp/utm_t1.json

Jeg for det samme resultatet

Når det gjelder problemmet i java som beskrevet i går

"Invalid token character ' ' in token "vnd.kartverket.sosi+json version=2.0""

Men hvis jeg tester mot Norkart med java så funker den samme koden så det har kanskje noe med tegnsettet brukt i headeren knyttet til mellomrom i vnd.kartverket.sosi+json version=2.0 ?

larsop commented 1 year ago

Sitter ser og litt på filen og lurer på hvor doc'ec til bruk av idx ligger.

Finner ingen ref idx f.eks i [noen doc](http://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/kartverket/SFKB-API/master/spec/openapi.yaml&nocors

Her er et eksempel fra filen lastet ned via curl

          {
            "featuretype": "ArealressursGrense",
            "lokalId": "52665b6b-c15b-4b41-a69f-c71e2a3019b0",
            "reverse": false,
            "idx": [
              0,
              1,
              3
            ]
          }

test.json.gz

NilsIvarNes commented 1 year ago

Testa litt med ulike varianter av accept-header i Postman: accept=application/vnd.kartverket.sosi+json; version=2.0 - fungerer accept=application/vnd.kartverket.sosi+json version=2.0 - (uten semikolon, et mellomrom) - fungerer accept=application/vnd.kartverket.sosi+json version=2.0 - (uten semikolon, to mellomrom) - feiler

image

larsop commented 1 year ago

Testa litt med ulike varianter av accept-header i Postman: accept=application/vnd.kartverket.sosi+json; version=2.0 - fungerer accept=application/vnd.kartverket.sosi+json version=2.0 - (uten semikolon, et mellomrom) - fungerer accept=application/vnd.kartverket.sosi+json version=2.0 - (uten semikolon, to mellomrom) - feiler

image

Tror ikke problemmet er det jeg sender inn, men det jeg for tilbake i headeren fra test server. Det som sendes inn kommer fra yaml filen.

Dangeroustuber commented 1 year ago

Sitter ser og litt på filen og lurer på hvor doc'ec til bruk av idx ligger.

Finner ingen ref idx f.eks i [noen doc](http://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/kartverket/SFKB-API/master/spec/openapi.yaml&nocors

Her er et eksempel fra filen lastet ned via curl

          {
            "featuretype": "ArealressursGrense",
            "lokalId": "52665b6b-c15b-4b41-a69f-c71e2a3019b0",
            "reverse": false,
            "idx": [
              0,
              1,
              3
            ]
          }

test.json.gz

Dette kommer med det nye pull requestet. Det som står der nå er en beskrivelse som forteller hva idx er og hva tallene inni arrayet står for.

larsop commented 1 year ago

Dette kommer med det nye pull requestet. Det som står der nå er en beskrivelse som forteller hva idx er og hva tallene inni arrayet står for.

Mener du https://github.com/kartverket/NGIS-OpenAPI/pull/63 for jeg finner ikke noe der heller.

En grep yaml filen finner heller ikke noe 'grep -i idx ./NGIS-OpenAPI/spec/openapi.yaml'

Har du en url der selve beskrivelse står som du kan sende til meg ? Så hadde vært veldig fint så slipper jeg lete rundt.

Dangeroustuber commented 1 year ago

Dette kommer med det nye pull requestet. Det som står der nå er en beskrivelse som forteller hva idx er og hva tallene inni arrayet står for.

Mener du #63 for jeg finner ikke noe der heller.

En grep yaml filen finner heller ikke noe 'grep -i idx ./NGIS-OpenAPI/spec/openapi.yaml'

Har du en url der selve beskrivelse står som du kan sende til meg ? Så hadde vært veldig fint så slipper jeg lete rundt.

Her er linken til commit på pull request #104, commit

trygvet commented 1 year ago

Testa litt med ulike varianter av accept-header i Postman: accept=application/vnd.kartverket.sosi+json; version=2.0 - fungerer accept=application/vnd.kartverket.sosi+json version=2.0 - (uten semikolon, et mellomrom) - fungerer accept=application/vnd.kartverket.sosi+json version=2.0 - (uten semikolon, to mellomrom) - feiler image

Tror ikke problemmet er det jeg sender inn, men det jeg for tilbake i headeren fra test server. Det som sendes inn kommer fra yaml filen.

Det er mulig vi har en bug som gjør at det returneres application/vnd.kartverket.sosi+json version=2.0 (uten semikolon) både hvis man ber om application/vnd.kartverket.sosi+json (dvs. uten spesifisert version), eller selv ber om application/vnd.kartverket.sosi+json version=2.0 (uten semikolon). Kanskje Java-rammeverket ikke godtar kun mellomrom som "token character"?

Kan du prøve å sette Accept til "application/vnd.kartverket.sosi+json; version=2.0" ?

larsop commented 1 year ago

Kan du prøve å sette Accept til "application/vnd.kartverket.sosi+json; version=2.0" ?

Testet det nå med denne endringen og det ser ikke til å gjøre noen forskjell.

--- a/src/main/java/ngis/openapi/client/client/api/FeaturesApi.java
+++ b/src/main/java/ngis/openapi/client/client/api/FeaturesApi.java
@@ -132,7 +132,7 @@ public class FeaturesApi {
             headerParams.add("X-Client-Product-Version", apiClient.parameterToString(xClientProductVersion));

         final String[] accepts = { 
-                "application/vnd.kartverket.sosi+json; version&#x3D;2.0","application/vnd.kartverket.sosi+json; version&#x3D;1.0", "application/vnd.kartverket.sosi+gml; version&#x3D;1.0"
+                "application/vnd.kartverket.sosi+json; version=2.0","application/vnd.kartverket.sosi+json; version&#x3D;1.0", "application/vnd.kartverket.sosi+gml; version&#x3D;1.0"
          };
         final List<MediaType> accept = apiClient.selectHeaderAccept(accepts);
         final String[] contentTypes = {  };
@@ -303,7 +303,7 @@ public class FeaturesApi {
             headerParams.add("X-Client-Product-Version", apiClient.parameterToString(xClientProductVersion));

         final String[] accepts = { 
-            "application/vnd.kartverket.sosi+json; version&#x3D;1.0", "application/vnd.kartverket.sosi+json; version&#x3D;2.0", "application/vnd.kartverket.sosi+gml; version&#x3D;1.0"
+            "application/vnd.kartverket.sosi+json; version&#x3D;1.0", "application/vnd.kartverket.sosi+json; version=2.0", "application/vnd.kartverket.sosi+gml; version&#x3D;1.0"
          };
         final List<MediaType> accept = apiClient.selectHeaderAccept(accepts);
         final String[] contentTypes = {  };
@@ -483,7 +483,7 @@ public class FeaturesApi {
          };
         final List<MediaType> accept = apiClient.selectHeaderAccept(accepts);
         final String[] contentTypes = { 
-            "application/vnd.kartverket.sosi+wfs-t; version&#x3D;1.0", "application/vnd.kartverket.geosynkronisering+zip; version&#x3D;1.0", "application/vnd.kartverket.sosi+json; version&#x3D;1.0", "application/vnd.kartverket.sosi+json; version&#x3D;2.0"
+            "application/vnd.kartverket.sosi+wfs-t; version&#x3D;1.0", "application/vnd.kartverket.geosynkronisering+zip; version&#x3D;1.0", "application/vnd.kartverket.sosi+json; version&#x3D;1.0", "application/vnd.kartverket.sosi+json; version=2.0"
          };
         final MediaType contentType = apiClient.selectHeaderContentType(contentTypes);

For da forsatt den samme feilen

org.springframework.http.InvalidMediaTypeException: Invalid mime type "application/vnd.kartverket.sosi+json version=2.0": Invalid token character ' ' in token "vnd.kartverket.sosi+json version=2.0" at org.springframework.http.MediaType.parseMediaType(MediaType.java:452) at org.springframework.http.HttpHeaders.getContentType(HttpHeaders.java:745) at org.springframework.web.client.HttpMessageConverterExtractor.getContentType(HttpMessageConverterExtractor.java:115) at org.springframework.web.client.Htt

larsop commented 1 year ago

Fikk det til å funke med curl

        curl -i \
        -H 'Authorization:????????' \
        -H 'Accept:application/vnd.kartverket.sosi+json version=2.0' \
        -H 'Content-Type:application/vnd.kartverket.sosi+json version=2.0' \
        -H 'X-Client-Product-Version:curls ar5_java_web' \
        "https://openapi-test13.kartverket.no/v1/datasets/b3930a04-dfbd-4887-8c02-c744c14f6181/features?bbox=564771.167355351732112467288970947265625,6681823.152059216983616352081298828125,566278.832644654554314911365509033203125,6682794.7871170379221439361572265625&crs_EPSG=25832&normalized_for_visualization=true&limit=10000&query=eq(*,ArealressursFlate)" \
        -o /tmp/utm_t1.json

Jeg for det samme resultatet

* uten references parameteren som over

* med references=all

* med references=none

Har laget en egen issue for dette slik at det blir enklere å holde oversikt.

larsop commented 1 year ago

fikset av Norkart/Kartverket på test server så nå funker get features fra java også