From: Torsten Dreyer Date: Wed, 25 Feb 2015 09:38:22 +0000 (+0100) Subject: flighthistory service: use GeoJSON instead of own invention X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=0034d6b59a7297d960c258b95a23c809ca212f92;p=flightgear.git 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 --- 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 * coordinate = cJSON_CreateArray(); + cJSON_AddItemToArray(coordinates, coordinate); + + cJSON_AddItemToArray(coordinate, cJSON_CreateNumber(it->getLongitudeDeg())); + cJSON_AddItemToArray(coordinate, cJSON_CreateNumber(it->getLatitudeDeg())); + cJSON_AddItemToArray(coordinate, cJSON_CreateNumber(it->getElevationM())); + } - cJSON_AddItemToObject(json, "flightHistory", jsonArray); - char * jsonString = cJSON_PrintUnformatted(json); + 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 = "Not found!404"; } return true;