Не работает SLD

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
ILYA_
Новоприбывший
Сообщения: 11
Зарегистрирован: 18 янв 2011, 18:30
Репутация: 0

Не работает SLD

Сообщение ILYA_ »

Здравствуйте! Имеется wms слой tourizm. Нужно отобразить только некоторые объекты (как в примере type=4, где type-атрибут объектов слоя tourizm). На SLD мапсервер не реагирует, отображает как в мапфайле. Подскажите пожалуйста где может быть не так!

Исходники:

Код: Выделить всё

     // опции карты
	var options = 
		{	
			controls:[],	
			maxExtent: new OpenLayers.Bounds(-1265, -2600, 4300, 700),
			numZoomLevels: 6,
			scales: [50000000, 100000000, 200000000, 400000000, 750000000, 1500000000],
			maxResolution: "auto" 
		};
	
	// сама карта
	map = new OpenLayers.Map('map', options);
       //слой
var myTourizm = new OpenLayers.Layer.WMS("rybTourizm",
		mapUrl,
		{map: mapPath,layers: 'tourizm',transparent: true,format: 'gif'},
            {visibility: true,isBaseLayer: false}
	);

       map.addLayer(myTourizm);
//SLD-фильтр
 myTourizm.mergeNewParams({SLD_BODY:"<StyledLayerDescriptor version='1.0.0'><NamedLayer><Name>WL:tourizm</Name>    <UserStyle><Title>group1</Title><FeatureTypeStyle><Rule><Filter><PropertyIsEqualTo><PropertyName>Type</PropertyName><Literal>4</Literal></PropertyIsEqualTo>        </Filter>             </Rule></FeatureTypeStyle></UserStyle></NamedLayer></StyledLayerDescriptor>",'style':""});
 myTourizm.redraw(true);
 

Вот SLD в нормальном виде:

Код: Выделить всё

<StyledLayerDescriptor version="1.0.0">
 <NamedLayer>
  <Name>tourizm</Name>
    <UserStyle>
      <Title>group1</Title>
       <FeatureTypeStyle>
        <Rule>
          <Filter>
             <PropertyIsEqualTo>
               <PropertyName>Type</PropertyName>
               <Literal>4</Literal>
             </PropertyIsEqualTo>
          </Filter>    
         </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>
слой в МАР-файле

Код: Выделить всё

  LAYER
    NAME 'tourizm'
    STATUS ON
    TYPE POINT
    TRANSPARENCY 100
    DUMP TRUE
    DATA 'shp/tourizm.shp'
    
    METADATA
		'wms_title' 'tourizm'
            'wfs_typename' 'tourizm'
            'wfs_title' 'tourizm'
             tourtype_validation_pattern '.' 
     END

    PROJECTION
	    'proj=longlat'
	    'ellps=WGS84'
	    'datum=WGS84'
	    'no_defs'
    END
    LABELITEM "label"
    
    FILTERITEM "TYPE"    
    CLASS 
       TEMPLATE "templates/homes.html"	
       STYLE
         SYMBOL "tourizm_1"
         SIZE 24
       END
       LABEL
         COLOR 0 0 0
	   TYPE TRUETYPE
         SHADOWCOLOR 255 255 255
	   FONT arial
	   SIZE 8
	   ANTIALIAS TRUE
	   POSITION AUTO
	   PARTIALS FALSE
	   MINDISTANCE 0
	   BUFFER 4	
         ENCODING UTF-8
         ANGLE AUTO
	 END
    END

Хотя в ms_error.txt написано что все ок:
[Tue Jan 18 22:19:45 2011].218000 msApplySLD(): Map file after SLD was applied /ms4w/tmp/ms_tmp/4d35e7d1_98c_0._sld.map[Tue Jan 18 22:19:45 2011].390000 msDrawMap(): Layer 3 (tourizm), 0.156s

В чем может быть дело?
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Не работает SLD

Сообщение Mavka »

У меня сейчас нет возможности проверить корректность вашего решения.
Поэтому только общие слова: при включенной отладке создается map-файл с примененным стилем SLD
/ms4w/tmp/ms_tmp/4d35e7d1_98c_0._sld.map
отловите его и посмотрите что MapServer в нем понаписал.

