Daha çox

GeoServer REST API hatası - “Göstərilən əhatə dairəsi adı dəstəklənmir”


2.6.2 və 2.5.4-də GeoServer REST ilə bir problemlə qarşılaşdım (maraqlı deyilsə də, 2.3.1-də).

GeoServer üçün əlçatan bir yol ilə bir GeoTIFF əlavə edərkən, server belə cavab verir:

Göstərilən əhatə dairəsi adı resttestdemis dəstəklənmir

Bu, cURL istifadə etdikdə olur:

qıvrım -X POST -d 'doğruresttestdemresttestdemEPSG: 4326REPROJECT_TO_DECLARED'http: // admin: geoserver @ localhost: 8080 / geoserver / rest / workspaces / fake_rfe2 / coveragestores / testRESTStoreGeotiff / coverages.xml - "Content-Type: application / xml" başlığı: Göstərilən əhatə adı adı resttestdemis dəstəklənmir

Həm də GeoServer Manager istifadə edərkən:

08: 22: 15.077 [main] DEBUG httpclient.wire.header - >> "POST /geoserver/rest/workspaces/fake_rfe2/coveragestores/testRESTStoreGeotiff/coverages.xml HTTP / 1.1 [ r] [ n]" 08:22 : 15.079 [main] DEBUG oachttpclient.HttpMethodBase - Host istəyi başlığının əlavə edilməsi 08: 22: 15.079 [main] DEBUG httpclient.wire.header - >> "Avtorizasiya: Basic YWRtaW46Z2Vvc2VydmVy [ r] [ n]" 08 15.079 [main] DEBUG httpclient.wire.header - >> "İstifadəçi-Agent: Jakarta Commons-HttpClient / 3.1 [ r] [ n]" 08: 22: 15.080 [main] DEBUG httpclient.wire.header - >> "Host: localhost: 8080 [ r] [ n]" 08: 22: 15.080 [main] DEBUG httpclient.wire.header - >> "Məzmun uzunluğu: 213 [ r] [ n]" 08:22 : 15.080 [main] DEBUG httpclient.wire.header - >> "Məzmun Tipi: text / xml [ r] [ n]" 08: 22: 15.080 [main] DEBUG httpclient.wire.header - >> "[  r] [ n] "08: 22: 15.081 [main] DEBUG httpclient.wire.content - >>"doğruresttestdemresttestdemEPSG: 4326REPROJECT_TO_DECLARED"08: 22: 15.081 [main] DEBUG oachmEntityEnclosingMethod - İstək orqanı göndərildi 08: 22: 15.198 [main] DEBUG httpclient.wire.header - <<" HTTP / 1.1 500 Daxili Server Xətası [ r] [ n] " 08: 22: 15.198 [main] DEBUG httpclient.wire.header - << "HTTP / 1.1 500 Daxili Server Xətası [ r] [ n]" 08: 22: 15.198 [main] DEBUG httpclient.wire.header - < <"Məzmun tipi: mətn / düz [ r] [ n]" 08: 22: 15.198 [main] DEBUG httpclient.wire.header - << "Transfer-Encoding: chunked [ r] [ n]" 08: 22: 15.198 [main] DEBUG httpclient.wire.header - << "Server: Jetty (6.1.8) [ r] [ n]" 08: 22: 15.199 [main] DEBUG httpclient.wire.header - << "[ r] [ n]" 08: 22: 15.199 [main] DEBUG httpclient.wire.content - << "3" 08: 22: 15.199 [main] DEBUG httpclient.wire.content - << " 7 "08: 22: 15.199 [main] DEBUG httpclient.wire.content - <<" [ r] "08: 22: 15.199 [main] DEBUG httpclient.wire.content - <<" [ n] "08: 22: 15.199 [main] DEBUG httpclient.wire.content - << ": Müəyyən əhatəName resttestdemis dəstəklənmir" 08: 22: 15.200 [main] DEBUG httpclient. tel.content - << "[ r]" 08: 22: 15.200 [main] DEBUG httpclient.wire.content - << "[ n]" 08: 22: 15.200 [main] DEBUG httpclient.wire.content - << "0" 08: 22: 15.200 [main] DEBUG httpclient.wire.content - << "[ r]" 08: 22: 15.200 [main] DEBUG httpclient.wire.content - << "[ n] "08: 22: 15.200 [main] DEBUG httpclient.wire.content - <<" [ r] "08: 22: 15.200 [main] DEBUG httpclient.wire.content - <<" [ n] "08:22 : 15.200 [main] DEBUG httpclient.wire.header - << "[ r] [ n]"

Bu baş verdikdə, server jurnalında aşağıdakı stacktrace görünür:

Səbəbi: java.lang.IllegalArgumentException: Org.geotools.coverage.grid.io.AbstractGridCoverage2DReader.getCoordinateReferenceSystem (AbstractGridCoverage2DReader.java:820ReaderComageRomageCodeModageCodeModageRodeModageRodeModageRodeModageRodeModageRamageCodeMerageMerageModeMoreamageModeMerageMoreamageCimmMerageMerageMerageMerageMerageMerageMemalMemalDemirimArmAmAAA : 317) org.geoserver.catalog.SingleGridCoverage2DReader.getCoordinateReferenceSystem (SingleGridCoverage2DReader.java:151) at org.geoserver.catalog.CatalogBuilder.initCoverage (CatalogBuilder.java.Co.st.ode.Rode.Code.Reuge.Reuge.Reuge.Reuge.Ru) CoverageResource.java:87) org.geoserver.rest.ReflectiveResource.handlePost saytında (ReflectiveResource.java:121)

AbstractGridCoverage2DReader.getCoordinateReferenceSystem-ə baxarkən:

/ ** * Bunun üçün {@link GeneralEnvelope} alır {@link AbstractGridCoverage2DReader}. * * Bu {@link AbstractGridCoverage2DReader} üçün {@link GeneralEnvelope} qaytarın. * / @Override public CoordinateReferenceSystem getCoordinateReferenceSystem (String əhatə adı) {if (! CheckName (əhatə adı)) {yeni IllegalArgumentException atın ("Göstərilən əhatə adı" + əhatə adı + "dəstəklənmir"); } qayıt; }

Görünür kiyoxlamaq adıyalnış qayıdır, yəni o deməkdirəhatəName! = this.coverageNamevə yaəhatə adı == sıfır. Hmm.

Fikirləriniz varmı?

Yeniləmə:

Bunu aşağıdakılarla işləyə bildim:

curl -v -u admin: geoserver -XPUT -H "Məzmun tipi: mətn / düz" -d "faylı: ///Users/gregederer/dev6/EWX_SAMPLE_DATA/RFE2/monthly/data.2000.03.tiff" 'http: //localhost:8080/geoserver/rest/workspaces/fake_rfe2/coveragestores/rfe2_africa_1-month-03-2000_mm_data/external.geotiff?configure=first&coverageName=rfe2_africa_1-month-03-2000_mm_data '

İzlədi (qat stilini dəyişdirmək üçün):

curl -u admin: geoserver -XPUT -H 'Məzmun tipi: mətn / xml' -d 'raster'http: // localhost: 8080 / geoserver / rest / layer / fake_rfe2: rfe2_africa_1-month-03-2000_mm_data

Bunu Apache HttpComponents istifadə edərək Java-da da tətbiq etdim:

