コード例 #1
0
 /**
  * Writes the GET response body based on the current record of the given MgReader. The caller must not advance to the next record
  * in the reader while inside this method
  */
 protected function GetResponseBodyRecord($reader)
 {
     $output = "";
     if (!$this->firstFeature) {
         $output .= ",";
     }
     $propVals = array();
     $geomJson = "";
     $propCount = $reader->GetPropertyCount();
     for ($i = 0; $i < $propCount; $i++) {
         $name = $reader->GetPropertyName($i);
         $propType = $reader->GetPropertyType($i);
         if (!$reader->IsNull($i)) {
             switch ($propType) {
                 case MgPropertyType::Boolean:
                     array_push($propVals, '"' . $name . '": ' . $reader->GetBoolean($i));
                     break;
                 case MgPropertyType::Byte:
                     array_push($propVals, '"' . $name . '": ' . $reader->GetByte($i));
                     break;
                 case MgPropertyType::DateTime:
                     $dt = $reader->GetDateTime($i);
                     array_push($propVals, '"' . $name . '": "' . $dt->ToString() . '"');
                     break;
                 case MgPropertyType::Decimal:
                 case MgPropertyType::Double:
                     array_push($propVals, '"' . $name . '": ' . $reader->GetDouble($i));
                     break;
                 case MgPropertyType::Geometry:
                     try {
                         $agf = $reader->GetGeometry($i);
                         $geom = $this->transform != null ? $this->agfRw->Read($agf, $this->transform) : $this->agfRw->Read($agf);
                         $geomJson = MgGeoJsonWriter::ToGeoJson($geom);
                     } catch (MgException $ex) {
                         $geomJson = '"geometry": null';
                     }
                     break;
                 case MgPropertyType::Int16:
                     array_push($propVals, '"' . $name . '": ' . $reader->GetInt16($i));
                     break;
                 case MgPropertyType::Int32:
                     array_push($propVals, '"' . $name . '": ' . $reader->GetInt32($i));
                     break;
                 case MgPropertyType::Int64:
                     array_push($propVals, '"' . $name . '": ' . $reader->GetInt64($i));
                     break;
                 case MgPropertyType::Single:
                     array_push($propVals, '"' . $name . '": ' . $reader->GetSingle($i));
                     break;
                 case MgPropertyType::String:
                     array_push($propVals, '"' . $name . '": "' . MgUtils::EscapeJsonString($reader->GetString($i)) . '"');
                     break;
             }
         } else {
             array_push($propVals, '"' . $name . '": null');
         }
     }
     if ($geomJson !== "") {
         $output .= '{ "type": "Feature", ' . $geomJson . ', "properties": {' . implode(",", $propVals) . "} }\n";
     } else {
         $output .= '{ "type": "Feature", "properties": {' . implode(",", $propVals) . "} }\n";
     }
     $this->app->response->write($output);
     $output = "";
     $this->firstFeature = false;
 }