import nl.idgis.giclient.geoma.Geometry; import nl.idgis.giclient.geoma.Polygon; import nl.idgis.giclient.geoma.LinearRing; import nl.idgis.giclient.geoma.Point; import nl.idgis.giclient.geoma.Circle; import nl.idgis.giclient.geoma.MultiPolygon; /** * @author copierrj */ class nl.idgis.giclient.geoma.CAPFactory { static function parseArea(area:XMLNode):Geometry { var geometries:Array = new Array(); var childNodes:Array = area.childNodes; for(var i:Number = 0; i < childNodes.length; i++) { var geometry:Geometry = parseGeometry(childNodes[i]); if(geometry != null) { geometries.push(geometry); } } if(geometries.length == 0) { return null; } else if(geometries.length == 1){ return geometries[0]; } else { return new MultiPolygon("EPSG:4326", geometries); } } static function parseGeometry(geometry:XMLNode):Geometry { if(geometry.nodeName == "polygon") { var coordinates:Array = geometry.firstChild.nodeValue.split(" "); var points:Array = new Array(); for(var i:Number = 0; i < coordinates.length; i++) { var point:Array = String(coordinates[i]).split(","); points.push(new Point("EPSG:4326", Number(point[0]), Number(point[1]))); } points[points.length - 1] = points[0]; var ring:LinearRing = new LinearRing("EPSG:4326", points); return new Polygon("EPSG:4326", ring); } else if(geometry.nodeName == "circle") { var parts:Array = geometry.firstChild.nodeValue.split(" "); var point:Array = String(parts[0]).split(","); var p:Point = new Point("EPSG:4326", Number(point[0]), Number(point[1])); var circle:Circle = new Circle("EPSG:4326", new LinearRing("EPSG:4326", [p, p])); var radius:Number = Number(parts[1]) * (60 / 6667.2); circle.setRadius(radius); return circle; } return null; } }