gmt 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/gmt/gmt.c +182 -33
- data/lib/gmt.rb +107 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d165e67cb791e80aecdbed1b817c6ba15c1f82ef
|
4
|
+
data.tar.gz: 4ffda40ca008f338c9016e84326a2eb8f7242dfd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69d55be3f508a2bb345622d90d7cda10363bd1ceb259a5f0f910c0daf96f91663cf17c9c2c693ddc17ac3ade4ea6e669b41b95a33a183ca0b8b6cfe6fbad3b35
|
7
|
+
data.tar.gz: 311b0e6840f3d366ef17ea756ae581be1c8d3aa20978eb1bbb997802ecc154674631dcdac614bf9a1cba0c4a866a159c258447fd8d0579852b3e61097f0a9697
|
data/ext/gmt/gmt.c
CHANGED
@@ -8,6 +8,8 @@ typedef struct
|
|
8
8
|
void *session;
|
9
9
|
} gmt_t;
|
10
10
|
|
11
|
+
/* helpers */
|
12
|
+
|
11
13
|
static void raise_unless_class_data(gmt_t *gmt)
|
12
14
|
{
|
13
15
|
if (gmt == NULL)
|
@@ -20,6 +22,62 @@ static void raise_if_error(int err, const char *module)
|
|
20
22
|
rb_raise(rb_eRuntimeError, "failed call to GMT module %s", module);
|
21
23
|
}
|
22
24
|
|
25
|
+
/* ruby object interface */
|
26
|
+
|
27
|
+
static void gmt_free(void *p)
|
28
|
+
{
|
29
|
+
gmt_t *gmt = p;
|
30
|
+
|
31
|
+
if (gmt->session)
|
32
|
+
{
|
33
|
+
GMT_Destroy_Session(gmt->session);
|
34
|
+
gmt->session = NULL;
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
static VALUE gmt_alloc(VALUE klass)
|
39
|
+
{
|
40
|
+
gmt_t *gmt;
|
41
|
+
|
42
|
+
VALUE obj = Data_Make_Struct(klass, gmt_t, NULL, gmt_free, gmt);
|
43
|
+
|
44
|
+
gmt->session = NULL;
|
45
|
+
|
46
|
+
return obj;
|
47
|
+
}
|
48
|
+
|
49
|
+
static VALUE gmt_init(VALUE self)
|
50
|
+
{
|
51
|
+
gmt_t *gmt;
|
52
|
+
|
53
|
+
Data_Get_Struct(self, gmt_t, gmt);
|
54
|
+
|
55
|
+
gmt->session =
|
56
|
+
GMT_Create_Session("Session name", 2, 0, NULL);
|
57
|
+
|
58
|
+
if (gmt->session == NULL)
|
59
|
+
rb_raise(rb_eNoMemError, "failed to create GMT session");
|
60
|
+
|
61
|
+
return self;
|
62
|
+
}
|
63
|
+
|
64
|
+
static VALUE gmt_release(VALUE self)
|
65
|
+
{
|
66
|
+
gmt_t *gmt;
|
67
|
+
|
68
|
+
Data_Get_Struct(self, gmt_t, gmt);
|
69
|
+
|
70
|
+
if (gmt->session)
|
71
|
+
{
|
72
|
+
GMT_Destroy_Session(gmt->session);
|
73
|
+
gmt->session = NULL;
|
74
|
+
}
|
75
|
+
|
76
|
+
return self;
|
77
|
+
}
|
78
|
+
|
79
|
+
/* hander for GMT functions */
|
80
|
+
|
23
81
|
static VALUE gmt_simple(const char *name, int argc, VALUE *argv, VALUE self)
|
24
82
|
{
|
25
83
|
VALUE files, opts;
|
@@ -44,71 +102,135 @@ static VALUE gmt_simple(const char *name, int argc, VALUE *argv, VALUE self)
|
|
44
102
|
return Qtrue;
|
45
103
|
}
|
46
104
|
|
105
|
+
/* The GMT functions */
|
106
|
+
|
107
|
+
/* Mathematical Operations on Tables or Grids */
|
108
|
+
|
109
|
+
static VALUE gmt_gmtmath(int argc, VALUE *argv, VALUE self)
|
110
|
+
{
|
111
|
+
return gmt_simple("gmtmath", argc, argv, self);
|
112
|
+
}
|
113
|
+
|
47
114
|
static VALUE gmt_makecpt(int argc, VALUE *argv, VALUE self)
|
48
115
|
{
|
49
116
|
return gmt_simple("makecpt", argc, argv, self);
|
50
117
|
}
|
51
118
|
|
52
|
-
static VALUE
|
119
|
+
static VALUE gmt_spectrum1d(int argc, VALUE *argv, VALUE self)
|
53
120
|
{
|
54
|
-
return gmt_simple("
|
121
|
+
return gmt_simple("spectrum1d", argc, argv, self);
|
55
122
|
}
|
56
123
|
|
57
|
-
static VALUE
|
124
|
+
static VALUE gmt_sph2grd(int argc, VALUE *argv, VALUE self)
|
58
125
|
{
|
59
|
-
return gmt_simple("
|
126
|
+
return gmt_simple("sph2grd", argc, argv, self);
|
60
127
|
}
|
61
128
|
|
62
|
-
static
|
129
|
+
static VALUE gmt_sphdistance(int argc, VALUE *argv, VALUE self)
|
63
130
|
{
|
64
|
-
|
131
|
+
return gmt_simple("sphdistance", argc, argv, self);
|
132
|
+
}
|
65
133
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
gmt->session = NULL;
|
70
|
-
}
|
134
|
+
static VALUE gmt_sphtriangulate(int argc, VALUE *argv, VALUE self)
|
135
|
+
{
|
136
|
+
return gmt_simple("sphtriangulate", argc, argv, self);
|
71
137
|
}
|
72
138
|
|
73
|
-
|
139
|
+
/* Plotting of 1-D and 2-D Data */
|
140
|
+
|
141
|
+
static VALUE gmt_gmtlogo(int argc, VALUE *argv, VALUE self)
|
74
142
|
{
|
75
|
-
|
143
|
+
return gmt_simple("gmtlogo", argc, argv, self);
|
144
|
+
}
|
76
145
|
|
77
|
-
|
146
|
+
static VALUE gmt_grdcontour(int argc, VALUE *argv, VALUE self)
|
147
|
+
{
|
148
|
+
return gmt_simple("grdcontour", argc, argv, self);
|
149
|
+
}
|
78
150
|
|
79
|
-
|
151
|
+
static VALUE gmt_grdimage(int argc, VALUE *argv, VALUE self)
|
152
|
+
{
|
153
|
+
return gmt_simple("grdimage", argc, argv, self);
|
154
|
+
}
|
80
155
|
|
81
|
-
|
156
|
+
static VALUE gmt_grdvector(int argc, VALUE *argv, VALUE self)
|
157
|
+
{
|
158
|
+
return gmt_simple("grdvector", argc, argv, self);
|
82
159
|
}
|
83
160
|
|
84
|
-
static VALUE
|
161
|
+
static VALUE gmt_grdview(int argc, VALUE *argv, VALUE self)
|
85
162
|
{
|
86
|
-
|
163
|
+
return gmt_simple("grdview", argc, argv, self);
|
164
|
+
}
|
87
165
|
|
88
|
-
|
166
|
+
static VALUE gmt_psbasemap(int argc, VALUE *argv, VALUE self)
|
167
|
+
{
|
168
|
+
return gmt_simple("psbasemap", argc, argv, self);
|
169
|
+
}
|
89
170
|
|
90
|
-
|
91
|
-
|
171
|
+
static VALUE gmt_psclip(int argc, VALUE *argv, VALUE self)
|
172
|
+
{
|
173
|
+
return gmt_simple("psclip", argc, argv, self);
|
174
|
+
}
|
92
175
|
|
93
|
-
|
94
|
-
|
176
|
+
static VALUE gmt_pscoast(int argc, VALUE *argv, VALUE self)
|
177
|
+
{
|
178
|
+
return gmt_simple("pscoast", argc, argv, self);
|
179
|
+
}
|
95
180
|
|
96
|
-
|
181
|
+
static VALUE gmt_pscontour(int argc, VALUE *argv, VALUE self)
|
182
|
+
{
|
183
|
+
return gmt_simple("pscontour", argc, argv, self);
|
97
184
|
}
|
98
185
|
|
99
|
-
static VALUE
|
186
|
+
static VALUE gmt_pshistogram(int argc, VALUE *argv, VALUE self)
|
100
187
|
{
|
101
|
-
|
188
|
+
return gmt_simple("pshistogram", argc, argv, self);
|
189
|
+
}
|
102
190
|
|
103
|
-
|
191
|
+
static VALUE gmt_psimage(int argc, VALUE *argv, VALUE self)
|
192
|
+
{
|
193
|
+
return gmt_simple("psimage", argc, argv, self);
|
194
|
+
}
|
104
195
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
}
|
196
|
+
static VALUE gmt_pslegend(int argc, VALUE *argv, VALUE self)
|
197
|
+
{
|
198
|
+
return gmt_simple("pslegend", argc, argv, self);
|
199
|
+
}
|
110
200
|
|
111
|
-
|
201
|
+
static VALUE gmt_psmask(int argc, VALUE *argv, VALUE self)
|
202
|
+
{
|
203
|
+
return gmt_simple("psmask", argc, argv, self);
|
204
|
+
}
|
205
|
+
|
206
|
+
static VALUE gmt_psrose(int argc, VALUE *argv, VALUE self)
|
207
|
+
{
|
208
|
+
return gmt_simple("psrose", argc, argv, self);
|
209
|
+
}
|
210
|
+
|
211
|
+
static VALUE gmt_psscale(int argc, VALUE *argv, VALUE self)
|
212
|
+
{
|
213
|
+
return gmt_simple("psscale", argc, argv, self);
|
214
|
+
}
|
215
|
+
|
216
|
+
static VALUE gmt_pstext(int argc, VALUE *argv, VALUE self)
|
217
|
+
{
|
218
|
+
return gmt_simple("pstext", argc, argv, self);
|
219
|
+
}
|
220
|
+
|
221
|
+
static VALUE gmt_pswiggle(int argc, VALUE *argv, VALUE self)
|
222
|
+
{
|
223
|
+
return gmt_simple("pswiggle", argc, argv, self);
|
224
|
+
}
|
225
|
+
|
226
|
+
static VALUE gmt_psxy(int argc, VALUE *argv, VALUE self)
|
227
|
+
{
|
228
|
+
return gmt_simple("psxy", argc, argv, self);
|
229
|
+
}
|
230
|
+
|
231
|
+
static VALUE gmt_psxyz(int argc, VALUE *argv, VALUE self)
|
232
|
+
{
|
233
|
+
return gmt_simple("psxyz", argc, argv, self);
|
112
234
|
}
|
113
235
|
|
114
236
|
void Init_gmt(void)
|
@@ -119,7 +241,34 @@ void Init_gmt(void)
|
|
119
241
|
rb_define_method(cGMT, "initialize", gmt_init, 0);
|
120
242
|
rb_define_method(cGMT, "free", gmt_release, 0);
|
121
243
|
|
244
|
+
/* Mathematical Operations on Tables or Grids */
|
245
|
+
|
246
|
+
rb_define_private_method(cGMT, "gmtmath_c", gmt_gmtmath, -1);
|
122
247
|
rb_define_private_method(cGMT, "makecpt_c", gmt_makecpt, -1);
|
248
|
+
rb_define_private_method(cGMT, "spectrum1d_c", gmt_spectrum1d, -1);
|
249
|
+
rb_define_private_method(cGMT, "sph2grd_c", gmt_sph2grd, -1);
|
250
|
+
rb_define_private_method(cGMT, "sphdistance_c", gmt_sphdistance, -1);
|
251
|
+
rb_define_private_method(cGMT, "sphtriangulate_c", gmt_sphtriangulate, -1);
|
252
|
+
|
253
|
+
/* Plotting of 1-D and 2-D Data */
|
254
|
+
|
255
|
+
rb_define_private_method(cGMT, "gmtlogo_c", gmt_gmtlogo, -1);
|
256
|
+
rb_define_private_method(cGMT, "grdcontour_c", gmt_grdcontour, -1);
|
257
|
+
rb_define_private_method(cGMT, "grdimage_c", gmt_grdimage, -1);
|
258
|
+
rb_define_private_method(cGMT, "grdvector_c", gmt_grdvector, -1);
|
259
|
+
rb_define_private_method(cGMT, "grdview_c", gmt_grdview, -1);
|
260
|
+
rb_define_private_method(cGMT, "psbasemap_c", gmt_psbasemap, -1);
|
261
|
+
rb_define_private_method(cGMT, "psclip_c", gmt_psclip, -1);
|
262
|
+
rb_define_private_method(cGMT, "pscoast_c", gmt_pscoast, -1);
|
263
|
+
rb_define_private_method(cGMT, "pscontour_c", gmt_pscontour, -1);
|
264
|
+
rb_define_private_method(cGMT, "pshistogram_c", gmt_pshistogram, -1);
|
265
|
+
rb_define_private_method(cGMT, "psimage_c", gmt_psimage, -1);
|
266
|
+
rb_define_private_method(cGMT, "pslegend_c", gmt_pslegend, -1);
|
267
|
+
rb_define_private_method(cGMT, "psmask_c", gmt_psmask, -1);
|
268
|
+
rb_define_private_method(cGMT, "psrose_c", gmt_psrose, -1);
|
269
|
+
rb_define_private_method(cGMT, "psscale_c", gmt_psscale, -1);
|
123
270
|
rb_define_private_method(cGMT, "pstext_c", gmt_pstext, -1);
|
271
|
+
rb_define_private_method(cGMT, "pswiggle_c", gmt_pswiggle, -1);
|
124
272
|
rb_define_private_method(cGMT, "psxy_c", gmt_psxy, -1);
|
273
|
+
rb_define_private_method(cGMT, "psxyz_c", gmt_psxyz, -1);
|
125
274
|
}
|
data/lib/gmt.rb
CHANGED
@@ -1,6 +1,36 @@
|
|
1
|
-
#
|
1
|
+
# This class provides a native extension accessing the programs of
|
2
|
+
# the {http://gmt.soest.hawaii.edu/home Generic Mapping Tools};
|
3
|
+
# an open source collection of about 80 command-line tools for
|
4
|
+
# manipulating geographic and Cartesian data sets (including filtering,
|
5
|
+
# trend fitting, gridding, projecting, etc.) and producing PostScript
|
6
|
+
# illustrations ranging from simple x–y plots via contour maps to
|
7
|
+
# artificially illuminated surfaces and 3D perspective views
|
2
8
|
#
|
3
|
-
#
|
9
|
+
# An example of usage:
|
10
|
+
#
|
11
|
+
# require 'gmt'
|
12
|
+
#
|
13
|
+
# common = {
|
14
|
+
# file: 'output.ps',
|
15
|
+
# R: '0/3/0/2',
|
16
|
+
# J: 'x1i'
|
17
|
+
# }
|
18
|
+
# gmt = GMT.new
|
19
|
+
# gmt.psxy('dots.xy',
|
20
|
+
# common.merge(
|
21
|
+
# position: :first,
|
22
|
+
# S: 'c0.50c',
|
23
|
+
# G: 'blue'))
|
24
|
+
# gmt.psxy('dots.xy',
|
25
|
+
# common.merge(
|
26
|
+
# position: :last,
|
27
|
+
# S: 'c0.25c',
|
28
|
+
# G: 'red'))
|
29
|
+
#
|
30
|
+
# Those familiar with GMT will recognise the +-R+ (range) and +-J+ (projection)
|
31
|
+
# options which are now keys for the program options hash.
|
32
|
+
#
|
33
|
+
# More details to follow ...
|
4
34
|
|
5
35
|
class GMT
|
6
36
|
|
@@ -38,6 +68,7 @@ class GMT
|
|
38
68
|
# @param [Array<String>] files The input files
|
39
69
|
# @param [Hash] options The GMT command-line options in hash form
|
40
70
|
# @return [Boolean] +true+ on success
|
71
|
+
# @see http://gmt.soest.hawaii.edu/doc/latest/$1.html
|
41
72
|
def wrapper_ps(method)
|
42
73
|
define_method(method) do |*files, options|
|
43
74
|
self.send(GMT.send(:method_c, method),
|
@@ -51,6 +82,7 @@ class GMT
|
|
51
82
|
# @param [Array<String>] files The input files
|
52
83
|
# @param [Hash] options The GMT command-line options in hash form
|
53
84
|
# @return [Boolean] +true+ on success
|
85
|
+
# @see http://gmt.soest.hawaii.edu/doc/latest/$1.html
|
54
86
|
def wrapper_other(method)
|
55
87
|
define_method(method) do |*args|
|
56
88
|
self.send(GMT.send(:method_c, method), *args)
|
@@ -61,14 +93,85 @@ class GMT
|
|
61
93
|
|
62
94
|
public
|
63
95
|
|
96
|
+
### Mathematical Operations on Tables or Grids
|
97
|
+
|
98
|
+
# Mathematical operations on table data
|
99
|
+
wrapper_other :gmtmath
|
100
|
+
|
101
|
+
# Make color palette tables
|
102
|
+
wrapper_other :makecpt
|
103
|
+
|
104
|
+
# Compute various spectral estimates from time-series
|
105
|
+
wrapper_other :spectrum1d
|
106
|
+
|
107
|
+
# Compute grid from spherical harmonic coefficients
|
108
|
+
wrapper_other :sph2grd
|
109
|
+
|
110
|
+
# Make grid of distances to nearest points on a sphere
|
111
|
+
wrapper_other :sphdistance
|
112
|
+
|
113
|
+
# Delaunay or Voronoi construction of spherical lon,lat data
|
114
|
+
wrapper_other :sphtriangulate
|
115
|
+
|
116
|
+
|
117
|
+
### Plotting of 1-D and 2-D Data
|
118
|
+
|
119
|
+
# Plot the GMT logo on maps
|
120
|
+
wrapper_ps :gmtlogo
|
121
|
+
|
122
|
+
# Contouring of 2-D gridded data sets
|
123
|
+
wrapper_ps :grdcontour
|
124
|
+
|
125
|
+
# Produce images from 2-D gridded data sets
|
126
|
+
wrapper_ps :grdimage
|
127
|
+
|
128
|
+
# Plotting of 2-D gridded vector fields
|
129
|
+
wrapper_ps :grdvector
|
130
|
+
|
131
|
+
# 3-D perspective imaging of 2-D gridded data sets
|
132
|
+
wrapper_ps :grdview
|
133
|
+
|
134
|
+
# Create a basemap plot
|
135
|
+
wrapper_ps :psbasemap
|
136
|
+
|
137
|
+
# Use polygon files to define clipping paths
|
138
|
+
wrapper_ps :psclip
|
139
|
+
|
140
|
+
# Plot (and fill) coastlines, borders, and rivers on maps
|
141
|
+
wrapper_ps :pscoast
|
142
|
+
|
143
|
+
# Contour or image raw table data by triangulation
|
144
|
+
wrapper_ps :pscontour
|
145
|
+
|
146
|
+
# Plot a histogram
|
147
|
+
wrapper_ps :pshistogram
|
148
|
+
|
149
|
+
# Plot Sun raster files on a map
|
150
|
+
wrapper_ps :psimage
|
151
|
+
|
152
|
+
# Plot a legend on a map
|
153
|
+
wrapper_ps :pslegend
|
154
|
+
|
155
|
+
# Create overlay to mask out regions on maps
|
156
|
+
wrapper_ps :psmask
|
157
|
+
|
158
|
+
# Plot sector or rose diagrams
|
159
|
+
wrapper_ps :psrose
|
160
|
+
|
161
|
+
# Plot gray scale or color scale on maps
|
162
|
+
wrapper_ps :psscale
|
163
|
+
|
64
164
|
# Plot text strings on maps
|
65
165
|
wrapper_ps :pstext
|
66
166
|
|
167
|
+
# Draw table data time-series along track on maps
|
168
|
+
wrapper_ps :pswiggle
|
169
|
+
|
67
170
|
# Plot symbols, polygons, and lines on maps
|
68
171
|
wrapper_ps :psxy
|
69
172
|
|
70
|
-
#
|
71
|
-
|
173
|
+
# Plot symbols, polygons, and lines in 3-D
|
174
|
+
wrapper_ps :psxyz
|
72
175
|
|
73
176
|
end
|
74
177
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gmt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- J.J. Green
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|