[mapcode] 21/32: Beautified mapcode.c for publishing

Stefan Fritsch sf at moszumanska.debian.org
Wed Nov 2 23:27:17 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 7ec49f199a1b016409af601df9d7beaf89825232
Author: Rijn Buve <rijn at buve.nl>
Date:   Sat Aug 30 18:40:27 2014 +0200

    Beautified mapcode.c for publishing
---
 mapcode.c | 141 ++++++++++++++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 109 insertions(+), 32 deletions(-)

diff --git a/mapcode.c b/mapcode.c
index 8847a9c..8116f31 100644
--- a/mapcode.c
+++ b/mapcode.c
@@ -3,19 +3,56 @@
  * For terms of use refer to http://www.mapcode.com/downloads.html
  */
 
+/**
+ * This application uses the Mapcode C library to encode and decode Mapcodes.
+ * It also serves as an example of how to use this library in a C environment.
+ *
+ * It also offers additional options to generate "test sets" of coordinates
+ * and Mapcodes to check other Mapcode implementations against reference data.
+ *
+ * These test sets consist of:
+ *
+ * - a number of "grid distributed" coordinates, which forms a set of coordinates
+ *   and their Mapcodes, wrapped as a grid around the Earth;
+ *
+ * - a number of "random uniformly distributed" coordinates, which forms a set of
+ *   random coordiantes on the surface of Earth; or
+ *
+ * - a set which consists of typical Mapcode "boundaries" and "edge cases", based
+ *   on the internal implementation of the boundaries database of the Mapcode
+ *   implementation.
+ */
+
 #include <stdio.h>
 #include <math.h>
 #include "mapcoder/mapcoder.c"
 
-static const double PI = 3.14159265358979323846;
-static const int RESULTS_MAX = 64;
-static const int SHOW_PROGRESS = 125;
 
-static int largestNrOfResults = 0;
-static double latLargestNrOfResults = 0.0;
-static double lonLargestNrOfResults = 0.0;
-static int totalNrOfResults = 0;
 
+/**
+ * Some global constants to be used.
+ */
+static const double PI              = 3.14159265358979323846;
+static const int    RESULTS_MAX     = 64;
+static const int    SHOW_PROGRESS   = 125;
+
+
+
+/**
+ * These statistics are stored globally so they can be updated easily by the
+ * generateAndOutputMapcodes() method.
+ */
+static int      largestNrOfResults      = 0;
+static double   latLargestNrOfResults   = 0.0;
+static double   lonLargestNrOfResults   = 0.0;
+static int      totalNrOfResults        = 0;
+
+
+
+/**
+ * The usage() method explains how this application can be used. It is called
+ * whenever a incorrect amount or combination of parameters is entered.
+ */
 static void usage(const char* appName) {
     printf("MAPCODE (C library version %s)\n", mapcode_cversion);
     printf("Copyright (C) 2014 Stichting Mapcode Foundation\n");
@@ -48,20 +85,35 @@ 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");
+    printf("       The (x, y, z) coordinates are primarily meant for visualization of the data set.\n");
+    printf("\n");
+    printf("\n     Notes on the use of stdout and stderr:\n");
+    printf("\n     stdout: used for outputting 3D point data; stderr: used for statistics.");
+    printf("\n     You can redirect stdout to a destination file, while stderr will show progress.\n");
 }
 
+
+
+/**
+ * The method radToDeg() converts radians to degrees.
+ */
 static double radToDeg(double rad){
     return (rad / PI) * 180.0;
 }
 
+
+
+/**
+ * The method degToRad() converts degrees to radians.
+ */
 static double degToRad(double deg){
     return (deg / 180.0) * PI;
 }
 
