int main(int argc, char **argv) { etree_t *ep; etree_addr_t addr, res_addr; value_t res_val; char buf[ETREE_MAXBUF]; /* $end query */ if (argc != 2) { fprintf(stderr, "usage: %s etree\n", argv[0]); exit(0); } /* $begin query */ /* Open the etree for reading */ ep = etree_open(argv[1], O_RDONLY, 0, sizeof(value_t), 3); if (ep == NULL) { fprintf(stderr, "Could not open etree file %s\n", argv[1]); exit(1); } /* Query each octant specified on stdin */ printf("Input (x y z t): "); addr.level = ETREE_MAXLEVEL; while (fgets(buf, ETREE_MAXBUF, stdin)) { sscanf(buf, "%u %u %u %u", &addr.x, &addr.y, &addr.z, &addr.t); /* $end query */ /* Ignore comment or blank lines */ if ((buf[0] == '#') || (buf[0] == '\n') || (buf[0] == '\t')) { continue; } /* $begin query */ if (etree_search(ep, addr, &res_addr, &res_val) != 0) { fprintf(stderr, "%s\n", etree_strerror(etree_errno(ep))); printf("Input (x y z t): "); continue; } printf("Output (x y z t): %s = %f %f %f\n\n", etree_straddr(ep, buf, res_addr), res_val.Vx, res_val.Vy, res_val.Vz); printf("Input (x y z t): "); } etree_close(ep); exit(0); }
/** * mesh_query: * * - return 0 if OK, -1 on error * */ int mesh_query(etree_t *ep, double east_m, double north_m, double depth_m, const char *field, void *payload) { double tickSize; etree_addr_t queryAddr; /* new factor of 2 at the end... who knows why but works */ tickSize = 600000.0 / ( 2147483648.0 / 2 ); queryAddr.y = (etree_tick_t)(east_m / tickSize); queryAddr.x = (etree_tick_t)(north_m / tickSize); queryAddr.z = (etree_tick_t)(depth_m / tickSize); queryAddr.level = ETREE_MAXLEVEL; if (etree_search(ep, queryAddr, NULL, field, payload) != 0) { fprintf(stderr, "mesh_query: %s\n",etree_strerror(etree_errno(ep))); return -1; } return 0; }