[mapcode] 17/32: Added stats to output

Stefan Fritsch sf at moszumanska.debian.org
Wed Nov 2 23:27:16 UTC 2016


This is an automated email from the git hooks/post-receive script.

sf pushed a commit to annotated tag v1.33
in repository mapcode.

commit d419cac1303b796916bae07622ec2049dc066621
Author: Rijn Buve <rijn at buve.nl>
Date:   Thu Aug 28 20:06:26 2014 +0200

    Added stats to output
---
 mapcode   | Bin 0 -> 713200 bytes
 mapcode.c | 174 +++++++++-----------------------------------------------------
 2 files changed, 25 insertions(+), 149 deletions(-)

diff --git a/mapcode b/mapcode
new file mode 100755
index 0000000..3dd3aee
Binary files /dev/null and b/mapcode differ
diff --git a/mapcode.c b/mapcode.c
index 449cc42..169b670 100644
--- a/mapcode.c
+++ b/mapcode.c
@@ -14,7 +14,7 @@ static void usage(const char* appName) {
     printf("MAPCODE (C library version %s)\n", mapcode_cversion);
     printf("Copyright (C) 2014 Stichting Mapcode Foundation\n");
     printf("\n");
-    printf("Usage: \n");
+    printf("Usage:\n");
     printf("    %s [-d | --decode] <default-territory> <mapcode> [<mapcode> ...]\n", appName);
     printf("\n");
     printf("       Decode a Mapcode to a lat/lon. The default territory code is used if\n");
@@ -40,6 +40,8 @@ static void usage(const char* appName) {
     printf("           lat-deg, lon-deg  : [-90..90], [-180..180]\n");
     printf("           x, y, z           : [-1..1]\n");
     printf("\n");
+    printf("\n     stdout: used for outputting 3D point data; stderr: used for statistics.");
+    printf("\n");
     printf("       The lat/lon pairs will be distributed over the 3D surface of the Earth\n");
     printf("       and the (x, y, z) coordinates are placed on a sphere with radius 1.\n");
 }
@@ -146,6 +148,11 @@ int main(const int argc, const char** argv)
             return -1;
         }
         const int nrPoints = atoi(argv[2]);
+        if (nrPoints < 1) {
+            fprintf(stderr, "error: total number of points to generate must be >= 1\n\n");
+            usage(appName);
+            return -1;
+        }
         int random = (strcmp(cmd, "-r") == 0) || (strcmp(cmd, "--random") == 0);
         if (random) {
             if (argc == 4) {
@@ -164,6 +171,12 @@ int main(const int argc, const char** argv)
             }
         }
 
+        // Statistics.
+        int largestNrOfResults = 0;
+        double latLargestNrOfResults = 0.0;
+        double lonLargestNrOfResults = 0.0;
+        int totalNrOfResults = 0;
+
         const char* results[RESULTS_MAX];
         int context = 0;
 
@@ -202,12 +215,23 @@ int main(const int argc, const char** argv)
                 fprintf(stderr, "error: cannot encode lat=%f, lon=%f)\n", lat, lon);
                 return -1;
             }
+            if (nrResults > largestNrOfResults) {
+                largestNrOfResults = nrResults;
+                latLargestNrOfResults = lat;
+                lonLargestNrOfResults = lon;
+            }
+            totalNrOfResults += nrResults;
             printf("%d %lf %lf %lf %lf %lf\n", nrResults, lat, lon, x, y, z);
             for (int j = 0; j < nrResults; ++j) {
                 printf("%s %s\n", results[(j * 2) + 1], results[(j * 2)]);
             }
             printf("\n");
         }
+        fprintf(stderr, "Statistics:\n");
+        fprintf(stderr, "Total number of 3D points generated     = %d\n", nrPoints);
+        fprintf(stderr, "Total number of Mapcodes generated      = %d\n", totalNrOfResults);
+        fprintf(stderr, "Average number of Mapcodes per 3D point = %f\n", ((float) totalNrOfResults) / ((float) nrPoints));
+        fprintf(stderr, "Largest number of results for 1 Mapcode = %d at (%f, %f)\n", largestNrOfResults, latLargestNrOfResults, lonLargestNrOfResults);
     }
     else {
 
@@ -219,151 +243,3 @@ int main(const int argc, const char** argv)
     }
     return 0;
 }
