geometries = array($this->geomtype_point, $this->geomtype_polygon, $this->geomtype_line, $this->geomtype_multipolygon, $this->geomtype_multiline); } function parsegml($req){ #$data = implode("",file($req)); $x = new connector($req); $data = $this->char_encode($x->file); $this->parse_xml($data); } function parsestring($req){ $data = $req; $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; } 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; } } } 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 char_encode($s){ if(CHARSET == 'UTF-8'){ $s = utf8_encode($s); } return $s; } function exportGeometriesToJS () { $js = ""; $js .= "var geom = new GeometryArray();\n"; for ($i=0; $igeometry); $i++) { $js .= $this->exportMember($i); $js .= "geom.appendMember(q);\n"; } } function exportMemberToJS ($i) { $js = ""; if ($this->getGeometryTypeFromMember($i) == $this->geomtype_point) { $js .= "var current_geomtype = geomTypePoint;\n"; } elseif ($this->getGeometryTypeFromMember($i) == $this->geomtype_line || $this->getGeometryTypeFromMember($i) == $this->geomtype_multiline) { $js .= "var current_geomtype = geomTypeLine;\n"; } elseif ($this->getGeometryTypeFromMember($i) == $this->geomtype_polygon || $this->getGeometryTypeFromMember($i) == $this->geomtype_multipolygon) { $js .= "var current_geomtype = geomTypePolygon;\n"; } else die("unknown geometry type: '".$this->getGeometryTypeFromMember($i)."'"); $js .= "var q = new 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