I am having problem parsing
http://localhost:8080/geoserver/wms?request=GetStyles&layers=topp%3Astates&service=wms&version=1.1.1
getStyle response from geoserver of layer topp:states. I want to get the SLD information of a layer with openlayers. I get blank response for the following request. The response parsed SLD file has no value. For now I am doing :
var json = new OpenLayers.Format.JSON();
OpenLayers.Request.GET({
url: "http://localhost:8080/geoserver/wms",
params: {request: "GetStyles",layers:"topp:states",service:"wms",version:"1.1.1"},
success: complete
});
function complete(req) {
//console.log(req);
sld = format.read(req.responseXML || req.responseText);
//console.log("The sld");
//console.log(sld.namedLayers);
//styles = sld.namedLayers.interpreted.userStyles[0];
//console.log(styles);
// building_vec.styleMap.styles.default = styles;
console.log(json.write(sld, true));
}
The response:
{
"namedLayers": {
},
"version": "1.0.0"
}
But when I hit direct requested url I get right sld.
http://localhost:8080/geoserver/wms?request=GetStyles&layers=topp%3Astates&service=wms&version=1.1.1
The SLD with url directly on address bar:
topp:states
population
Population in the United States
1
A sample filter that filters the United States into three
categories of population, drawn in different colors
name
< 2M
PERSONS
2000000
#4DFF4D
0.7
2M - 4M
PERSONS
2000000
4000000
#FF4D4D
0.7
> 4M
PERSONS
4000000
#4D4DFF
0.7
Boundary
0.2
STATE_ABBR
Times New Roman
14
Normal
normal
0.5
0.5
0.0
pophatch
Population in the United States
A sample filter that filters the United States into three
categories of population, drawn in different colors
name
< 2M
PERSONS
2000000
shape://slash
0xAAAAAA
16
2M - 4M
PERSONS
2000000
4000000
shape://slash
0xAAAAAA
8
> 4M
PERSONS
4000000
shape://slash
0xAAAAAA
4
Boundary
STATE_ABBR
Times New Roman
14
Normal
normal
0.5
0.5
0.0
2
0xFFFFFF
polygon
Default Polygon
A sample style that draws a polygon
name
rule1
Gray Polygon with Black Outline
A polygon with a gray fill and a 1 pixel black outline
#AAAAAA
Answer
It seems the problem is in the line breaks from Geoserver XML indent.
It works when I do something like below
OpenLayers.Request.GET({
url: "http://localhost:8080/geoserver/wms",
params: {
request: "GetStyles",
layers: "topp:states",
service: "wms",
version: "1.1.1"
},
success: function (data, statut, xhr) {
var format = new OpenLayers.Format.SLD();
//Trick is to clean line break
var obj = format.read(data.responseText.replace(/(\r\n|\n|\r)/gm, ""));
//Js object
console.log(obj);
var json = new OpenLayers.Format.JSON();
// Object converted to json for readability but not really useful at js level
console.log(json.write(obj, true));
}
});
Edit
When I do my test going to http://localhost:8080/geoserver/topp/wms?service=WMS&version=1.1.0&request=GetMap&layers=topp:states&styles=&bbox=-124.73142200000001,24.955967,-66.969849,49.371735&width=780&height=330&srs=EPSG:4326&format=application/openlayers
, it failed.
I solved the problem by replacing the file OpenLayers.js into the geoserver/WEB-INF/lib/wms-2.3.1.jar with the http://openlayers.org/dev/OpenLayers.js (because the default built-in Openlayers library in Geoserver don't have OpenLayers.Format.SLD() and OpenLayers.Format.JSON())
If you don't want to change anything but only confirm it works just try with this other ajax request
OpenLayers.Request.GET({
url: "http://localhost:8080/geoserver/wms",
params: {
request: "GetStyles",
layers: "topp:states",
service: "wms",
version: "1.1.1"
},
success: function (data, statut, xhr) {
var format = new OpenLayers.Format.XML();
//Trick is to clean line break
var obj = format.read(data.responseText.replace(/(\r\n|\n|\r)/gm, ""));
//Dom object to manipulate yourself
console.log(obj);
//Try that you can convert the XML object back to text
if (window.ActiveXObject){
//For Internet Explorer:
var string = obj.xml;
} else {
var string = (new XMLSerializer()).serializeToString(obj);
}
console.log(string)
}
});
If you always have a blank answer with code below, look on the Cross Domain Policy matter. It's a common problem with ajax calls. See http://www.gistutor.com/geoserver/21-intermediate-geoserver-tutorials/38-configuring-geoserver-proxy-for-public-and-remote-data-access.html
No comments:
Post a Comment