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


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

Какой у Вас вопрос?
Подземье

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

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.


Я добавил эти параметры, но все еще та же ошибка, я также добавил код
kinkajou

Вы должны установить параметры ДО того, как любой объект openlayers будет создан.
unicoletti

используя geoext, эти переменные были объявлены сверху, как показывает моя правка, но все равно она не работает. Это работает только когда я использую только openlayers какие-либо проблемы с моей инициализацией?
kinkajou

Вы могли бы объяснить, что вы использовали geoext с самого начала. Это тоже в FAQ
unicoletti

мой плохой :( ну, некоторые из моих страниц используют только открытые слои, а другие используют geoext + openlayers пробовали это, используя только открытый слой, работает нормально, но застрял с другим
kinkajou

3

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

.olTileImage.olImageLoadError {
    display: none !important;
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.