Como evitar azulejos cor-de-rosa quando a exibição de banco de dados / tabela está vazia?

10

Tenho visões espaciais no sentido de selecionar uma coluna espacial de outra tabela. Esta tabela é publicada usando o geoserver. Esta tabela está ativa e, em algum momento, não possui dados. Quando a tabela não possui dados, as mensagens exibidas são todas rede o erro no console do firebug é: insira a descrição da imagem aqui

O WMS retornou:

>  <?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>

O código:

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()
                    ]   


                });

Usando o 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
                });     
kinkajou
fonte
Qual a sua pergunta?
Underdark
@underdark quando vista não tem dados, isto é, nenhuma linha a camada é tal como mostrado na imagem
quincaju
... e você quer saber como se livrar dos azulejos vermelhos?
Underdark
@underdark sim, há alguma maneira de fazê-lo
kinkajou

Respostas:

5

você tentou fazer isso ao adicionar alguma imagem padrão ao erro de imagem:

OpenLayers.Util.onImageLoadError = function(){
     this.src = "images/blank.png";
};
Aragão
fonte
ótima solução funcionou para mim.
quincaju
23

Versões mais recentes do OpenLayers (post 2.11) devem usar classes CSS para isso.

.olImageLoadError { 
    /* when OL encounters a 404, don't display the pink image */
    display: none !important;
} 
perrygeo
fonte
1
Em style.css: .olImageLoadError {cor de fundo: rosa; opacidade: 0,5; filtro: alfa (opacidade = 50); / * IE * /}
ca0v 17/08/2012
5

Defina os seguintes parâmetros no OpenLayers:

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

Documento de referência / tutorial:

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

Observe que 3 é um valor de tolerância muito alta para tentativas de recarga IMHO e pode ser reduzido para apenas 1.

unicoletti
fonte
Eu adicionei estes parâmetros mas o código ainda mesmo erro eu adicionei também
kinkajou
Você deve definir os parâmetros antes de qualquer objeto de camada aberta ser criado.
Unicoletti
usando o geoext, essa variável foi declarada no topo, como mostra minha edição, mas ainda assim não funciona. Só funciona quando estou usando apenas openlayers algum problema com minha inicialização?
Kinkajou
Você poderia ter explicado que estava usando o geoext desde o início. Também está no FAQ: catb.org/esr/faqs/smart-questions.html
unicoletti
meu mau :( bem algumas das minhas páginas só usam camadas abertas e outros usam openlayers + geoext tentei isso usando apenas layer aberto funciona bem, mas preso com outro
kinkajou
3

Apenas funcionou para mim OpenLayers V2.13.1

.olTileImage.olImageLoadError {
    display: none !important;
}
MSS
fonte