- changed status to open
parseWmsHtmlGfi
Hallo,
in \modules\tools\gfi\themes\model.js wird beim Parse response for WMS as text/html das Ergebnis nur angezeigt wenn
\$(data).find("tbody").children().length > 1
Ich habe Dienste wie z.B. den LINFOS NRW der nur 1 tbody im HTML-Output hat.
Ich muss demnach in der parseWmsHtmlGfi() nach $(data).find("tbody").children().length >= 1 prüfen.
Kann das in den Standard?
mfg
D. Stolz
Comments (14)
-
-
Hallo Herr Stolz,
können sie mir ein text/html Aufruf einer Ihrer Dienste zukommen lassen? Oder ein genaues Beispiel wie bie ihnen die Rückantworten aussehen? Bei uns ist es in der Regel so, dass die WMS Dienste immer etwas zurück geben und dort ist immer ein tbody enthalten der ein kindelement enthält das leer bzw. nicht mit Informationen zu den Daten gefüllt ist. Beispiel: https://geodienste.hamburg.de/HH_WMS_Verwaltungsgrenzen?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetFeatureInfo&FORMAT=image%2Fpng&TRANSPARENT=true&QUERY_LAYERS=bezirke&CACHEID=5697748&LAYERS=bezirke&INFO_FORMAT=text%2Fhtml&FEATURE_COUNT=1&STYLES=&I=50&J=50&CRS=EPSG%3A25832&WIDTH=101&HEIGHT=101&BBOX=553759.3884699302%2C5918540.76232132%2C556431.6786935601%2C5921213.0525449505
-
reporter Hallo Herr Reder,
die Besonderheit solcher Dienste würde ich nicht zu sehr berücksichtigen. Sind in Köln Dienste vom Land die vermutlich bereits in grauer Vorzeit aufgesetzt wurden. Hier ist so ein Kandidat:
https://lv.kommunen.nrw.testa-de.net/lv_wms/umwelt/pra?service=wms&request=getcapabilities
Habe das mittlerweile n der \modules\tools\gfi\themes\model.js so abgefangen:
parseWmsHtmlGfi: function (data) { const gfiFeatures = {"html": this.get("gfiUrl")}; try { //if ($(data).find("tbody").children().length >= 1) { const domNodes = $.parseHTML(data); //KoelnGIS, z.B. LANUV, haben kein tbody if (domNodes.length > 0) { this.set("gfiContent", [gfiFeatures]); } this.setIsReady(true); } catch { this.setIsReady(true); } },
Alle bisher im Masterportal eingebundenen 125 Dienste mit über 800 Layern arbeiten fehlerfrei mit dem gfi. Für die nächsten 100 Dienste bin ich optimistisch.
Habe die Antwort nicht im Bitbucket-Issue kommentiert.
Danke und VG
Mit freundlichen Grüßen Im Auftrag Dietmar Stolz
Stadt Köln - Die Oberbürgermeisterin Amt für Informationsverarbeitung CC GIS Auf dem Hunnenrücken 3 50668 Köln
Telefon: 0221/221-23929 Internet: www.stadt-koeln.dehttps://eur03.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.stadt-koeln.de%2F&data=02%7C01%7Cdlosert%40cyclomedia.com%7Cc009bc0a3ec9410ce75308d7c5ac18f5%7Ca3394efe0b704676a8c92909f98f4cfb%7C0%7C0%7C637195215262469842&sdata=AauKX%2Bp9Xo5Gjw8WQFyMGxECLqecl8PrrdfNGOXU9KE%3D&reserved=0
Gesendet: Donnerstag, 19. November 2020 09:17 An: Stolz, Dietmar Dietmar.Stolz@STADT-KOELN.DE Betreff: Re: [Bitbucket] Issue
#486: parseWmsHtmlGfi (geowerkstatt-hamburg/masterportal)[Christopher Reder]
Christopher Reder commented on issue
#486:parseWmsHtmlGfihttps://bitbucket.org/geowerkstatt-hamburg/masterportal/issues/486/parsewmshtmlgfi
Hallo Herr Stolz,
können sie mir ein text/html Aufruf einer Ihrer Dienste zukommen lassen? Oder ein genaues Beispiel wie bie ihnen die Rückantworten aussehen? Bei uns ist es in der Regel so, dass die WMS Dienste immer etwas zurück geben und dort ist immer ein tbody enthalten der ein kindelement enthält das leer bzw. nicht mit Informationen zu den Daten gefüllt ist. Beispiel: https://geodienste.hamburg.de/HH_WMS_Verwaltungsgrenzen?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetFeatureInfo&FORMAT=image%2Fpng&TRANSPARENT=true&QUERY_LAYERS=bezirke&CACHEID=5697748&LAYERS=bezirke&INFO_FORMAT=text%2Fhtml&FEATURE_COUNT=1&STYLES=&I=50&J=50&CRS=EPSG%3A25832&WIDTH=101&HEIGHT=101&BBOX=553759.3884699302%2C5918540.76232132%2C556431.6786935601%2C5921213.0525449505
View this issuehttps://bitbucket.org/geowerkstatt-hamburg/masterportal/issues/486/parsewmshtmlgfi or add a comment by replying to this email.
Unwatch this issuehttps://bitbucket.org/api/internal/repositories/geowerkstatt-hamburg/masterportal/issue/486/unwatch/stolzd/b227c8eec654854fef26edb5068ceb7b80a0956a48e97ce0b1528caee8ea3932/ to stop receiving email updates.
[Bitbucket]https://bitbucket.org
Are you making the most of Bitbucket? Learn more about our premium plans.https://bitbucket.org/account/admin/plans?utm_source=bbctrns&utm_medium=email&utm_campaign=fv2&utm_content=t1
Bloghttps://bitbucket.org/blog?utm_source=bbctrns&utm_medium=email&utm_campaign=fv1&utm_content=t1 | Git Tutorialshttps://www.atlassian.com/git/tutorials?utm_source=bbctrns&utm_medium=email&utm_campaign=fv1&utm_content=t1 | Bitbucket Communityhttps://community.atlassian.com/t5/Bitbucket/ct-p/bitbucket?utm_source=bbctrns&utm_medium=email&utm_campaign=fv1&utm_content=t1 | Privacy Policyhttps://www.atlassian.com/legal/privacy-policy?utm_source=bbctrns&utm_medium=email&utm_campaign=fv1&utm_content=t1
-
Inzwischen ist das gfi neu geschrieben mit vue und entsprechende Überprüfung für text/html findet im dev branch so statt:
if (typeof document !== "undefined" && document.getElementsByTagName("tbody")[0]?.children.length >= 1) { return [createGfiFeature(layerName, gfiTheme, attributesToShow, null, null, undefined, {url, mimeType}, null)]; }
Da ich ihre Dienst nicht abfragen kann, kann ich nicht überprüfen, ob es damit auch für sie funktioniert. Können sie dies bestätigen? Damit könnte dieses Ticket dann geschlossen werden.
-
reporter tbody ist nicht in jedem GFI-Response drin.
Mache das in in \src\api\wmsGetFeatureInfo.js jetzt so:
export function requestGfi()
const parsedDocument = parseDocumentString(docString, mimeType);
if (mimeType === "text/html") {
//if (parsedDocument.getElementsByTagName("tbody")[0]?.children.length >= 1) {
const domNodes = $.parseHTML(docString); // z.B. LANUV
if (domNodes.length > 0) {
return docString;
}
return null;
}Sobald ein DOM im GFI-Response drin ist gibt es eine Ausgabe.
-
-
assigned issue to
-
assigned issue to
-
-
assigned issue to
-
assigned issue to
-
Da
$.parseHTML(docString).length > 0
aktuell keine Lösung mehr ist (jQuery soll ja weg), habe ich das einmal mitparsedDocument.childNodes.length
ausprobiert – prinzipiell dasselbe und funktioniert als Lösung erstmal auch.Beim Testen ist mir aber aufgefallen, warum die Lösung mit dem
tbody
wohl so aussieht: Inportal/master
wird für den Layer “Eventlotse Hamburgconvention” auch dann ein HTML-Body zurückgegeben, wenn kein Feature gefunden wurde. Dem Nutzer wird dann ein leeres GFI angezeigt, in dem auch eine Tabelle mit leeremtbody
steckt. (Deshalb also wurde auch geprüft, ob etwas imtbody
ist.)@Stolz Wie sieht bei Ihren Diensten die Rückgabe aus, wenn an einer Stelle kein Feature liegt? Wird dort sinngemäß ““ zurückgegeben?
@Christopher Reder Wie steht der LGV zu diesem Thema? Dieses Implementierungsdetail scheint ja eine Hamburgensie zu sein. Hättet ihr die Möglichkeit, diesen (und andere gleichartige) Dienste entsprechend anzupassen? Bzw. würdet ihr erstmal auch akzeptieren, wenn für leere Stellen auch das leere GFI-Fenster angezeigt wird?
-
reporter Da scheint es doch einen Unterschied zwischen
$.parseHTML(docString).length
undparsedDocument.childNodes.length
zu geben. V.a. die Dienste von https://www.wms.nrw.de liefern leere Body-Tags zurück und werden mitparsedDocument.childNodes
als leeres gfi-Popup anzeigt. Mit der jQuery-Methode passiert das nicht.VG
D. Stolz
-
Moin Dennis, in Rücksprache mit Markus brauchen wir eine Lösung die auch weiterhin für Hamburg funktioniert und bei entsprechendem leeren tbody kein gfi anzeigt.
Viele Grüße Christopher
-
@Stolz Danke für den Hinweis. jQuery “darf” ich wegen der Coding Conventions an der Stelle leider nicht nutzen. (“A.2.4 JQuery is only to be used in combination with Backbone.js.”) Von daher brauchen wir eine Umsetzung in purem JS.
Dafür habe ich mal nachgeschaut, was die WMS-Spezifikation dazu zu sagen hat. Leider nicht viel: “The actual semantics of how a WMS decides what to return more information about, or what exactly to return, are left up to the WMS provider“.
Also leider völlig willkürlich, wann ein GFI ein “Hier ist nichts”-GFI ist. Ich habe von daher eine Implementierung umgesetzt, die für Hamburg weiterhin funktioniert und für die beschriebenen Dienste in NRW auch funktionieren sollte:
https://bitbucket.org/geowerkstatt-hamburg/masterportal/pull-requests/3178/wms-gfi-anzeigekriterium
Gern einmal gegentesten, ob damit alles läuft.
Nachtrag: Ich nehme auch gern eine Services-Datei entgegen, um das einmal für ein paar Dienste aus NRW durchzuspielen.
Viele Grüße
-
reporter Hallo,
in Köln funktionieren die Anpassungen.
Sicherlich gibt es Dienste die “keine Informationen verfügbar” o.ä. responsen statt einem leeren
FeatureInfoResponse
aber das kann man nicht alles abfangen.Vielen Dank
D. Stolz
-
- changed status to resolved
Der zugehörige Branch https://bitbucket.org/geowerkstatt-hamburg/masterportal/pull-requests/3178 ist nun gemerged.
Viele Grüße
-
Issue
#849was marked as a duplicate of this issue. - Log in to comment