Как избежать розовых плиток, когда БД / Таблица пуста?

10

У меня есть представления, которые являются пространственными в том смысле, что они выбирают некоторый пространственный столбец из другой таблицы. Эта таблица опубликована с использованием геосервера. Эта таблица жива и иногда вообще не имеет данных. Когда в таблице нет данных, отображается wms redи ошибка в консоли firebug: введите описание изображения здесь

WMS вернул:

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

Код:

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


                });

Использование 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
источник
Какой у Вас вопрос?
Подземье
@underdark, когда представление не имеет данных, т.е. нет строки, слой, как показано на рисунке
kinkajou
... и вы хотите знать, как избавиться от красной плитки?
Подземье
@underdark да есть ли способ сделать это
kinkajou

Ответы:

5

Вы пробовали это для добавления изображения по умолчанию при ошибке изображения:

OpenLayers.Util.onImageLoadError = function(){
     this.src = "images/blank.png";
};
Арагон
источник
отличное решение сработало для меня.
kinkajou
23

Более новые версии OpenLayers (пост 2.11) должны использовать CSS-классы для этого.

.olImageLoadError { 
    /* when OL encounters a 404, don't display the pink image */
    display: none !important;
} 
perrygeo
источник
1
Из style.css: .olImageLoadError {background-color: pink; непрозрачность: 0,5; фильтр: альфа (непрозрачность = 50); / * IE * /}
ca0v
5

Установите следующие параметры в OpenLayers:

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

Справочный документ / учебное пособие:

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

Обратите внимание, что значение 3 является очень высокой допустимой величиной для попыток перезагрузки IMHO и может быть уменьшено до 1.

unicoletti
источник
Я добавил эти параметры, но все еще та же ошибка, я также добавил код
kinkajou
Вы должны установить параметры ДО того, как любой объект openlayers будет создан.
unicoletti
используя geoext, эти переменные были объявлены сверху, как показывает моя правка, но все равно она не работает. Это работает только когда я использую только openlayers какие-либо проблемы с моей инициализацией?
kinkajou
Вы могли бы объяснить, что вы использовали geoext с самого начала. Это тоже в FAQ
unicoletti
мой плохой :( ну, некоторые из моих страниц используют только открытые слои, а другие используют geoext + openlayers пробовали это, используя только открытый слой, работает нормально, но застрял с другим
kinkajou
3

Это просто сработало для меня OpenLayers V2.13.1

.olTileImage.olImageLoadError {
    display: none !important;
}
MSS
источник