geo_coder 0.1.0

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.
Files changed (119) hide show
  1. data/Gemfile +12 -0
  2. data/Gemfile.lock +32 -0
  3. data/History.txt +6 -0
  4. data/Makefile +13 -0
  5. data/Manifest.txt +18 -0
  6. data/README.rdoc +197 -0
  7. data/Rakefile +53 -0
  8. data/TODO.txt +8 -0
  9. data/VERSION +1 -0
  10. data/bin/build_indexes +8 -0
  11. data/bin/rebuild_cluster +22 -0
  12. data/bin/rebuild_metaphones +23 -0
  13. data/bin/tiger_import +59 -0
  14. data/demos/demo/app/ext/geocodewrap.rb +84 -0
  15. data/demos/demo/app/views/index.builder +13 -0
  16. data/demos/demo/app/views/index.erb +71 -0
  17. data/demos/demo/config.ru +12 -0
  18. data/demos/demo/config/bootstraps.rb +130 -0
  19. data/demos/demo/config/geoenvironment.rb +25 -0
  20. data/demos/demo/geocoder_helper.rb +12 -0
  21. data/demos/demo/geocom_geocode.rb +10 -0
  22. data/demos/demo/main.rb +3 -0
  23. data/demos/demo/rakefile.rb +17 -0
  24. data/demos/demo/tmp/restart.txt +0 -0
  25. data/demos/simpledemo/views/index.builder +13 -0
  26. data/demos/simpledemo/views/index.erb +69 -0
  27. data/demos/simpledemo/ws.rb +83 -0
  28. data/doc/Makefile +7 -0
  29. data/doc/html4css1.css +279 -0
  30. data/doc/lookup.rst +193 -0
  31. data/doc/parsing.rst +125 -0
  32. data/doc/voidspace.css +147 -0
  33. data/geo_coder.gemspec +172 -0
  34. data/lib/geocoder/us.rb +21 -0
  35. data/lib/geocoder/us/address.rb +290 -0
  36. data/lib/geocoder/us/constants.rb +670 -0
  37. data/lib/geocoder/us/database.rb +745 -0
  38. data/lib/geocoder/us/import.rb +181 -0
  39. data/lib/geocoder/us/import/tiger.rb +13 -0
  40. data/lib/geocoder/us/numbers.rb +58 -0
  41. data/navteq/README +4 -0
  42. data/navteq/convert.sql +37 -0
  43. data/navteq/navteq_import +39 -0
  44. data/navteq/prepare.sql +92 -0
  45. data/sql/cluster.sql +16 -0
  46. data/sql/convert.sql +80 -0
  47. data/sql/create.sql +37 -0
  48. data/sql/index.sql +12 -0
  49. data/sql/place.csv +104944 -0
  50. data/sql/place.sql +104948 -0
  51. data/sql/setup.sql +78 -0
  52. data/src/Makefile +13 -0
  53. data/src/README +14 -0
  54. data/src/liblwgeom/Makefile +75 -0
  55. data/src/liblwgeom/box2d.c +54 -0
  56. data/src/liblwgeom/lex.yy.c +4799 -0
  57. data/src/liblwgeom/liblwgeom.h +1405 -0
  58. data/src/liblwgeom/lwalgorithm.c +946 -0
  59. data/src/liblwgeom/lwalgorithm.h +52 -0
  60. data/src/liblwgeom/lwcircstring.c +759 -0
  61. data/src/liblwgeom/lwcollection.c +541 -0
  62. data/src/liblwgeom/lwcompound.c +118 -0
  63. data/src/liblwgeom/lwcurvepoly.c +86 -0
  64. data/src/liblwgeom/lwgeom.c +886 -0
  65. data/src/liblwgeom/lwgeom_api.c +2201 -0
  66. data/src/liblwgeom/lwgparse.c +1219 -0
  67. data/src/liblwgeom/lwgunparse.c +1054 -0
  68. data/src/liblwgeom/lwline.c +525 -0
  69. data/src/liblwgeom/lwmcurve.c +125 -0
  70. data/src/liblwgeom/lwmline.c +137 -0
  71. data/src/liblwgeom/lwmpoint.c +138 -0
  72. data/src/liblwgeom/lwmpoly.c +141 -0
  73. data/src/liblwgeom/lwmsurface.c +129 -0
  74. data/src/liblwgeom/lwpoint.c +439 -0
  75. data/src/liblwgeom/lwpoly.c +579 -0
  76. data/src/liblwgeom/lwsegmentize.c +1047 -0
  77. data/src/liblwgeom/lwutil.c +369 -0
  78. data/src/liblwgeom/measures.c +861 -0
  79. data/src/liblwgeom/postgis_config.h +93 -0
  80. data/src/liblwgeom/ptarray.c +847 -0
  81. data/src/liblwgeom/vsprintf.c +179 -0
  82. data/src/liblwgeom/wktparse.h +126 -0
  83. data/src/liblwgeom/wktparse.lex +74 -0
  84. data/src/liblwgeom/wktparse.tab.c +2353 -0
  85. data/src/liblwgeom/wktparse.tab.h +145 -0
  86. data/src/liblwgeom/wktparse.y +385 -0
  87. data/src/libsqlite3_geocoder/Makefile +22 -0
  88. data/src/libsqlite3_geocoder/Makefile.nix +15 -0
  89. data/src/libsqlite3_geocoder/Makefile.redhat +15 -0
  90. data/src/libsqlite3_geocoder/extension.c +121 -0
  91. data/src/libsqlite3_geocoder/extension.h +13 -0
  92. data/src/libsqlite3_geocoder/levenshtein.c +42 -0
  93. data/src/libsqlite3_geocoder/metaphon.c +278 -0
  94. data/src/libsqlite3_geocoder/util.c +37 -0
  95. data/src/libsqlite3_geocoder/wkb_compress.c +54 -0
  96. data/src/metaphone/Makefile +7 -0
  97. data/src/metaphone/README +49 -0
  98. data/src/metaphone/extension.c +37 -0
  99. data/src/metaphone/metaphon.c +251 -0
  100. data/src/shp2sqlite/Makefile +37 -0
  101. data/src/shp2sqlite/Makefile.nix +36 -0
  102. data/src/shp2sqlite/Makefile.redhat +35 -0
  103. data/src/shp2sqlite/dbfopen.c +1595 -0
  104. data/src/shp2sqlite/getopt.c +695 -0
  105. data/src/shp2sqlite/getopt.h +127 -0
  106. data/src/shp2sqlite/shapefil.h +500 -0
  107. data/src/shp2sqlite/shp2sqlite.c +1974 -0
  108. data/src/shp2sqlite/shpopen.c +1894 -0
  109. data/tests/address.rb +236 -0
  110. data/tests/benchmark.rb +20 -0
  111. data/tests/constants.rb +57 -0
  112. data/tests/data/address-sample.csv +52 -0
  113. data/tests/data/db-test.csv +57 -0
  114. data/tests/data/locations.csv +4 -0
  115. data/tests/database.rb +137 -0
  116. data/tests/generate.rb +34 -0
  117. data/tests/numbers.rb +46 -0
  118. data/tests/run.rb +11 -0
  119. metadata +237 -0
