내 웹 응용 프로그램이 잘 작동하고 예상대로 Geoserver 2.6.0을 통해 PostGIS와에서 OpenLayers지도,에 WMS 층을 제공에서 자바 스크립트와 WMS 층. 사용자는 HTML의 드롭 다운 상자를 통해 속성에 따라 WMS 계층의 특정 요소를 필터링하고 예상대로 레이어를 업데이트 할 수 있습니다. 추가 드롭 다운 상자 값에 따라 WMS 계층의 스타일을 변경하는 추가 드롭 다운 상자를 추가하고 싶습니다. 추가 드롭 다운의 스타일 옵션은 'normal'또는 'highlight'중 아주 간단합니다. 나는 자바 스크립트에서 단순한 'if else'문을 사용하면이 두 스타일 중 하나에서 레이어를 그릴 것이라고 생각했습니다. 그러나 불행하게도 사용자가 새 스타일을 선택하고 업데이트 버튼을 클릭하면 스타일이 업데이트되지 않으며이 날과 씨름하는 날이 지나면 완전히 멈추게됩니다.동적으로 스타일 Geoserver
스타일이 개별적으로 잘 작동 층 그들은 단지 이런 식으로 함께 작동하지 않습니다 (그들은 Gesoserver 인터페이스에서 확인)에 대한 SLD 구문은, 첫 번째 스타일은 남아있다.
나는이 두 가지가 유사한 게시물의 측면에서 발견 가장 가까운,하지만이 내 문제
http://osgeo-org.1560.x6.nabble.com/dynamic-SLD-with-openlayers-td3806595.html
모든 아이디어를 해결하지 않는 것? 미리 감사드립니다. 코드는 다음과 같습니다.
되는 HTML에 대한 코드 ..
<p>Country filter:</p>
<select id="cql1">
<option value="country LIKE 'england'">england</option>
<option value="country LIKE 'wales'">wales</option>
</select>
<p>Road type filter:</p>
<select id="cql2">
<option value="road LIKE 'a-road'">main road</option>
<option value="road LIKE 'b-road'">minor road</option>
</select>
<p>Status filter:</p>
<select id="cql3">
<option value="status LIKE 'in use'">in use</option>
<option value="status LIKE 'under construction'">under construction</option>
</select>
<p>Line style:</p>
<select id="line_style">
<option value="normal">Normal</option>
<option value="highlight">Highlight</option>
</select>
<input type="submit" value="update" onclick="updateFilter(this);">
자바 스크립트 코드 ...
var roads;
// function that updates the WMS layer following user selection
function updateFilter() {
var cql1 = document.getElementById("cql1");
var cql2 = document.getElementById("cql2");
var cql3 = document.getElementById("cql3");
var line_style = document.getElementById("line_style");
var format = new OpenLayers.Format.CQL();
if (roads.params.CQL_FILTER) {
delete roads.params.CQL_FILTER;
}
var filter1;
var filter2;
var filter3;
try {
filter1 = format.read(cql1.value);
filter2 = format.read(cql2.value);
filter3 = format.read(cql3.value);
} catch (err) {
if ((cql1.value != "") || (cql2.value != "") || (cql3.value != "") || (line_style.value != "")) { //if cannot read one of the values
alert("One of the filters cannot be processed");
}
}
if ((filter1) || (filter2) || (filter3) & (line_style.value = 'normal')) {
layer.clearGrid(); // This gets rid of the previous WMS display...
layer.mergeNewParams({
'STYLES': "layer_normal",
'CQL_FILTER': cql1.value + " AND " + cql2.value + " AND " + cql3.value
})
} else {
layer.clearGrid(); // This gets rid of the previous WMS display...
layer.mergeNewParams({
'STYLES': "layer_highlight",
'CQL_FILTER': cql1.value + " AND " + cql2.value + " AND " + cql3.value
})
}
layer.redraw({
force: true
});
return false;
}
// Details of the WMS layer itself
roads = new OpenLayers.Layer.WMS(
"Filter Selection",
"http://www.example.com/geoserver/roads/wms", {
LAYERS: 'data:roads',
format: 'image/png',
srs: 'ESPG:3857',
transparent: true
}, {
transitionEffect: null,
buffer: 1,
visibility: true,
isBaseLayer: false
}
);