public boolean createCoverage (String iş sahəsi, String adı, String yolu, String layerStyle) {boolean successed = false; {URI uri = yeni URIBuilder () .setScheme (geoServerScheme) .setHost (geoServerHost) .setPort (geoServerPort) .setPath (geoServerPath + "/ rest / workspaces /" + workspace + "/ coveragestores /" + name + "/ external .geotiff ") .setParameter (" konfiqurasiya "," ilk ") .setParameter (" əhatəName ", ad) .build (); StringEntity stringEntity = yeni StringEntity ("fayl: ///" + yol, ContentType.create ("tex / plain", "UTF-8")); HttpPut httpPut = yeni HttpPut (uri); httpPut.setEntity (stringEntity); System.out.println ("İcra tələbi" + httpPut.getRequestLine ()); CloseableHttpResponse response = httpclient.execute (httpPut); müvəffəq oldu = response.getStatusLine (). getStatusCode () == 201; başarılı = müvəffəq oldu && updateLayerStyle (iş sahəsi, ad, layerStyle); cəhd edin {System.out.println ("----------------------------------------" ); System.out.println (response.getStatusLine ()); } nəhayət {response.close (); }} tutmaq (URISyntaxException e) {e.printStackTrace (); } tutmaq (ClientProtocolException e) {e.printStackTrace (); } tutmaq (IOException e) {e.printStackTrace (); } nəhayət {cəhd edin {httpclient.close (); } tutmaq (IOException e) {e.printStackTrace (); }} qayıtma müvəffəq oldu; } public boolean updateLayerStyle (String iş sahəsi, String layerName, String styleName) {boolean successed = false; {URI uri = yeni URIBuilder () .setScheme (geoServerScheme) .setHost (geoServerHost) .setPort (geoServerPort) .setPath (geoServerPath + "/ rest / layer /" + workspace + ":" + layerName) .build (); StringEntity stringEntity = yeni StringEntity (""+ styleName +"", ContentType.create (" application / xml "," UTF-8 ")); HttpPut httpPut = yeni HttpPut (uri); httpPut.setEntity (stringEntity); System.out.println (" İstək icra edilir "+ httpPut.getRequestLine ()); CloseableHttpResponse cavab = httpclient.execute (httpPut); uğurlu = response.getStatusLine (). GetStatusCode () == 200; cəhd edin {System.out.println ("------------ ---------------------------- "); System.out.println (response.getStatusLine ());} nəhayət {response.close ();}} catch (URISyntaxException e) {e.printStackTrace ();} catch (ClientProtocolException e) {e.printStackTrace ();} catch (IOException e) {e.printStackTrace ();} nəhayət {cəhd edin {httpclient. close ();} catch (IOException e) {e.printStackTrace ();}} qayıtma müvəffəq oldu;}

Ümid edirəm ki, bu həll yolu kiməsə kömək edir.


2.1-dən 2.6-ya yüksəldərkən də bu məsələyə gəldim.

Qalan API-də nativeName (fayl adı) və ad (qat adı) göndəririk.

Məsələ burasındadır ki,> = 2.4 üçün CatalogBuilder vasitəsilə çağırılır

əhatə dairəsi = builder.buildCoverage (ad);

Beləliklə, bu metod daxilində ad və nativeName arasında fərq qoymaq imkanı yoxdur.

Bunu özünüz düzəltmək istəyirsinizsə və GeoServer-i özünüz qurmağı düşünməsəniz, CoverageResource.handleObjectPost (imzaları dəyişdirmədən) daxilində belə bir şey edə bilərsiniz:

// Kod buraxıldı ... Dize adı = əhatə dairəsi.getName (); String nativeName = əhatəsi.getNativeName (); CatalogBuilder builder = yeni CatalogBuilder (kataloq); CoverageStoreInfo mağazası = qamış.getStore (); builder.setStore (mağaza); // Burada (! İsNew) 2 fərqli işi idarə edirik {// Qismən müəyyən edilmiş əhatə dairəsini konfiqurasiya builder.initCoverage (əhatə dairəsi, ad); } başqa {// Yepyeni bir əhatə dairəsini konfiqurasiya etmək (yalnız ad göstərilmişdir) əhatə = builder.buildCoverage (nativeName); əhatə dairəsi.setName (ad); } // Kod buraxıldı ...

Həmişə Xml vasitəsilə ad və nativeName təyin edirik, bu bizə aid deyil, amma CatalogBuilder.initResourceInfo kimi bir şeyin sıfır dəyərlərini yoxlamaq yaxşı ola bilər ...


Videoya baxın: Using SLIP Web Map Services WMS in ArcMap (Oktyabr 2021).