From 0034d6b59a7297d960c258b95a23c809ca212f92 Mon Sep 17 00:00:00 2001 From: Torsten Dreyer <torsten@ลง3r.de> Date: Wed, 25 Feb 2015 10:38:22 +0100 Subject: [PATCH] flighthistory service: use GeoJSON instead of own invention Track now comes as a LineString object { "type":"LineString", "coordinates": [ [lon,lat,alt], [lon,lat,alt], ... ] } ref: http://geojson.org/geojson-spec.html#linestring --- src/Network/http/FlightHistoryUriHandler.cxx | 37 +++++++++----------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/src/Network/http/FlightHistoryUriHandler.cxx b/src/Network/http/FlightHistoryUriHandler.cxx index b92b90ba9..d5e336c92 100644 --- a/src/Network/http/FlightHistoryUriHandler.cxx +++ b/src/Network/http/FlightHistoryUriHandler.cxx @@ -32,33 +32,27 @@ using std::stringstream; namespace flightgear { namespace http { -static cJSON * GeodToJson(const SGGeod & geod) { - cJSON * json = cJSON_CreateObject(); - - cJSON_AddItemToObject(json, "latitude", - cJSON_CreateNumber(geod.getLatitudeDeg())); - cJSON_AddItemToObject(json, "longitude", - cJSON_CreateNumber(geod.getLongitudeDeg())); - cJSON_AddItemToObject(json, "altitude", - cJSON_CreateNumber(geod.getElevationFt())); - - return json; -} - static string FlightHistoryToJson(const SGGeodVec & history) { - cJSON * json = cJSON_CreateObject(); + cJSON * lineString = cJSON_CreateObject(); + cJSON_AddItemToObject(lineString, "type", cJSON_CreateString("LineString")); - cJSON * jsonArray = cJSON_CreateArray(); + cJSON * coordinates = cJSON_CreateArray(); + cJSON_AddItemToObject(lineString, "coordinates", coordinates); for (SGGeodVec::const_iterator it = history.begin(); it != history.end(); ++it) { - cJSON_AddItemToArray(jsonArray, GeodToJson(*it)); - } - cJSON_AddItemToObject(json, "flightHistory", jsonArray); + cJSON * coordinate = cJSON_CreateArray(); + cJSON_AddItemToArray(coordinates, coordinate); - char * jsonString = cJSON_PrintUnformatted(json); + cJSON_AddItemToArray(coordinate, cJSON_CreateNumber(it->getLongitudeDeg())); + cJSON_AddItemToArray(coordinate, cJSON_CreateNumber(it->getLatitudeDeg())); + cJSON_AddItemToArray(coordinate, cJSON_CreateNumber(it->getElevationM())); + + } + + char * jsonString = cJSON_PrintUnformatted(lineString); string reply(jsonString); free(jsonString); - cJSON_Delete(json); + cJSON_Delete(lineString); return reply; } @@ -263,8 +257,9 @@ bool FlightHistoryUriHandler::handleRequest(const HTTPRequest & request, history->pathForHistory(minEdgeLengthM)); } else { + response.Header["Content-Type"] = "text/html"; response.StatusCode = 404; - response.Content = "{}"; + response.Content = "<html><head><title>Not found!</title></head><body>404</body></html>"; } return true;