-
-/**
- * This program can encode and decode Mapcodes. It can also generate reference Mapcodes,
- * lat/lon pairs and their corresponding (x, y, z) coordinates.
- *
- * If you'd like to visualize the generated points, you can use "Processing" from
- * processing.org with the following Processing (Java) source code:
- *
-
-    ---------------------------------------------------------------------------
-    // Visualize 3D points.
-    //
-    // Copyright (C) 2014, TomTom BV
-    // Rijn Buve, 2014-08-24
-
-    final String DATA_FILE = "/Users/rijn/source/tomtom/mapcode-java/src/test/resources/random_1k.txt";
-
-    final int N = 100000;
-    final int C = 150;
-    final int D = 1;
-    final boolean DRAW_LAT_LON = true;
-    final boolean STAR_SHAPE = true;
-
-    float posX;
-    float posY;
-    float posZ;
-    float rotX = 1.2;
-    float rotY = 0;
-    float rotZ = 0.9;
-
-    float[] lat = new float[N];
-    float[] lon = new float[N];
-
-    float[] px = new float[N];
-    float[] py = new float[N];
-    float[] pz = new float[N];
-
-    int total;
-
-    void setup() {
-      size(650, 550, P3D);
-      posX = width / 2.0;
-      posY = height / 2.0;
-      posZ = 0.0;
-      total = 0;
-      BufferedReader reader = createReader(DATA_FILE);
-      try {
-        while (true) {
-          String line = reader.readLine();
-          if (line == null) {
-            break;
-          }
-
-          // Parse line.
-          String[] items = split(line, " ");
-          int nrItems = Integer.parseInt(items[0]);
-          lat[total] = Float.parseFloat(items[1]) / 90.0;
-          lon[total] = Float.parseFloat(items[2]) / 180.0;
-          px[total] = Float.parseFloat(items[3]);
-          py[total] = Float.parseFloat(items[4]);
-          pz[total] = Float.parseFloat(items[5]);
-
-          // Skip codes.
-          for (int i = 0; i < nrItems; ++i) {
-            reader.readLine();
-          }
-          reader.readLine();
-          ++total;
-        }
-      }
-      catch (IOException e) {
-        e.printStackTrace();
-      }
-      finally {
-        try {
-          reader.close();
-        }
-        catch (IOException e) {
-          // Ignored.
-        }
-      }
-    }
-
-    void draw() {
-      clear();
-      translate(posX, posY, posZ);
-      rotateX(rotX);
-      rotateY(rotY);
-      rotateZ(rotZ);
-
-      // Draw sphere.
-      stroke(255, 0, 0, 50);
-      fill(255, 0, 0, 50);
-      sphere(C * 0.95);
-      stroke(255, 0, 0, 255);
-
-      // Draw poles.
-      line(0, 0, -C - 200, 0, 0, C + 200);
-
-      // Draw sphere dots.
-      stroke(255, 255, 255, 200);
-      for (int i = 0; i < total; ++i) {
-        float x = C * px[i];
-        float y = C * py[i];
-        float z = C * pz[i];
-        if (STAR_SHAPE) {
-          line(x - D, y , z, x + D, y, z);
-          line(x, y - D , z, x, y + D, z);
-        }
-        line(x, y , z - D, x, y, z + D);
-      }
-
-      if (DRAW_LAT_LON) {
-
-        // Draw lat/lon bounds.
-        stroke(0, 255, 255, 200);
-        line(C + 5, -C - 50, C + 5, C + 5, -C - 50, -C - 5);
-        line(C + 5, -C - 50, -C - 5, -C - 5, -C - 50, -C - 5);
-        line(-C - 5, -C - 50, -C - 5, -C - 5, -C - 50, C + 5);
-        line(-C - 5, -C - 50, C + 5, C + 5, -C - 50, C + 5);
-
-        // Draw lat/lon dots.
-        stroke(255, 255, 0, 200);
-        for (int i = 0; i < total; ++i) {
-          float x = C * lon[i];
-          float y = -C - 51;
-          float z = C * lat[i];
-          if (STAR_SHAPE) {
-            line(x - D , y, z, x + D, y, z);
-            line(x , y - D, z, x, y + D, z);
-          }
-          line(x , y, z - D, x, y, z + D);
-        }
-      }
-
-      if (mousePressed) {
-        rotX += 0.01;
-        rotY -= 0.0016;
-        rotZ += 0.0043;
-      }
-    }
-    ---------------------------------------------------------------------------
- *
- * Have fun!
- *
- * Rijn Buve, August 2014.
- */
-

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/mapcode.git



More information about the Pkg-grass-devel mailing list