+
+
 /**
  * Given a single number between 0..1, generate a latitude, longitude (in degrees) and a 3D
  * (x, y, z) point on a sphere with a radius of 1.
@@ -87,6 +139,12 @@ static void unitToLatLonDeg(
     *lonDeg = isnan(lonRad) ? 180.0 : radToDeg(lonRad);
 }
 
+
+
+/**
+ * The method convertLatLonToXYZ() convertes a lat/lon pair to a (x, y, z) coordinate
+ * on a sphere with radius 1.
+ */
 static void convertLatLonToXYZ(double latDeg, double lonDeg, double* x, double* y, double* z) {
     double latRad = degToRad(latDeg);
     double lonRad = degToRad(lonDeg);
@@ -95,7 +153,14 @@ static void convertLatLonToXYZ(double latDeg, double lonDeg, double* x, double*
     *z = sin(latRad);
 }
 
-static int printMapcodes(double lat, double lon, int iShowError) {
+
+
+/**
+ * The method printMapcode() generates and outputs Mapcodes for a lat/lon pair.
+ * If iShowError != 0, then encoding errors are output to stderr, otherwise they
+ * are ignored.
+ */
+static int generateAndOutputMapcodes(double lat, double lon, int iShowError) {
     const char* results[RESULTS_MAX];
     int context = 0;
     const int nrResults = coord2mc(results, lat, lon, context);
@@ -124,6 +189,12 @@ static int printMapcodes(double lat, double lon, int iShowError) {
     return nrResults;
 }
 
+
+
+/**
+ * This is the main() method which is called from the command-line.
+ * Return code 0 means success. Any other values means some sort of error occurred.
+ */
 int main(const int argc, const char** argv)
 {
     // Provide usage message if no arguments specified.
@@ -228,47 +299,50 @@ int main(const int argc, const char** argv)
             lon = (maxLon - minLon ) / 2.0;
 
             // Try center.
-            printMapcodes(lat, lon, 0);
+            generateAndOutputMapcodes(lat, lon, 0);
 
             // Try corners.
-            printMapcodes(minLat, minLon, 0);
-            printMapcodes(minLat, maxLon, 0);
-            printMapcodes(maxLat, minLon, 0);
-            printMapcodes(maxLat, maxLon, 0);
+            generateAndOutputMapcodes(minLat, minLon, 0);
+            generateAndOutputMapcodes(minLat, maxLon, 0);
+            generateAndOutputMapcodes(maxLat, minLon, 0);
+            generateAndOutputMapcodes(maxLat, maxLon, 0);
 
             // Try JUST inside.
             double factor = 1.0;
             for (int j = 1; j < 6; ++j) {
 
                 double d = 1.0 / factor;
-                printMapcodes(minLat + d, minLon + d, 0);
-                printMapcodes(minLat + d, maxLon - d, 0);
-                printMapcodes(maxLat - d, minLon + d, 0);
-                printMapcodes(maxLat - d, maxLon - d, 0);
+                generateAndOutputMapcodes(minLat + d, minLon + d, 0);
+                generateAndOutputMapcodes(minLat + d, maxLon - d, 0);
+                generateAndOutputMapcodes(maxLat - d, minLon + d, 0);
+                generateAndOutputMapcodes(maxLat - d, maxLon - d, 0);
 
                 // Try JUST outside.
-                printMapcodes(minLat - d, minLon - d, 0);
-                printMapcodes(minLat - d, maxLon + d, 0);
-                printMapcodes(maxLat + d, minLon - d, 0);
-                printMapcodes(maxLat + d, maxLon + d, 0);
+                generateAndOutputMapcodes(minLat - d, minLon - d, 0);
+                generateAndOutputMapcodes(minLat - d, maxLon + d, 0);
+                generateAndOutputMapcodes(maxLat + d, minLon - d, 0);
+                generateAndOutputMapcodes(maxLat + d, maxLon + d, 0);
                 factor = factor * 10.0;
             }
 
             // Try 22m outside.
-            printMapcodes(minLat - 22, (maxLon - minLon) / 2, 0);
-            printMapcodes(minLat - 22, (maxLon - minLon) / 2, 0);
-            printMapcodes(maxLat + 22, (maxLon - minLon) / 2, 0);
-            printMapcodes(maxLat + 22, (maxLon - minLon) / 2, 0);
+            generateAndOutputMapcodes(minLat - 22, (maxLon - minLon) / 2, 0);
+            generateAndOutputMapcodes(minLat - 22, (maxLon - minLon) / 2, 0);
+            generateAndOutputMapcodes(maxLat + 22, (maxLon - minLon) / 2, 0);
+            generateAndOutputMapcodes(maxLat + 22, (maxLon - minLon) / 2, 0);
 
             if ((i % SHOW_PROGRESS) == 0) {
-                fprintf(stderr, "Processed %d of %d regions (generated %d Mapcodes)...\r", i, nrPoints, totalNrOfResults);
+                fprintf(stderr, "[%d%%] Processed %d of %d regions (generated %d Mapcodes)...\r",
+                    (int) (((float) i / ((float) nrPoints)) + 0.5),
+                    i, nrPoints, totalNrOfResults);
             }
         }
         fprintf(stderr, "\nStatistics:\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);
+        fprintf(stderr, "Largest number of results for 1 Mapcode = %d at (%f, %f)\n",
+            largestNrOfResults, latLargestNrOfResults, lonLargestNrOfResults);
     }
     else if ((strcmp(cmd, "-g") == 0) || (strcmp(cmd, "--grid") == 0) ||
         (strcmp(cmd, "-r") == 0) || (strcmp(cmd, "--random") == 0)) {
@@ -339,7 +413,7 @@ int main(const int argc, const char** argv)
             }
 
             unitToLatLonDeg(unit1, unit2, &lat, &lon);
-            const int nrResults = printMapcodes(lat, lon, 1);
+            const int nrResults = generateAndOutputMapcodes(lat, lon, 1);
             if (nrResults > largestNrOfResults) {
                 largestNrOfResults = nrResults;
                 latLargestNrOfResults = lat;
@@ -347,14 +421,17 @@ int main(const int argc, const char** argv)
             }
             totalNrOfResults += nrResults;
             if ((i % SHOW_PROGRESS) == 0) {
-                fprintf(stderr, "Created %d of %d 3D %s data points (generated %d Mapcodes)...\r", i, nrPoints, random ? "random" : "grid", totalNrOfResults);
+                fprintf(stderr, "[%d%%] Created %d of %d 3D %s data points (generated %d Mapcodes)...\r",
+                    (int) (((float) i / ((float) nrPoints)) + 0.5),
+                    i, nrPoints, random ? "random" : "grid", totalNrOfResults);
             }
         }
         fprintf(stderr, "\nStatistics:\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);
+        fprintf(stderr, "Largest number of results for 1 Mapcode = %d at (%f, %f)\n",
+            largestNrOfResults, latLargestNrOfResults, lonLargestNrOfResults);
     }
     else {
 

-- 
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