2014-06-24 2 views
0

저는 Openlayers에서 상대적으로 경험이 없으므로 지금 당분간이 문제를 파악하려고 노력해 왔습니다. 기본적으로 WMS 호출에서 내지도에 레이어를 만들었습니다. 라디오 버튼을 클릭하면 함수가 실행되고 서버의 적절한 파일에 링크 할 URL 부분이 삽입되도록 URL을 설정했습니다. 코드로 설명하는 것이 더 낫습니다.Openlayers가 WMS 호출 URL을 변경합니다.

var layer_type = "Tavg_SDdiff"; 
var layer_name = "Tavg_SD_diff"; 


function layer_names(id) { 

    layer_type = OpenLayers.Util.getElement(id).id; 
    } 


Tavg = new OpenLayers.Layer.WMS("Tavg", 
    "http://convection.meas.ncsu.edu:8080/thredds/wms/sco/synthesis/eval_WICCI_" + layer_type + "_50km.nc?", 
    {layers: layer_name, 
    version:'1.1.1', 
    CRS:'CRS:84', 
    "transparent":'true', 
    "styles":'boxfill/shrmc-mxhgt', 
    "colorscalerange":'-2.1,2.1', 
    "numcolorbands":'42', 
    "abovemaxcolor":'extend', 
    "belowmincolor":'extend', 
    time:"2001-01-01T00:00:00"}, 
    {isBaseLayer:false, setVisibility: true, transparent:true,displayInLayerSwitcher:true}); 
Tavg.url = "http://convection.meas.ncsu.edu:8080/thredds/wms/sco/synthesis/eval_WICCI_" + layer_type + "_50km.nc?"; 

그래서 라디오 버튼이 선택되어 있는지에 따라 layer_type 및 layer_name이 변경됩니다. 변수에 변화가 있음을 알고 있습니다. 왜냐하면 필자는 함수에서 alert()를 사용하여이를 확인했습니다.

또한 새 데이터를 표시 할 수 있도록 레이어를 다시 그립니다. 여기

function deleteLayer() { 
    Tavg.redraw(); 
    alert(Tavg.url); 
    } 

내가 두 번째 함수에서 경고를 삽입 할 때, 나는 그러므로 내가 다른 버튼과 다시 그리기를 선택하면지도에 아무것도 변경하지 않는 것, URL이지도 변수에 변경되지 않습니다 참조 문제 명령이 그 일을합니다. 각 파일의 레이어에 별도의지도 변수를 추가하지 않고도지도를 업데이트 할 수 있습니까?

답변

1

OpenLayers에서 WMS 쿼리 문자열의 일부를 변경하려면 mergeNewParams 함수가 있습니다.이 함수는이를 업데이트하고 모든 타일을 다시 요청합니다. 라인 222, http://trac.osgeo.org/openlayers/browser/trunk/openlayers/lib/OpenLayers/Layer/WMS.js을 참조하십시오. 명확히하기 위해 요청의 쿼리 문자열에서만 작동합니다.

귀하의 경우 URL의 일부로 다른 레이어와 레이어 유형이있는 것으로 보입니다. map.removeLayer (Tavg)를 호출하고 새 WMS 요청 url을 만들고 map.addLayer (Tavg)를 사용하여 WMS를 명시 적으로 다시 추가해야합니다.

일반적으로 URL에서 사용자가 제안하는 일부 규모의 리소스가있는 경우 ... thredds/wms/sco/synthesis/eval_WICCI_ "layer_type +"_50km.nc? "이지만 다른 주제별보기를 사용하면 하나의 URL만으로 WMS의 레이어 및 스타일 매개 변수를 사용하여 처리하는 것이 더 좋을 수 있습니다. 그렇지 않으면 동일한 타일에 대한 여러보기를 표시하기 위해 수백 개의 다른 URL로 끝날 수 있습니다. . 서버 관점에서 또한, 당신은이 상황의이 종류를 처리 할 수있는 예상 방법이라고, OpenLayers는 mergeNewParams 기능을 가지고 있다는 사실에주의 할 것이다

편집 :. 추가로 소스 코드를 통해 발굴 한 후을, 아마도 당신은 명시 적으로 url을 설정하고, 다시 그리기를 호출하여 setURL 함수를 사용하여 원하는 것을 할 수 있습니다. 이 두 함수는 모두 OpenLayers.Layer.HTTPRequest에 있으며 OpenLayers.Layer.WMS는 OpenLayers.Layer.Grid를 통해 해당 메서드 중 일부를 상속받습니다.

wms.setUrl(newURL); 
wms.redraw(); 

쉽게 테스트 할 수있는 방법이 없으므로 문제가 있으면 알려주세요.

관련 문제