[d89be7]: src / _op_transform.cc  Maximize  Restore  History

Download this file

98 lines (97 with data), 3.7 kB

 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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/* -*- coding: utf-8 -*- */
#define HELPTEXT "\
Calling PROJ.4 library from GNU Octave"
/******************************************************************************/
/******************************************************************************/
#include<octave/oct.h>
#include<string>
#include<cstdio>
#include<cstdlib>
#include"projwrap.h"
/******************************************************************************/
/******************************************************************************/
#define ERRORTEXT 1000
/******************************************************************************/
/******************************************************************************/
DEFUN_DLD(_op_transform,args,,HELPTEXT)
{
//error message
char errorText[ERRORTEXT]="_op_geod2geoc:\n\t";
//output list
octave_value_list outputList;
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//checking input arguments
if(args.length()!=5)
{
//error text
sprintf(&errorText[strlen(errorText)],
"Incorrect number of input arguments\n\t"
"See help _op_transform");
//error message
error(errorText);
}
else
{
//loop index
size_t i=0;
//input coordinates from GNU Octave
ColumnVector xIn=args(0).column_vector_value();
ColumnVector yIn=args(1).column_vector_value();
ColumnVector zIn=args(2).column_vector_value();
//parameters strings
std::string paramsStart=args(3).string_value();
std::string paramsEnd=args(4).string_value();
//number of imput data
size_t nElem=static_cast<size_t>(xIn.rows());
size_t nElemZ=static_cast<size_t>(zIn.rows());
//output coordinates for GNU Octave
ColumnVector xOut(nElem);
ColumnVector yOut(nElem);
ColumnVector zOut(nElemZ);
//pointers to output data
double* x=NULL;
double* y=NULL;
double* z=NULL;
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
//copy input data in working arrays
for(i=0;i<nElem;i++)
{
xOut(i) = xIn(i);
yOut(i) = yIn(i);
if(nElemZ)
{
zOut(i) = zIn(i);
}
}
//pointers to output data
x = const_cast<double*>(xOut.data());
y = const_cast<double*>(yOut.data());
if(nElemZ)
{
z = const_cast<double*>(zOut.data());
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
//transformation
if(proj_transform(x,y,z,nElem,nElemZ,paramsStart.c_str(),
paramsEnd.c_str(),&errorText[strlen(errorText)]))
{
//error message
error(errorText);
//exit
return outputList;
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
//adding results to output list
outputList(0) = xOut;
outputList(1) = yOut;
outputList(2) = zOut;
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//exit
return outputList;
}