/** * 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; }