geometries = array($this->geomtype_point, $this->geomtype_polygon, $this->geomtype_line, $this->geomtype_multipolygon, $this->geomtype_multiline); } function getGml($req){ $x = new connector($req); return $x->file; } function parsegml($req){ #$data = implode("",file($req)); $x = new connector($req); $data = $x->file; $this->parse_xml($data); } function parse_xml($data){ $section = false; $geom = false; $boundedBy = false; $coordinates = false; $el = -1; $parser = xml_parser_create(CHARSET); xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1); xml_parser_set_option($parser,XML_OPTION_TARGET_ENCODING,CHARSET); xml_parse_into_struct($parser,$data,$values,$tags); $code = xml_get_error_code ($parser); if ($code) { $line = xml_get_current_line_number($parser); $mb_exception = new mb_exception(xml_error_string($code) . " in line " . $line); } xml_parser_free($parser); foreach ($values as $element) { if(strtoupper($this->sepNameSpace($element[tag])) == strtoupper("boundedBy") && $element[type] == "open"){ $boundedBy = true; } if ($boundedBy) { if(strtoupper($this->sepNameSpace($element[tag])) == strtoupper("coordinates")){ $this->bbox = explode(",", str_replace(",,","",str_replace(" ",",",trim($element[value])))); $boundedBy=false; } } if(strtoupper($this->sepNameSpace($element[tag])) == strtoupper("featureMember") && $element[type] == "open"){ $this->member++; $this->keys[$this->member] = array(); $this->value[$this->member] = array(); $this->geometry[$this->member] = array(); $section = true; $cnt_geom = 0; } if($section == true){ if( in_array($this->sepNameSpace($element[tag]),$this->geometries) && $element[type] == "open"){ $geom = true; $this->geomtype[$this->member] = $this->sepNameSpace($element[tag]); } else if(in_array($this->sepNameSpace($element[tag]),$this->geometries) && $element[type] == "close"){ $cnt_geom++; $geom = false; } if($geom == true){ if (strtoupper($this->sepNameSpace($element[tag])) == strtoupper("coordinates")) { $this->geometry[$this->member][$cnt_geom] = str_replace(",,","",str_replace(" ",",",trim($element[value]))); $coordinates = true; // XXX: Increment counter to get all geometries of a feature member, // comment it out to only show first geometry of featuremember $cnt_geom++; } else if (!$coordinates && trim($element[value])) { $coords = str_replace(",,","",str_replace(" ",",",trim($element[value]))); $tmp_array = explode(",", $coords); if (count($tmp_array > 1)) { $this->geometry[$this->member][$cnt_geom] = $coords; $coordinates = true; // XXX: Increment counter to get all geometries of a feature member, // comment it out to only show first geometry of featuremember $cnt_geom++; } } } else if(strtoupper($this->sepNameSpace($element[tag])) == strtoupper("featureMember") && $element[type] == "close"){ $section = false; $el = -1; } else{ $el++; $this->values[$this->member][$el] = $element[value]; $this->keys[$this->member][$el] = $element[tag]; } } } } function sepNameSpace($s){ $c = strpos($s,":"); if($c>0){ return substr($s,$c+1); } else{ return $s; } } function getMemberCount(){ return ($this->member+1); } function getValueBySeparatedKey($memberCount,$keyName){ for($i=0; $ikeys[$memberCount]); $i++){ if($this->sepNameSpace($this->keys[$memberCount][$i]) == $keyName){ return $this->values[$memberCount][$i]; } } } function getValueByKey($memberCount,$keyName){ for($i=0; $ikeys[$memberCount]); $i++){ if($this->keys[$memberCount][$i] == $keyName){ return $this->values[$memberCount][$i]; } } } function getXfromMemberAsString($memberCount,$geomCount){ $t = explode(",",$this->geometry[$memberCount][$geomCount]); $x = array(); for($i=0; $i<(count($t)-1); $i=$i+2){ array_push($x,$t[$i]); } return implode(",",$x); } function getYfromMemberAsString($memberCount,$geomCount){ $t = explode(",",$this->geometry[$memberCount][$geomCount]); $y = array(); for($i=1; $i<=(count($t)-1); $i=$i+2){ array_push($y,$t[$i]); } return implode(",",$y); } function getGeometriesFromMember($memberCount){ return $this->geometry[$memberCount]; } function getGeometryTypeFromMember($memberCount){ return $this->geomtype[$memberCount]; } function exportGeometriesToJS ($isInFrame) { $prefix = ""; if ($isInFrame == true) { $prefix = "parent."; } $js = ""; $js .= "var geom = new ".$prefix."GeometryArray();\n"; for ($i=0; $igeometry); $i++) { $js .= $this->exportMemberToJS($i, $isInFrame); $js .= "geom.addCopy(q);\n"; } return $js; } function exportMemberToJS ($i, $isInFrame) { $prefix = ""; if ($isInFrame == true) { $prefix = "parent."; } $js = ""; if ($this->getGeometryTypeFromMember($i) == $this->geomtype_point) { $js .= "var current_geomtype = ".$prefix."geomType.point;\n"; } elseif ($this->getGeometryTypeFromMember($i) == $this->geomtype_line || $this->getGeometryTypeFromMember($i) == $this->geomtype_multiline) { $js .= "var current_geomtype = ".$prefix."geomType.line;\n"; } elseif ($this->getGeometryTypeFromMember($i) == $this->geomtype_polygon || $this->getGeometryTypeFromMember($i) == $this->geomtype_multipolygon) { $js .= "var current_geomtype = ".$prefix."geomType.polygon;\n"; } else die("unknown geometry type: '".$this->getGeometryTypeFromMember($i)."'"); $js .= "var q = new ".$prefix."MultiGeometry(current_geomtype);\n"; for ($j=0; $jgeometry[$i]); $j++) { $js .= "q.addGeometry(current_geomtype);\n"; $x_array = explode(",", $this->getXfromMemberAsString($i, $j)); $y_array = explode(",", $this->getYfromMemberAsString($i, $j)); for ($k=0; $k