Daha çox

GeoServer 2.7-yə OpenLayers 3.5 WFS-T yeniləməsi StringIndexOutOfBoundsException səviyyəsini artırır


WFS-T ifadələrini yaratmaq üçün ol.format.WFS.writeTransaction () (OL3.5) istifadə edirəm. Bu əlavə etmək və silmək üçün yaxşı işləyir. Problem yeniləmə bəyanatındadır.

Hər hansı bir yeniləmə ifadəsi GeoServer-dən aşağıdakı istisnaları qaytarır:

 java.lang.StringIndexOutOfBoundsException: Simli indeks aralıq xaricində: -1 Simli indeks aralıqda deyil: -1

QGIS vasitəsilə düzəlişlər gözlənildiyi kimi işləyir.

Bu OL3.5 tərəfindən yaradılan POST nümunəsidir

   məhduddur -9693316.43121855,2347365.748407976,-9692555.877885746,2347961.5151853375  həndəsə     -9693072.420357607 2347961.5151853375 -9693316.43121855 2347628.7731022364 -9692822.071552228 2347365.748407976 -9692555.877885746 2347758.700963257 -9692555.877885746 2347758.700963257 -9692737.951605482 2347825.076779921 -9692893.214319186 2347748.042587353 -9693072.420357607 2347961.5151853375  

BoundedBy / bbox, OpenLayers-in GML-i təhlil edərkən yaratdığı bir xüsusiyyət olması ilə əlaqədardır, bu, əsl xüsusiyyət mülkiyyəti deyil. Beləliklə, yeniləyəndə xüsusiyyəti klonlamalı və ondan qurtulmalısınız. Bəzi nümunə kodu:

// həndəsəni yeniləmək üçün WFS əməliyyatı edin var properties = feature.getProperties (); // həqiqi mülk olmayan bbox-dan xilas olmaq xassələri silin.bbox; var klon = yeni ol.Feature (xassələr); clone.setId (fid);

Daha çox nümunə koduna ehtiyacınız varsa, WFS-T üçün OpenGeo Suite SDK-da istifadə etdiyimiz kod: https://github.com/boundlessgeo/suite/blob/master/sdk/src/main/resources/client/ol3 -common / app / TransactionHandler.js # L105: L110


@ Bartvde-nin həlli işləsə də, Xüsusiyyəti klonlamaq və şəxsiyyət və xüsusiyyətlər yaratmağı yaratmaq biraz çətin olur. Ayrıca, klonlaşdırılmış xüsusiyyətdə başqa bir şeyin olmaması riski var.

Başqa bir həll təklif etmək istərdim:

feature.unset ("boundedBy"); // və ya "bbox", qurtarmaq istədiyiniz xüsusiyyətin adından asılı olaraq

Bunun üçün kifayətdir!


Aşağıda, bir obyekt yaradan daha mükəmməl bir həll görə bilərsinizxüsusiyyətləriehtiva ediredər,yeniləmələrsilinir. İstifadə edirtapmaq ()hər üç növün xüsusiyyətlərini əldə etməkmənbə. Həm də "təmizləyir"yeniləmələretibarənməhduddurəmlak.

const find = mode => this.vectorSource .getFeatures () .filter (feature => feature.modification === mode); const xüsusiyyətləri = {yeniləmələr: tap ("yeniləndi"). xəritə (xüsusiyyət => {feature.unset ("boundedBy"); qayıtma xüsusiyyəti;}), əlavə: tapmaq ("əlavə edildi"), silir: tap ("qaldırıldı") ));


Videoya baxın: GIS Lesson 11: WMS. WMTS. WFS in QGIS (Oktyabr 2021).