안녕하세요 OpenLayers를 이용해 구현을 하고 있는데요
그중에 getfeatureinfo를 이용해서 구현하는 부분이 있어 고민 하다가 글을 쓰게 되었습니다.
http://GIS서버주소/cgi-bin/WMS.cgi?
LAYERS=레이어명&
VERSION=1.3.0&
EXCEPTIONS=text/xml&
CRS=EPSG%3A900913&
SERVICE=WMS&
BBOX=14128028.675814,4518272.017671,14143316.081468,4526288.351011&
WIDTH=590&
HEIGHT=430&
REQUEST=GetFeatureInfo&
I=100&
J=100&
INFO_FORMAT=text%2Fxml&
QUERY_LAYERS=레이어명(Layers와 동일)
위와같이 브라우저에서 실행할 경우 아래와 같이 xml 페이지를 반환하는것을 확인했습니다.
getfeatureinfo 자체가 클릭한 속성의 상세 정보를 얻어오는것 이어서 gml이 0으로 반환하는것 같습니다.
OpenLayer를 이용해 구현중인데요
OpenLayers.Request.GET연결시 성공 되는것은 확인했지만,
features가 반환되지 않아 고생하고 있습니다.
해당 부분은 아래와 같이 구현하였습니다.
//크로스 도메인을 위한 proxy선언
//특정부분을 클릭했을때 연결부분
function onClick(e) {
var url = identifyLayerwms.getFullRequestString({
LAYERS : '레이어명',
VERSION : "1.3.0",
EXCEPTIONS: "text/xml",
BBOX: identifyLayerwms.map.getExtent().toBBOX(),
WIDTH: identifyLayerwms.map.size.w,
HEIGHT: identifyLayerwms.map.size.h,
REQUEST: "GetFeatureInfo",
I : "100",
J : "100",
X: e.xy.x,
Y: e.xy.y,
INFO_FORMAT: "text/xml",
QUERY_LAYERS: '레이어명(Layers와 동일)'
});
//document.getElementById('output').innerHTML = url;
//OpenLayers.loadURL(url, '', this, setFeatures);
OpenLayers.Request.GET({
url: '',
async: true,
params: {
LAYERS : '레이어명',
VERSION : "1.3.0",
EXCEPTIONS: "text/xml",
CRS : 'EPSG:900913',
BBOX: identifyLayerwms.map.getExtent().toBBOX(),
WIDTH: identifyLayerwms.map.size.w,
HEIGHT: identifyLayerwms.map.size.h,
REQUEST: "GetFeatureInfo",
I : "100",
J : "100",
X: e.xy.x,
Y: e.xy.y,
INFO_FORMAT: "text/xml",
QUERY_LAYERS: '레이어명(Layers와 동일)'
},
success: function(response) {
alert('성공!!');
alert('response : ' + response);
setFeatures(response);
},
failure: function() {
alert("실패");
}
});
OpenLayers.Event.stop(e);
}
//feature 담는 부분
function setFeatures(response) {
g = new OpenLayers.Format.GML();
alert('g : ' + g);
features = g.read(response.responseText);
alert('features : ' + features);
displayInfo();
}
//담은 feature를 뿌리는 부분
function displayInfo() {
var html = "";
if (features != null && features.length > 0) {
alert('features 있음');
for(var feat in features) {
selectionLayer.addFeatures(features[feat]);
for (var j in features[feat].attributes) {
html += "<li>"+j+": "+features[feat].attributes[j]+"</li>";
}
html += "</ul>";
}
}
alert('html : ' + html);
document.getElementById('output').innerHTML = html;
}
으로 구성 하였습니다.
일주일정도 여러 자료도 찾아보고
OpenLayers.org 사이트도 보았지만
어떤 부분이 문제가 되는지 몰라서 포럼에 올리게 되었습니다.
참고가 될만한 부분이 있으면 도움 부탁드립니다.
긴글 읽어 주셔서 감사합니다.