[cpp] LoadGeodata()

Viewer

copydownloadembedprintName: LoadGeodata()
  1. bool LoadGeodata()
  2. {
  3.         using namespace json11;
  4.         using namespace std;
  5.  
  6.         string err;
  7.  
  8.         /* Load the GeoJSON file as a string initially. We'll parse it soon.. */
  9.         size_t filesize;
  10.         char* text{};
  11.         FILE *handle = FioFOpenFile(_file_to_saveload.name"rb", GEODATA_DIR, &filesize);
  12.         if (handle == nullptr) return false;
  13.  
  14.         text = ReallocT(text, filesize);
  15.         size_t read = fread(text, 1, filesize, handle);
  16.         fclose(handle);
  17.  
  18.         if (read != filesize) return false;
  19.  
  20.         /* Parse the string as a Json object and check its validity. */
  21.         Json loaded = Json::parse(text, err).object_items();
  22.  
  23.         if (!loaded["features"].is_array()) return false; // TODO: Throw a descriptive error to the player if the json is invalid.
  24.  
  25.         /* We only want the contents of "features", so let's drill down. */
  26.         std::vector<Json> geodata = loaded["features"].array_items();
  27.  
  28.         /* First we need to find NORTH_EXTENT and SOUTH_EXTENT, to determine map scaling. */
  29.         RealCoordinates north_extent;
  30.         RealCoordinates south_extent;
  31.  
  32.         for (auto item : geodata) {
  33.                 if (item["name"].string_value() == "NORTH_EXTENT") {
  34.                         std::string print = item["coordinates"].string_value();
  35.                         std::cout << print << "\n";
  36.                 }
  37.         }
  38.  
  39.         return true;
  40. }

Editor

You can edit this paste and save as new:


File Description
  • LoadGeodata()
  • Paste Code
  • 01 Oct-2022
  • 1.19 Kb
You can Share it: