Jak unikać różowych kafelków, gdy widok / tabela DB jest pusta?


10

Mam widoki przestrzenne w tym sensie, że wybierają kolumnę przestrzenną z innej tabeli. Ta tabela jest publikowana przy użyciu geoserver. Ta tabela jest aktywna i czasami nie ma żadnych danych. Gdy tabela nie zawiera danych, wyświetlany jest wms, reda błąd w konsoli Firebug to: wprowadź opis zdjęcia tutaj

WMS zwrócił:

>  <?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE
> ServiceExceptionReport SYSTEM
> "http://192.168.70.65:80/geoserver/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd"> <ServiceExceptionReport version="1.1.1" >   <ServiceException>
>           java.lang.NullPointerException
>     null
>     </ServiceException></ServiceExceptionReport>

Kod:

function init(){    
            OpenLayers.IMAGE_RELOAD_ATTEMPTS = 1;
                OpenLayers.Util.onImageLoadErrorColor = "transparent";    

                map = new OpenLayers.Map('map', {   
                    projection: new OpenLayers.Projection("EPSG:900913"),
                    displayProjection: new OpenLayers.Projection("EPSG:4326"),
                    numZoomLevels: 21,
                    maxExtent: new OpenLayers.Bounds(-20037508, -20037508,20037508, 20037508.34),   
                    controls: [
                        new OpenLayers.Control.Navigation(),
                        new OpenLayers.Control.PanZoomBar(),
                        new OpenLayers.Control.LayerSwitcher({'ascending':false}),                       
                        new OpenLayers.Control.ScaleLine(),
                        new OpenLayers.Control.MousePosition(),
                        new OpenLayers.Control.OverviewMap(),
                        new OpenLayers.Control.KeyboardDefaults()
                    ]   


                });

Za pomocą GeoExt:

<script src="http://localhost/geoserver/www/ext/adapter/ext/ext-base.js" type="text/javascript"></script>
        <script src="http://localhost/geoserver/www/ext/ext-all.js"  type="text/javascript"></script>
        <link rel="stylesheet" type="text/css" href="http://localhost/geoserver/www/ext/resources/css/ext-all.css"/>

        <link rel="stylesheet" href="http://localhost/geoserver/www/openLayers/theme/default/style.css" type="text/css" />
        <script src="http://localhost/geoserver/www/openLayers/OpenLayers.js" type="text/javascript"></script>

        <script src="http://localhost/geoserver/www/geoext/lib/GeoExt.js" type="text/javascript"></script>        
        <link rel="stylesheet" type="text/css" href="http://localhost/geoserver/www/geoext/resources/css/geoext-all.css"/>


        <script>

            OpenLayers.Util.onImageLoadErrorColor = 1;
            OpenLayers.Util.onImageLoadErrorColor = "transparent";          

            Ext.BLANK_IMAGE_URL = "http://localhost/geoserver/www/ext/resources/images/default/s.gif";
            var app, items = [], controls = [];
            var lon = 85.344;
            var lat = 27.7;
            var zoom = 12;
            var url = "http://localhost/geoserver/wms";



            Ext.onReady(function() {            
                app = new Ext.Viewport({
                    layout: "border",
                    items: items
                });     

Jakie jest Twoje pytanie?
podmroku

@ w mroku, gdy widok nie ma danych, tzn. nie ma wiersza, warstwa jest taka, jak pokazano na zdjęciu
kinkajou

... i chcesz wiedzieć, jak pozbyć się czerwonych płytek?
podmrok

@ w mroku tak, czy jest na to sposób
kinkajou 27.02.

Odpowiedzi:


5

próbowałeś tego, aby dodać domyślny obraz błędu obrazu:

OpenLayers.Util.onImageLoadError = function(){
     this.src = "images/blank.png";
};

świetne rozwiązanie zadziałało dla mnie.
kinkajou

23

Nowsze wersje OpenLayers (post 2.11) powinny do tego używać klas CSS.

.olImageLoadError { 
    /* when OL encounters a 404, don't display the pink image */
    display: none !important;
} 

1
From style.css: .olImageLoadError {kolor tła: różowy; krycie: 0,5; filtr: alfa (nieprzezroczystość = 50); / * IE * /}
ca0v

5

Ustaw następujące parametry w OpenLayers:

// Avoid pink error tiles
OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3;
OpenLayers.Util.onImageLoadErrorColor = "transparent";

Dokument referencyjny / samouczek:

http://workshop.opengeo.org/stack-intro/openlayers.html

Należy pamiętać, że 3 jest bardzo wysoką wartością tolerancji dla prób przeładowania IMHO i można ją obniżyć do zaledwie 1.


Dodałem te parametry, ale nadal mam ten sam błąd. Dodałem również kod
kinkajou,

Musisz ustawić parametry PRZED utworzeniem dowolnego obiektu openlayers.
unicoletti

przy użyciu geotekstu zmienne te zostały zadeklarowane na górze, jak pokazuje moja edycja, ale nadal nie działa. Działa to tylko wtedy, gdy korzystam tylko z openlayerów. Masz problem z moją inicjalizacją?
kinkajou

Mógłbyś wyjaśnić, że od początku używasz geotekstu. To też jest w FAQ
unicoletti

moje złe :( no cóż, niektóre moje strony używają tylko otwartych warstw, a inne używają geoext + openlayers próbowałem tego, używając tylko otwartej warstwy działa dobrze, ale utknąłem z innymi
kinkajou

3

To po prostu działało dla mnie OpenLayers V2.13.1

.olTileImage.olImageLoadError {
    display: none !important;
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.