@@ -0,0 +1,145 @@
1
+ /* A Bison parser, made by GNU Bison 2.3. */
2
+
3
+ /* Skeleton interface for Bison's Yacc-like parsers in C
4
+
5
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
6
+ Free Software Foundation, Inc.
7
+
8
+ This program is free software; you can redistribute it and/or modify
9
+ it under the terms of the GNU General Public License as published by
10
+ the Free Software Foundation; either version 2, or (at your option)
11
+ any later version.
12
+
13
+ This program is distributed in the hope that it will be useful,
14
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ GNU General Public License for more details.
17
+
18
+ You should have received a copy of the GNU General Public License
19
+ along with this program; if not, write to the Free Software
20
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
21
+ Boston, MA 02110-1301, USA. */
22
+
23
+ /* As a special exception, you may create a larger work that contains
24
+ part or all of the Bison parser skeleton and distribute that work
25
+ under terms of your choice, so long as that work isn't itself a
26
+ parser generator using the skeleton or a modified version thereof
27
+ as a parser skeleton. Alternatively, if you modify or redistribute
28
+ the parser skeleton itself, you may (at your option) remove this
29
+ special exception, which will cause the skeleton and the resulting
30
+ Bison output files to be licensed under the GNU General Public
31
+ License without this special exception.
32
+
33
+ This special exception was added by the Free Software Foundation in
34
+ version 2.2 of Bison. */
35
+
36
+ /* Tokens. */
37
+ #ifndef YYTOKENTYPE
38
+ # define YYTOKENTYPE
39
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
40
+ know about them. */
41
+ enum yytokentype {
42
+ POINT = 258,
43
+ LINESTRING = 259,
44
+ POLYGON = 260,
45
+ MULTIPOINT = 261,
46
+ MULTILINESTRING = 262,
47
+ MULTIPOLYGON = 263,
48
+ GEOMETRYCOLLECTION = 264,
49
+ CIRCULARSTRING = 265,
50
+ COMPOUNDCURVE = 266,
51
+ CURVEPOLYGON = 267,
52
+ MULTICURVE = 268,
53
+ MULTISURFACE = 269,
54
+ POINTM = 270,
55
+ LINESTRINGM = 271,
56
+ POLYGONM = 272,
57
+ MULTIPOINTM = 273,
58
+ MULTILINESTRINGM = 274,
59
+ MULTIPOLYGONM = 275,
60
+ GEOMETRYCOLLECTIONM = 276,
61
+ CIRCULARSTRINGM = 277,
62
+ COMPOUNDCURVEM = 278,
63
+ CURVEPOLYGONM = 279,
64
+ MULTICURVEM = 280,
65
+ MULTISURFACEM = 281,
66
+ SRID = 282,
67
+ EMPTY = 283,
68
+ VALUE = 284,
69
+ LPAREN = 285,
70
+ RPAREN = 286,
71
+ COMMA = 287,
72
+ EQUALS = 288,
73
+ SEMICOLON = 289,
74
+ WKB = 290
75
+ };
76
+ #endif
77
+ /* Tokens. */
78
+ #define POINT 258
79
+ #define LINESTRING 259
80
+ #define POLYGON 260
81
+ #define MULTIPOINT 261
82
+ #define MULTILINESTRING 262
83
+ #define MULTIPOLYGON 263
84
+ #define GEOMETRYCOLLECTION 264
85
+ #define CIRCULARSTRING 265
86
+ #define COMPOUNDCURVE 266
87
+ #define CURVEPOLYGON 267
88
+ #define MULTICURVE 268
89
+ #define MULTISURFACE 269
90
+ #define POINTM 270
91
+ #define LINESTRINGM 271
92
+ #define POLYGONM 272
93
+ #define MULTIPOINTM 273
94
+ #define MULTILINESTRINGM 274
95
+ #define MULTIPOLYGONM 275
96
+ #define GEOMETRYCOLLECTIONM 276
97
+ #define CIRCULARSTRINGM 277
98
+ #define COMPOUNDCURVEM 278
99
+ #define CURVEPOLYGONM 279
100
+ #define MULTICURVEM 280
101
+ #define MULTISURFACEM 281
102
+ #define SRID 282
103
+ #define EMPTY 283
104
+ #define VALUE 284
105
+ #define LPAREN 285
106
+ #define RPAREN 286
107
+ #define COMMA 287
108
+ #define EQUALS 288
109
+ #define SEMICOLON 289
110
+ #define WKB 290
111
+
112
+
113
+
114
+
115
+ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
116
+ typedef union YYSTYPE
117
+ #line 22 "wktparse.y"
118
+ {
119
+ double value;
120
+ const char* wkb;
121
+ }
122
+ /* Line 1489 of yacc.c. */
123
+ #line 124 "y.tab.h"
124
+ YYSTYPE;
125
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
126
+ # define YYSTYPE_IS_DECLARED 1
127
+ # define YYSTYPE_IS_TRIVIAL 1
128
+ #endif
129
+
130
+ extern YYSTYPE lwg_parse_yylval;
131
+
132
+ #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
133
+ typedef struct YYLTYPE
134
+ {
135
+ int first_line;
136
+ int first_column;
137
+ int last_line;
138
+ int last_column;
139
+ } YYLTYPE;
140
+ # define yyltype YYLTYPE /* obsolescent; will be withdrawn */
141
+ # define YYLTYPE_IS_DECLARED 1
142
+ # define YYLTYPE_IS_TRIVIAL 1
143
+ #endif
144
+
145
+ extern YYLTYPE lwg_parse_yylloc;
@@ -0,0 +1,385 @@
1
+ /*
2
+ * Written by Ralph Mason ralph.mason<at>telogis.com
3
+ *
4
+ * Copyright Telogis 2004
5
+ * www.telogis.com
6
+ *
7
+ */
8
+
9
+ %{
10
+ #include "wktparse.h"
11
+ #include <unistd.h>
12
+ #include <stdio.h>
13
+
14
+ void set_zm(char z, char m);
15
+ int lwg_parse_yylex(void);
16
+ %}
17
+
18
+ %start geometry
19
+
20
+ %locations
21
+
22
+ %union {
23
+ double value;
24
+ const char* wkb;
25
+ }
26
+
27
+ %token POINT LINESTRING POLYGON MULTIPOINT MULTILINESTRING MULTIPOLYGON GEOMETRYCOLLECTION CIRCULARSTRING COMPOUNDCURVE CURVEPOLYGON MULTICURVE MULTISURFACE
28
+ %token POINTM LINESTRINGM POLYGONM MULTIPOINTM MULTILINESTRINGM MULTIPOLYGONM GEOMETRYCOLLECTIONM CIRCULARSTRINGM COMPOUNDCURVEM CURVEPOLYGONM MULTICURVEM MULTISURFACEM
29
+ %token SRID
30
+ %token EMPTY
31
+ %token <value> VALUE
32
+ %token LPAREN RPAREN COMMA EQUALS SEMICOLON
33
+ %token <wkb> WKB
34
+
35
+ %%
36
+
37
+ geometry :
38
+ srid SEMICOLON { alloc_lwgeom(srid); } geometry_int
39
+ |
40
+ { alloc_lwgeom(-1); } geometry_int
41
+
42
+ geometry_int :
43
+ geom_wkb
44
+ |
45
+ geom_point
46
+ |
47
+ geom_linestring
48
+ |
49
+ geom_circularstring
50
+ |
51
+ geom_polygon
52
+ |
53
+ geom_compoundcurve
54
+ |
55
+ geom_curvepolygon
56
+ |
57
+ geom_multipoint
58
+ |
59
+ geom_multilinestring
60
+ |
61
+ geom_multicurve
62
+ |
63
+ geom_multipolygon
64
+ |
65
+ geom_multisurface
66
+ |
67
+ geom_geometrycollection
68
+
69
+ srid :
70
+ SRID EQUALS VALUE { set_srid($3); }
71
+
72
+ geom_wkb :
73
+ WKB { alloc_wkb($1); }
74
+
75
+
76
+ /* POINT */
77
+
78
+ geom_point :
79
+ POINT point
80
+ |
81
+ POINTM { set_zm(0, 1); } point
82
+
83
+ point :
84
+ empty_point
85
+ |
86
+ nonempty_point
87
+
88
+ empty_point :
89
+ { alloc_point(); } empty { pop(); }
90
+
91
+ nonempty_point :
92
+ { alloc_point(); } point_int { pop(); }
93
+
94
+ point_int :
95
+ LPAREN a_point RPAREN
96
+
97
+ /* MULTIPOINT */
98
+
99
+ geom_multipoint :
100
+ MULTIPOINT { alloc_multipoint(); } multipoint { pop(); }
101
+ |
102
+ MULTIPOINTM { set_zm(0, 1); alloc_multipoint(); } multipoint {pop(); }
103
+
104
+ multipoint :
105
+ empty
106
+ |
107
+ { alloc_counter(); } LPAREN multipoint_int RPAREN { pop(); }
108
+
109
+ multipoint_int :
110
+ mpoint_element
111
+ |
112
+ multipoint_int COMMA mpoint_element
113
+
114
+ mpoint_element :
115
+ nonempty_point
116
+ |
117
+ /* this is to allow MULTIPOINT(0 0, 1 1) */
118
+ { alloc_point(); } a_point { pop(); }
119
+
120
+
121
+ /* LINESTRING */
122
+
123
+ geom_linestring :
124
+ LINESTRING linestring
125
+ |
126
+ LINESTRINGM { set_zm(0, 1); } linestring
127
+
128
+ linestring :
129
+ empty_linestring
130
+ |
131
+ nonempty_linestring
132
+
133
+ empty_linestring :
134
+ { alloc_linestring(); } empty { pop(); }
135
+
136
+ nonempty_linestring :
137
+ { alloc_linestring(); } linestring_1 { pop(); }
138
+
139
+ nonempty_linestring_closed :
140
+ { alloc_linestring_closed(); } linestring_1 { pop(); }
141
+
142
+ linestring_1 :
143
+ { alloc_counter(); } LPAREN linestring_int RPAREN { popc(); }
144
+
145
+ linestring_int :
146
+ a_point
147
+ |
148
+ linestring_int COMMA a_point;
149
+
150
+ /* CIRCULARSTRING */
151
+
152
+ geom_circularstring :
153
+ CIRCULARSTRING circularstring
154
+ |
155
+ CIRCULARSTRINGM {set_zm(0, 1); } circularstring
156
+
157
+ geom_circularstring_closed :
158
+ CIRCULARSTRING circularstring_closed
159
+ |
160
+ CIRCULARSTRINGM {set_zm(0, 1); } circularstring_closed
161
+
162
+ circularstring :
163
+ empty_circularstring
164
+ |
165
+ nonempty_circularstring
166
+
167
+ circularstring_closed :
168
+ empty_circularstring
169
+ |
170
+ nonempty_circularstring_closed
171
+
172
+ empty_circularstring :
173
+ { alloc_circularstring(); } empty { pop(); }
174
+
175
+ nonempty_circularstring :
176
+ { alloc_circularstring(); } circularstring_1 { pop(); }
177
+
178
+ nonempty_circularstring_closed :
179
+ { alloc_circularstring_closed(); } circularstring_1 { pop(); }
180
+
181
+ circularstring_1 :
182
+ { alloc_counter(); } LPAREN circularstring_int RPAREN { popc(); }
183
+
184
+ circularstring_int :
185
+ a_point
186
+ |
187
+ circularstring_int COMMA a_point;
188
+
189
+ /* COMPOUNDCURVE */
190
+
191
+ geom_compoundcurve:
192
+ COMPOUNDCURVE { alloc_compoundcurve(); } compoundcurve { pop(); }
193
+ |
194
+ COMPOUNDCURVEM {set_zm(0, 1); alloc_compoundcurve(); } compoundcurve { pop(); }
195
+
196
+ compoundcurve:
197
+ empty
198
+ |
199
+ { alloc_counter(); } LPAREN compoundcurve_int RPAREN { pop(); }
200
+
201
+ compoundcurve_int:
202
+ nonempty_linestring
203
+ |
204
+ geom_circularstring
205
+ |
206
+ compoundcurve_int COMMA nonempty_linestring
207
+ |
208
+ compoundcurve_int COMMA geom_circularstring
209
+
210
+ /* MULTILINESTRING */
211
+
212
+ geom_multilinestring :
213
+ MULTILINESTRING { alloc_multilinestring(); }
214
+ multilinestring { pop(); }
215
+ |
216
+ MULTILINESTRINGM { set_zm(0, 1); alloc_multilinestring(); }
217
+ multilinestring { pop(); }
218
+
219
+ multilinestring :
220
+ empty
221
+ |
222
+ { alloc_counter(); } LPAREN multilinestring_int RPAREN{ pop();}
223
+
224
+ multilinestring_int :
225
+ nonempty_linestring
226
+ |
227
+ multilinestring_int COMMA nonempty_linestring
228
+
229
+ /* MULTICURVESTRING */
230
+
231
+ geom_multicurve :
232
+ MULTICURVE { alloc_multicurve(); }
233
+ multicurve { pop(); }
234
+ |
235
+ MULTICURVEM { set_zm(0, 1); alloc_multicurve(); }
236
+ multicurve { pop(); }
237
+
238
+ multicurve :
239
+ empty
240
+ |
241
+ { alloc_counter(); } LPAREN multicurve_int RPAREN { pop(); }
242
+
243
+ multicurve_int :
244
+ nonempty_linestring
245
+ |
246
+ geom_circularstring
247
+ |
248
+ multicurve_int COMMA nonempty_linestring
249
+ |
250
+ multicurve_int COMMA geom_circularstring
251
+
252
+ /* POLYGON */
253
+
254
+ geom_polygon :
255
+ POLYGON polygon
256
+ |
257
+ POLYGONM { set_zm(0, 1); } polygon
258
+
259
+ polygon :
260
+ empty_polygon
261
+ |
262
+ nonempty_polygon
263
+
264
+ empty_polygon :
265
+ { alloc_polygon(); } empty { pop(); }
266
+
267
+ nonempty_polygon :
268
+ { alloc_polygon(); } polygon_1 { pop(); }
269
+
270
+ polygon_1 :
271
+ { alloc_counter(); } LPAREN polygon_int RPAREN { pop();}
272
+
273
+ polygon_int :
274
+ linestring_1
275
+ |
276
+ polygon_int COMMA linestring_1
277
+
278
+ /* CURVEPOLYGON */
279
+
280
+ geom_curvepolygon :
281
+ CURVEPOLYGON { alloc_curvepolygon(); } curvepolygon { pop(); }
282
+ |
283
+ CURVEPOLYGONM { set_zm(0, 1); alloc_curvepolygon(); }
284
+ curvepolygon { pop(); }
285
+
286
+ curvepolygon :
287
+ empty
288
+ |
289
+ { alloc_counter(); } LPAREN curvepolygon_int RPAREN { pop(); }
290
+
291
+ curvepolygon_int :
292
+ nonempty_linestring_closed
293
+ |
294
+ geom_circularstring_closed
295
+ |
296
+ curvepolygon_int COMMA nonempty_linestring_closed
297
+ |
298
+ curvepolygon_int COMMA geom_circularstring_closed
299
+
300
+ /* MULTIPOLYGON */
301
+
302
+ geom_multipolygon :
303
+ MULTIPOLYGON { alloc_multipolygon(); } multipolygon { pop(); }
304
+ |
305
+ MULTIPOLYGONM { set_zm(0, 1); alloc_multipolygon(); }
306
+ multipolygon { pop();}
307
+
308
+ multipolygon :
309
+ empty
310
+ |
311
+ { alloc_counter(); } LPAREN multipolygon_int RPAREN { pop(); }
312
+
313
+ multipolygon_int :
314
+ nonempty_polygon
315
+ |
316
+ multipolygon_int COMMA nonempty_polygon
317
+
318
+ /* MULTISURFACE */
319
+
320
+ geom_multisurface :
321
+ MULTISURFACE {alloc_multisurface(); } multisurface { pop(); }
322
+ |
323
+ MULTISURFACEM { set_zm(0, 1); alloc_multisurface(); }
324
+ multisurface { pop(); }
325
+
326
+ multisurface :
327
+ empty
328
+ |
329
+ { alloc_counter(); } LPAREN multisurface_int RPAREN { pop(); }
330
+
331
+ multisurface_int :
332
+ nonempty_polygon
333
+ |
334
+ geom_curvepolygon
335
+ |
336
+ multisurface_int COMMA nonempty_polygon
337
+ |
338
+ multisurface_int COMMA geom_curvepolygon
339
+
340
+ /* GEOMETRYCOLLECTION */
341
+
342
+ geom_geometrycollection :
343
+ GEOMETRYCOLLECTION { alloc_geomertycollection(); }
344
+ geometrycollection { pop(); }
345
+ |
346
+ GEOMETRYCOLLECTIONM { set_zm(0, 1); alloc_geomertycollection(); }
347
+ geometrycollection { pop();}
348
+
349
+ geometrycollection :
350
+ empty
351
+ |
352
+ { alloc_counter(); } LPAREN geometrycollection_int RPAREN { pop(); }
353
+
354
+ geometrycollection_int :
355
+ /* to support GEOMETRYCOLLECTION(EMPTY) for backward compatibility */
356
+ empty
357
+ |
358
+ geometry_int
359
+ |
360
+ geometrycollection_int COMMA geometry_int
361
+
362
+
363
+ a_point :
364
+ point_2d
365
+ |
366
+ point_3d
367
+ |
368
+ point_4d
369
+
370
+ point_2d :
371
+ VALUE VALUE {alloc_point_2d($1,$2); }
372
+
373
+ point_3d :
374
+ VALUE VALUE VALUE {alloc_point_3d($1,$2,$3); }
375
+
376
+ point_4d :
377
+ VALUE VALUE VALUE VALUE {alloc_point_4d($1,$2,$3,$4); }
378
+
379
+ empty :
380
+ EMPTY { alloc_empty(); }
381
+ %%
382
+
383
+
384
+
385
+