P.S. redraw делать не нужно, он уже входит в mergeNewParams.
лангольеры под окном жрали время ом-ном-ном
ILYA_
Новоприбывший
Сообщения: 11
Зарегистрирован: 18 янв 2011, 18:30
Репутация: 0

Re: Не работает SLD

Сообщение ILYA_ »

вот что находится после применения SLD в созданном промежуточном мапфайле (слой tourizm):

Код: Выделить всё

  
  LAYER
    DATA "shp/tourizm.shp"
    DEBUG 5
    DUMP TRUE
    LABELITEM "label"
    METADATA
      "wfs_title"	"tourizm"
      "wfs_typename"	"tourizm"
      "tourtype_validation_pattern"	"."
      "wms_title"	"tourizm"
    END
    NAME "tourizm"
    PROJECTION
      "proj=longlat"
      "ellps=WGS84"
      "datum=WGS84"
      "no_defs"
    END
    STATUS ON
    TYPE POINT
    UNITS METERS
    CLASS
      LABEL
        ANGLE AUTO
        ANTIALIAS TRUE
        FONT "arial"
        MAXSIZE 256
        MINSIZE 4
        SIZE 8
        TYPE TRUETYPE
        BUFFER 4
        COLOR 0 0 0
        ENCODING "UTF-8"
        FORCE FALSE
        MINDISTANCE 0
        MINFEATURESIZE -1
        OFFSET 0 0
        PARTIALS FALSE
        POSITION AUTO
        SHADOWCOLOR 255 255 255
      END
      STYLE
        ANGLE 360
        OPACITY 100
        SIZE 24
        SYMBOL "tourizm_1"
      END
      TEMPLATE "templates/homes.html"
    END
  END
Ничего не изменилось (фильтра тут нет)...
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Не работает SLD

Сообщение Mavka »

Если нужен фильтр, то почитайте здесь
лангольеры под окном жрали время ом-ном-ном
ILYA_
Новоприбывший
Сообщения: 11
Зарегистрирован: 18 янв 2011, 18:30
Репутация: 0

Re: Не работает SLD

Сообщение ILYA_ »

Mavka писал(а):Если нужен фильтр, то почитайте здесь
Спасибо! :) Фильтр заработал (не sld, ну в принципе и такой сойдет):

в мапфайле:

Код: Выделить всё

  FILTER ([Type] = %tourtype%)
создание и изменение параметров слоя:

Код: Выделить всё

var myTourizm = new OpenLayers.Layer.MapServer('rybTourizm',
                 'http://localhost/cgi-bin/mapserv.exe',
                 {
                     map: mapPath,
                     layers: 'tourizm' , tourtype: '5',isBaseLayer:false
                     	
                  }
      ); 
     
       map.addLayer(myTourizm);
       ...
       myTourizm.mergeNewParams({tourtype: '2'}); 
только этот слой теперь внизу рисуется под всеми слоями, включая тайлы. а должен сверху быть. Вытащить с помощью zindex не выходит, порядок добавления слоев такой:

Код: Выделить всё

map.addLayer(myTiles);
       map.addLayer(myHighlight);
       map.addLayer(myHomes);
       map.addLayer(myStreets);
       map.addLayer(myTourizm);
в мапфайле описаны в такой же последовательности. SelectFeature не использую. :?:
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Не работает SLD

Сообщение Mavka »

Фильтр заработал (не sld, ну в принципе и такой сойдет)
Ваш вариант, с точки зрения sld, тоже был неправильный. Про фильтры я написал более подробную статью, черновик которой вы видели, но с публикацией есть некоторые задержки.

Про порядок слоев - почему он ложится на самый низ не знаю; mergeNewParams на это не влияет.
лангольеры под окном жрали время ом-ном-ном
ILYA_
Новоприбывший
Сообщения: 11
Зарегистрирован: 18 янв 2011, 18:30
Репутация: 0

Re: Не работает SLD

Сообщение ILYA_ »

Mavka, подскажите пожалуйста где было неправильно в sld.
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Не работает SLD

Сообщение Mavka »

За фильтр в SLD отвечает LayerFeatureConstraints, но в UMN он не поддерживается. Можно, конечно, использовать фильтры в rules. Теоретически, это могло сработать. Я к сожалению сейчас в местах не столь отдаленных (от работы) и проверить конкретно ваш ход действий не могу.
лангольеры под окном жрали время ом-ном-ном
Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя