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.