$props = $svc->UpdateFeatures($id, $cmdColl, false); $endTime = microtime(true); $diffTime = $endTime - $startTime; $reader = $props->GetItem(0)->GetValue(); while ($reader->ReadNext() == true) { $key = $reader->GetInt32("KEY"); } $reader->Close(); // Now select a few of the feature and make sure we get everything back correctly. $query = new MgFeatureQueryOptions(); $query->AddFeatureProperty("NAME"); $query->AddFeatureProperty("KEY"); $query->AddFeatureProperty("GEOM"); $query->SetFilter(""); $reader = $svc->SelectFeatures($id, "Buffer", $query); while ($reader->ReadNext() == true) { $geomText = ''; $agfStream = $reader->GetGeometry("GEOM"); $geom = $agf->Read($agfStream); $geomText = $wkt->Write($geom); echo $reader->GetInt32("KEY") . " " . $reader->GetString("NAME") . " " . $geomText . "\n"; } echo "Time for " . $i . " ops was " . $diffTime . " seconds\n"; echo "Average throughput of " . $i / $diffTime . " features per second\n"; } catch (MgException $exc) { echo "First failure on insert... caught...\n"; echo $exc->GetExceptionMessage() . "\n"; echo $exc->GetDetails() . "\n"; echo $exc->GetStackTrace() . "\n"; } echo "Done.\n";
private function OutputXml($schemas) { $read = 0; $agfRw = new MgAgfReaderWriter(); $wktRw = new MgWktReaderWriter(); $this->writer->SetHeader("Content-Type", MgMimeType::Xml); $this->writer->StartChunking(); $output = "<?xml version=\"1.0\" encoding=\"utf-8\"?><FeatureSet>"; if (!$this->IsEmpty($schemas)) { $classXml = $this->featSvc->SchemaToXml($schemas); $classXml = substr($classXml, strpos($classXml, "<xs:schema")); $output .= $classXml; } $hasMoreFeatures = $this->reader->ReadNext(); $writeXmlFooter = false; if ($hasMoreFeatures) { $output .= "<Features>"; $this->writer->WriteChunk($output); $output = ""; $writeXmlFooter = true; } $propCount = $this->reader->GetPropertyCount(); while ($hasMoreFeatures) { $read++; if ($this->limit > 0 && $read > $this->limit) { break; } $output = "<Feature>"; for ($i = 0; $i < $propCount; $i++) { $name = $this->reader->GetPropertyName($i); $propType = $this->reader->GetPropertyType($i); $output .= "<Property><Name>{$name}</Name>"; if (!$this->reader->IsNull($i)) { $output .= "<Value>"; switch ($propType) { case MgPropertyType::Boolean: //NOTE: It appears PHP booleans are not string-able $output .= $this->reader->GetBoolean($i) ? "true" : "false"; break; case MgPropertyType::Byte: $output .= $this->reader->GetByte($i); break; case MgPropertyType::DateTime: $dt = $this->reader->GetDateTime($i); $output .= $dt->ToString(); break; case MgPropertyType::Decimal: case MgPropertyType::Double: $output .= $this->reader->GetDouble($i); break; case MgPropertyType::Geometry: try { $agf = $this->reader->GetGeometry($i); $geom = $this->transform != null ? $agfRw->Read($agf, $this->transform) : $agfRw->Read($agf); $output .= $wktRw->Write($geom); } catch (MgException $ex) { } break; case MgPropertyType::Int16: $output .= $this->reader->GetInt16($i); break; case MgPropertyType::Int32: $output .= $this->reader->GetInt32($i); break; case MgPropertyType::Int64: $output .= $this->reader->GetInt64($i); break; case MgPropertyType::Single: $output .= $this->reader->GetSingle($i); break; case MgPropertyType::String: $output .= MgUtils::EscapeXmlChars($this->reader->GetString($i)); break; } $output .= "</Value>"; } $output .= "</Property>"; } $output .= "</Feature>"; $this->writer->WriteChunk($output); $output = ""; $hasMoreFeatures = $this->reader->ReadNext(); } if ($writeXmlFooter) { $output .= "</Features>"; } $output .= "</FeatureSet>"; $this->writer->WriteChunk($output); $this->writer->EndChunking(); $this->reader->Close(); }
protected function OutputMgPropertyCollection($props, $mimeType = MgMimeType::Xml) { $content = "<?xml version=\"1.0\" encoding=\"utf-8\"?><PropertyCollection />"; $count = $props->GetCount(); $agfRw = null; $wktRw = null; $this->app->response->header("Content-Type", $mimeType); if ($count > 0) { $content = "<PropertyCollection>"; for ($i = 0; $i < $count; $i++) { $prop = $props->GetItem($i); $name = $prop->GetName(); $type = null; $propType = $prop->GetPropertyType(); switch ($propType) { case MgPropertyType::Boolean: $type = "boolean"; break; case MgPropertyType::Byte: $type = "byte"; break; case MgPropertyType::DateTime: $type = "datetime"; break; case MgPropertyType::Decimal: case MgPropertyType::Double: $type = "double"; break; case MgPropertyType::Geometry: $type = "geometry"; break; case MgPropertyType::Int16: $type = "int16"; break; case MgPropertyType::Int32: $type = "int32"; break; case MgPropertyType::Int64: $type = "int64"; break; case MgPropertyType::Single: $type = "single"; break; case MgPropertyType::String: $type = "string"; break; } if ($prop->IsNull()) { $content .= "<Property><Name>{$name}</Name><Type>{$type}</Type></Property>"; } else { $value = ""; if ($propType === MgPropertyType::DateTime) { $dt = $prop->GetValue(); $value = $dt->ToString(); } else { if ($propType === MgPropertyType::Geometry) { if ($wktRw == null) { $wktRw = new MgWktReaderWriter(); } if ($agfRw == null) { $agfRw = new MgAgfReaderWriter(); } try { $agf = $prop->GetValue(); $geom = $agfRw->Read($agf); if ($geom != null) { $value = $wktRw->Write($geom); } } catch (MgException $ex) { $value = ""; } } else { $value = $prop->GetValue(); } } $content .= "<Property><Name>{$name}</Name><Type>{$type}</Type><Value>{$value}</Value></Property>"; } } $content .= "</PropertyCollection>"; } if ($mimeType === MgMimeType::Json) { $content = MgUtils::Xml2Json($content); } $this->app->response->header("Content-Type", $mimeType); $this->app->response->setBody($content); }
} // create a SRS transformer if necessary. if ($layerSrsWkt != $srsDefMap) { if ($verMajor == '1') { $srsXform = new MgCoordinateSystemTransform($layerCs, $srsMap); } else { $srsXform = $srsFactory->GetTransform($layerCs, $srsMap); } } else { $srsXform = null; } while ($featureReader->ReadNext()) { $oGeomAgf = $featureReader->GetGeometry($geomPropName); $oGeom = $agfRW->Read($oGeomAgf); $wktReaderWriter = new MgWktReaderWriter(); $agfTextPoint = $wktReaderWriter->Write($oGeom); //echo "<!-- wkt: ".$agfTextPoint." -->\n"; if (!$merge) { /* use measure to accomodate differences in SRS */ $oNewGeom = $oGeom->Buffer($dist, $measure); $geomProp = new MgGeometryProperty("GEOM", $agfRW->Write($oNewGeom)); $oPropertyColl = new MgPropertyCollection(); $oPropertyColl->Add($geomProp); $oCommandsColl->Add(new MgInsertFeatures($schemaName . ':' . $layerName, $oPropertyColl)); } else { if ($srsXform == null) { $oNewGeom = $oGeom; } else { $oNewGeom = $oGeom->Transform($srsXform); } $inputGeometries->Add($oNewGeom);