parseWmsHtmlGfi

Issue #486 resolved
Stolz created an issue

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)

  1. Christopher Reder

    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

  2. Stolz 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

    GFI: https://lv.kommunen.nrw.testa-de.net/lv_wms/umwelt/pra?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetFeatureInfo&FORMAT=image%2Fpng&TRANSPARENT=true&QUERY_LAYERS=GBFlaeche&t=870&zufall=0.38810785363981126&LAYERS=GBFlaeche&INFO_FORMAT=text%2Fhtml&FEATURE_COUNT=100&I=511&J=417&WIDTH=512&HEIGHT=512&CRS=EPSG%3A25832&STYLES=&BBOX=345264.0526694115%2C5638312.092171471%2C353392.0482802939%2C5646440.087782353

    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

  3. Christopher Reder

    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.

  4. Stolz 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.

  5. Dennis Sen

    Da $.parseHTML(docString).length > 0 aktuell keine Lösung mehr ist (jQuery soll ja weg), habe ich das einmal mit parsedDocument.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: In portal/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 leerem tbody steckt. (Deshalb also wurde auch geprüft, ob etwas im tbody 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?

  6. Stolz reporter

    Da scheint es doch einen Unterschied zwischen $.parseHTML(docString).length und parsedDocument.childNodes.length zu geben. V.a. die Dienste von https://www.wms.nrw.de liefern leere Body-Tags zurück und werden mit parsedDocument.childNodes als leeres gfi-Popup anzeigt. Mit der jQuery-Methode passiert das nicht.

    Beispiel Request: https://www.wms.nrw.de/geobasis/wms_nw_afis?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetFeatureInfo&FORMAT=image%2Fpng&TRANSPARENT=true&QUERY_LAYERS=nw_afis_lfppunkte_pst1&CACHEID=2637886&LAYERS=nw_afis_lfppunkte_pst1&SINGLETILE=true&INFO_FORMAT=text%2Fhtml&FEATURE_COUNT=10&I=50&J=50&CRS=EPSG%3A25832&STYLES=&WIDTH=101&HEIGHT=101&BBOX=356898.32854887994%2C5645153.895545092%2C357031.9430600614%2C5645287.510056273

    VG

    D. Stolz

  7. Christopher Reder

    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

  8. Dennis Sen

    @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

  9. Stolz 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

  10. Log in to comment