|
//가시권분석 WPS public function RadialLineOfSight(myMapPoint:MapPoint):void { var sText:String = '<wps:Execute version="1.0.0" service="WPS"' + 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/wps/1.0.0"' + 'xmlns:wfs="http://www.opengis.net/wfs" xmlns:wps="http://www.opengis.net/wps/1.0.0"' + 'xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml"' + 'xmlns:ogc="http://www.opengis.net/ogc" xmlns:wcs="http://www.opengis.net/wcs/1.1.1"' + 'xmlns:xlink="http://www.w3.org/1999/xlink"' + 'xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd">' + '<ows:Identifier>statistics:RadialLineOfSight</ows:Identifier>' + '<wps:DataInputs>' + '<wps:Input>' + '<ows:Identifier>inputCoverage</ows:Identifier>' + '<wps:Reference mimeType="image/tiff" xlink:href="http://geoserver/wcs" method="POST">' + '<wps:Body>' + '<wcs:GetCoverage service="WCS" version="1.1.1">' + '<ows:Identifier>FGIS:K_DEM</ows:Identifier>' + '<wcs:DomainSubset>' + '<ows:BoundingBox crs="http://www.opengis.net/gml/srs/epsg.xml#3857">' + '<ows:LowerCorner>'+ (myMapPoint.x-1010).toFixed()+' '+ (myMapPoint.y-1010).toFixed()+'</ows:LowerCorner>' + '<ows:UpperCorner>'+ (myMapPoint.x+1010).toFixed()+' '+ (myMapPoint.y+1010).toFixed()+'</ows:UpperCorner>' + '</ows:BoundingBox>' + '</wcs:DomainSubset>' + '<wcs:Output format="image/tiff"/>' + '</wcs:GetCoverage>' + '</wps:Body>' + '</wps:Reference>' + '</wps:Input>' + '<wps:Input>' + '<ows:Identifier>observerPoint</ows:Identifier>' + '<wps:Data>' + '<wps:ComplexData mimeType="application/wkt"><![CDATA[' + 'POINT(' + myMapPoint.x.toFixed() + ' ' + myMapPoint.y.toFixed() + ')' + ']]></wps:ComplexData>' + '</wps:Data>' + '</wps:Input>' + '<wps:Input>' + '<ows:Identifier>observerOffset</ows:Identifier>' + '<wps:Data>' + '<wps:LiteralData>1.8</wps:LiteralData>' + '</wps:Data>' + '</wps:Input>' + '<wps:Input>' + '<ows:Identifier>radius</ows:Identifier>' + '<wps:Data>' + '<wps:LiteralData>1000</wps:LiteralData>' + '</wps:Data>' + '</wps:Input>' + '</wps:DataInputs>' + '<wps:ResponseForm>' + '<wps:RawDataOutput mimeType="text/xml; subtype=wfs-collection/1.0">' + '<ows:Identifier>result</ows:Identifier>' + '</wps:RawDataOutput>' + '</wps:ResponseForm>' + '</wps:Execute>'; var xml :XML = XML(sText); var httpService_XML:mx.rpc.http.mxml.HTTPService = new mx.rpc.http.mxml.HTTPService( ); httpService_XML.url = GEOServer_URL + "/ows"; //"/WPS"; httpService_XML.method = "POST"; httpService_XML.contentType = "application/xml"; httpService_XML.resultFormat = "text"; //"e4x"; httpService_XML.addEventListener(ResultEvent.RESULT, onResult_XML); httpService_XML.addEventListener(FaultEvent.FAULT, onFault); httpService_XML.send(xml); MessageBoxLabel.text = "가시권 분석중(3분이상 소요)..."; MessageBox2.visible = true; CursorManager.setBusyCursor(); BusyIndicator.visible = true; MessageBox2.x = this.screen.width/2 -MessageBoxLabel.width/2 - 100; MessageBox2.y = this.screen.height/2- MessageBoxLabel.height/2; viewshedGraphicsLayer.clear(); function onResult_XML(e:ResultEvent):void{ CursorManager.removeBusyCursor(); BusyIndicator.visible = false; MessageBox2.visible = false; var item_data:String = e.result as String; /* <gml:featureMember> <feature:RadialLineOfSight fid="RadialLineOfSight.1"><gml:boundedBy><gml:Box srsName="<gml:coord><gml:X>14136839</gml:X><gml:Y>4519545.0</gml:Y></gml:coord><gml:coord><gml:X>14137081.424242424</gml:X><gml:Y>4519545.0</gml:Y></gml:coord></gml:Box></gml:boundedBy">http://www.opengis.net/gml/srs/epsg.xml#3857"><gml:coord><gml:X>14136839</gml:X><gml:Y>4519545.0</gml:Y></gml:coord><gml:coord><gml:X>14137081.424242424</gml:X><gml:Y>4519545.0</gml:Y></gml:coord></gml:Box></gml:boundedBy> <feature:geom> <gml:MultiLineString srsName="http://www.opengis.net/gml/srs/epsg.xml#3857"> <gml:lineStringMember> <gml:LineString> <gml:coordinates>1.4136839E7,4519545.0,1.0 1.41368491010101E7,4519545.0,1.0 1.4136859202020202E7,4519545.0,1.0 1.4136869303030303E7,4519545.0,1.0 1.4136879404040404E7,4519545.0,1.0 1.4136889505050505E7,4519545.0,1.0 1.4136899606060605E7,4519545.0,1.0 1.4136909707070706E7,4519545.0,1.0 1.4136919808080807E7,4519545.0,1.0 1.4136929909090908E7,4519545.0,1.0 1.4136940010101011E7,4519545.0,1.0 1.4136950111111112E7,4519545.0,1.0 1.4136960212121213E7,4519545.0,1.0 1.4136970313131314E7,4519545.0,1.0 1.4136980414141415E7,4519545.0,1.0 1.4136990515151516E7,4519545.0,1.0 1.4137000616161617E7,4519545.0,1.0 1.4137010717171717E7,4519545.0,1.0 1.4137020818181818E7,4519545.0,1.0 1.413703091919192E7,4519545.0,1.0 1.413704102020202E7,4519545.0,1.0 1.4137051121212121E7,4519545.0,1.0 1.4137061222222222E7,4519545.0,1.0 1.4137071323232323E7,4519545.0,1.0 1.4137081424242424E7,4519545.0,1.0</gml:coordinates> </gml:LineString> </gml:lineStringMember> </gml:MultiLineString> </feature:geom> <feature:Angle>0.0</feature:Angle><feature:Visible>0</feature:Visible> </feature:RadialLineOfSight> </gml:featureMember> */ var WPSXml:XML = XML(e.result); var o:Object= xmlToObject(WPSXml); var top:Object=o.FeatureCollection; var componentArrayC:ArrayCollection=top.featureMember; if(componentArrayC.length > 0){ for each(var _featureMember:Object in componentArrayC) { try{ var _feature:Object = _featureMember.RadialLineOfSight; var _Visible:String = _feature.Visible; var newClr:uint = 0xFF0000; var newAlpha:Number = 0.8; if(_Visible != '0'){ newClr = 0x0000FF; newAlpha = 0.3; } var shape:Object = _feature.geom; var polyLine :Polyline = new Polyline(); var MultiLineString:Object = shape.MultiLineString; var lineStringMember:Object = MultiLineString.lineStringMember; var LineString:Object = lineStringMember.LineString; var path:String = LineString.coordinates; polyLine.addPath( createPointArray( path) ); var _graphic :Graphic = new Graphic(); _graphic.geometry = polyLine as Geometry; var LineSymbol:SimpleLineSymbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, newClr, newAlpha, 3); _graphic.symbol = LineSymbol; viewshedGraphicsLayer.add(_graphic); } catch (err:Error) { } } var graphic:Graphic = new Graphic(myMapPoint, viewshedSimpleMarker); viewshedGraphicsLayer.add(graphic); } } function createPointArray( coordinates :String ) :Array { var points :Array = new Array(); var coords :Array = coordinates.split( " " ); for( var i :int = 0; i < coords.length; i++) { var PointXY :Array = coords[i].split( "," ); points.push( new MapPoint( PointXY[0], PointXY[1]) ); } return points; } function xmlToObject(x:XML):Object{ var xmlStr:String = x.toString(); var xmlDoc:XMLDocument = new XMLDocument(xmlStr); xmlDoc.ignoreWhite=true; var decoder:SimpleXMLDecoder = new SimpleXMLDecoder(true); var resultObj:Object = decoder.decodeXML(xmlDoc); return resultObj; } function onFault(e:FaultEvent):void{ CursorManager.removeBusyCursor(); BusyIndicator.visible = false; MessageBox2.visible = false; } } |
* 참조: 위는 10*10m로 WPS RadialLineOfSight하였으나,
아래는 30*30의 셀연산으로한 화면입니다. 차이점이 큽니다.
* 입지분석시 활용 예 : 인접 도로나 취락지에서 조망권분석시 활용
|