1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
.. _errorhandling:
================================================================================
Error handling
================================================================================
PROJ maintains an internal error state, which is local to a
:c:type:`PJ_CONTEXT` thread context.
See :doc:`quickstart` for more information about how to create and use a thread
context object.
If you receive an abnormal return from a PROJ API function (e.g. a NULL
pointer) you may wish to discover more information about the error.
In this case you can make a call to :c:func:`proj_context_errno`, passing in
your thread context. This will return an integer error code.
If the error code is zero, the last PROJ operation was deemed successful and no
error has been detected.
If the error code is non-zero, an error has been detected. You can pass your
thread context together with this error code to
:c:func:`proj_context_errno_string` to retrieve a string describing the error
condition.
A basic example showing how a C program might catch and report errors follows:
.. code-block:: c
:caption: errorhandling.c
:linenos:
#include <stdio.h>
#include <proj.h>
int main (void) {
PJ_CONTEXT *c;
PJ *p;
int errno;
const char *errstr;
c = proj_context_create();
p = proj_create_crs_to_crs(c, "EPSG:4326", "EPSG:3857", NULL);
if (p == 0) {
/* Something is wrong, let's try to get details ... */
errno = proj_context_errno(c);
if (errno == 0) {
/* This should be impossible. */
fprintf(stderr, "Failed to create transformation, reason unknown.\n");
} else {
errstr = proj_context_errno_string(c, errno);
fprintf(stderr, "Failed to create transformation: %s.\n", errstr);
}
proj_context_destroy(c);
return 1;
}
/* transformation object is valid, do work ... */
proj_destroy(p);
proj_context_destroy(c);
return 0;
}
|