Example #1
0
    $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();
 }
Example #3
0
 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);
 }
Example #4
0
 }
 // 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);