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
                });     

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";
};

ó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;
} 

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.


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;
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.