binding/v8/jsi/geometry/Geometry.cpp
Go to the documentation of this file.
1 /* Copyright (C) 2008 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 /*!
21  \file Geometry.cpp
22 
23  \brief Utility functions to register the Geometry class into Google JavaScript V8 engine.
24  */
25 
26 // TerraLib
27 #include "../../../../common/Globals.h"
28 #include "../../../../geometry/Envelope.h"
29 #include "../../../../geometry/Geometry.h"
30 #include "../../../../geometry/GeometryCollection.h"
31 #include "../../../../geometry/LineString.h"
32 #include "../../../../geometry/MultiLineString.h"
33 #include "../../../../geometry/MultiPoint.h"
34 #include "../../../../geometry/MultiPolygon.h"
35 #include "../../../../geometry/Point.h"
36 #include "../../../../geometry/Polygon.h"
37 #include "../../common/Utils.h"
38 #include "../datatype/DataType.h"
39 #include "Geometry.h"
40 
41 // STL
42 #include <cassert>
43 
44 // Boost
45 #include <boost/cstdint.hpp>
46 
47 ::v8::Handle<::v8::Value> Geometry_GetDimension(const ::v8::Arguments& args)
48 {
49  ::v8::HandleScope hs;
50 
51  if(args.Holder().IsEmpty())
52  return ::v8::ThrowException(::v8::String::New("In order to use getDimension method you must use object notation: \"d = obj.getDimension();\""));
53 
54  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
55 
56  if(g == 0)
57  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getDimension method!"));
58 
60 
61  ::v8::Local<::v8::Integer> jd = ::v8::Integer::New(static_cast<boost::int32_t>(d));
62 
63  return hs.Close(jd);
64 }
65 
66 ::v8::Handle<::v8::Value> Geometry_GetCoordinateDimension(const ::v8::Arguments& args)
67 {
68  ::v8::HandleScope hs;
69 
70  if(args.Holder().IsEmpty())
71  return ::v8::ThrowException(::v8::String::New("In order to use getCoordinateDimension method you must use object notation: \"d = obj.getCoordinateDimension();\""));
72 
73  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
74 
75  if(g == 0)
76  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getCoordinateDimension method!"));
77 
78  int d = g->getCoordinateDimension();
79 
80  ::v8::Local<::v8::Integer> jd = ::v8::Integer::New(d);
81 
82  return hs.Close(jd);
83 }
84 
85 ::v8::Handle<::v8::Value> Geometry_GetGeometryType(const ::v8::Arguments& args)
86 {
87  ::v8::HandleScope hs;
88 
89  if(args.Holder().IsEmpty())
90  return ::v8::ThrowException(::v8::String::New("In order to use getGeometryType method you must use object notation: \"t = obj.getGeometryType();\""));
91 
92  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
93 
94  if(g == 0)
95  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getGeometryType method!"));
96 
97  const std::string& gt = g->getGeometryType();
98 
99  ::v8::Local<::v8::String> jgt = ::v8::String::New(gt.c_str());
100 
101  return hs.Close(jgt);
102 }
103 
104 ::v8::Handle<::v8::Value> Geometry_GetGeomTypeId(const ::v8::Arguments& args)
105 {
106  ::v8::HandleScope hs;
107 
108  if(args.Holder().IsEmpty())
109  return ::v8::ThrowException(::v8::String::New("In order to use getGeomTypeId method you must use object notation: \"tid = obj.getGeomTypeId();\""));
110 
111  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
112 
113  if(g == 0)
114  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getGeomTypeId method!"));
115 
117 
118  ::v8::Local<::v8::Integer> jgt = ::v8::Integer::New(static_cast<boost::int32_t>(gt));
119 
120  return hs.Close(jgt);
121 }
122 
123 ::v8::Handle<::v8::Value> Geometry_GetSRID(const ::v8::Arguments& args)
124 {
125  ::v8::HandleScope hs;
126 
127  if(args.Holder().IsEmpty())
128  return ::v8::ThrowException(::v8::String::New("In order to use getSRID method you must use object notation: \"srid = obj.getSRID();\""));
129 
130  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
131 
132  if(g == 0)
133  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getSRID method!"));
134 
135  int srid = g->getSRID();
136 
137  ::v8::Local<::v8::Integer> jsrid = ::v8::Integer::New(static_cast<boost::int32_t>(srid));
138 
139  return hs.Close(jsrid);
140 }
141 
142 ::v8::Handle<::v8::Value> Geometry_SetSRID(const ::v8::Arguments& args)
143 {
144  ::v8::HandleScope hs;
145 
146  if(args.Holder().IsEmpty())
147  return ::v8::ThrowException(::v8::String::New("In order to use setSRID method you must use object notation: \"obj.setSRID(4326);\""));
148 
149  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsInt32())
150  return ::v8::ThrowException(::v8::String::New("In order to use setSRID method you must use object notation: \"obj.setSRID(4326);\""));
151 
152  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
153 
154  if(g == 0)
155  return ::v8::ThrowException(::v8::String::New("Invalid geometry in setSRID method!"));
156 
157  int srid = args[0]->ToInt32()->Value();
158 
159  g->setSRID(srid);
160 
161  return hs.Close(::v8::Undefined());
162 }
163 
164 ::v8::Handle<::v8::Value> Geometry_Transform(const ::v8::Arguments& args)
165 {
166  ::v8::HandleScope hs;
167 
168  if(args.Holder().IsEmpty())
169  return ::v8::ThrowException(::v8::String::New("In order to use transform method you must use object notation: \"obj.transform(4326);\""));
170 
171  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsInt32())
172  return ::v8::ThrowException(::v8::String::New("In order to use transform method you must use object notation: \"obj.transform(4326);\""));
173 
174  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
175 
176  if(g == 0)
177  return ::v8::ThrowException(::v8::String::New("Invalid geometry in transform method!"));
178 
179  int srid = args[0]->ToInt32()->Value();
180 
181  g->transform(srid);
182 
183  return hs.Close(::v8::Undefined());
184 }
185 
186 ::v8::Handle<::v8::Value> Geometry_GetEnvelope(const ::v8::Arguments& args)
187 {
188  ::v8::HandleScope hs;
189 
190  if(args.Holder().IsEmpty())
191  return ::v8::ThrowException(::v8::String::New("In order to use getEnvelope method you must use object notation: \"e = obj.getEnvelope();\""));
192 
193  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
194 
195  if(g == 0)
196  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getEnvelope method!"));
197 
198  std::auto_ptr<te::gm::Geometry> e(g->getEnvelope());
199 
200  ::v8::Local<::v8::Object> je = te::v8::jsi::Geometry_Make(e.get(), true);
201 
202  e.release();
203 
204  return hs.Close(je);
205 }
206 
207 ::v8::Handle<::v8::Value> Geometry_GetMBR(const ::v8::Arguments& args)
208 {
209  ::v8::HandleScope hs;
210 
211  if(args.Holder().IsEmpty())
212  return ::v8::ThrowException(::v8::String::New("In order to use getMBR method you must use object notation: \"e = obj.getMBR();\""));
213 
214  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
215 
216  if(g == 0)
217  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getMBR method!"));
218 
219  const te::gm::Envelope* e = g->getMBR();
220 
221  ::v8::Local<::v8::Object> je = te::v8::common::Make(e, te::v8::jsi::GetEnvelopeTemplate, false);
222 
223  return hs.Close(je);
224 }
225 
226 ::v8::Handle<::v8::Value> Geometry_ComputeMBR(const ::v8::Arguments& args)
227 {
228  ::v8::HandleScope hs;
229 
230  if(args.Holder().IsEmpty())
231  return ::v8::ThrowException(::v8::String::New("In order to use computeMBR method you must use object notation: \"obj.computeMBR();\""));
232 
233  bool cascade = false;
234 
235  if((args.Length() == 1) && !args[0].IsEmpty() && args[0]->IsInt32())
236  cascade = args[0]->ToBoolean()->Value();
237 
238  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
239 
240  if(g == 0)
241  return ::v8::ThrowException(::v8::String::New("Invalid geometry in computeMBR method!"));
242 
243  g->computeMBR(cascade);
244 
245  return hs.Close(::v8::Undefined());
246 }
247 
248 ::v8::Handle<::v8::Value> Geometry_AsText(const ::v8::Arguments& args)
249 {
250  ::v8::HandleScope hs;
251 
252  if(args.Holder().IsEmpty())
253  return ::v8::ThrowException(::v8::String::New("In order to use asText method you must use object notation: \"wkt = obj.asText();\""));
254 
255  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
256 
257  if(g == 0)
258  return ::v8::ThrowException(::v8::String::New("Invalid geometry in asText method!"));
259 
260  std::string wkt = g->asText();
261 
262  ::v8::Local<::v8::String> jwkt = ::v8::String::New(wkt.c_str());
263 
264  return hs.Close(jwkt);
265 }
266 
267 ::v8::Handle<::v8::Value> Geometry_AsBinary(const ::v8::Arguments& args)
268 {
269  ::v8::HandleScope hs;
270 
271  if(args.Holder().IsEmpty())
272  return ::v8::ThrowException(::v8::String::New("In order to use asBinary method you must use object notation: \"wkb = obj.asBinary();\""));
273 
274  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
275 
276  if(g == 0)
277  return ::v8::ThrowException(::v8::String::New("Invalid geometry in asBinary method!"));
278 
279  std::size_t size = 0;
280 
281  char* wkb = g->asBinary(size);
282 
283  ::v8::Local<::v8::String> jwkb = ::v8::String::New(wkb, size);
284 
285  delete [] wkb;
286 
287  return hs.Close(jwkb);
288 }
289 
290 ::v8::Handle<::v8::Value> Geometry_GetWkbSize(const ::v8::Arguments& args)
291 {
292  ::v8::HandleScope hs;
293 
294  if(args.Holder().IsEmpty())
295  return ::v8::ThrowException(::v8::String::New("In order to use getWkbSize method you must use object notation: \"size = obj.getWkbSize();\""));
296 
297  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
298 
299  if(g == 0)
300  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getWkbSize method!"));
301 
302  std::size_t size = g->getWkbSize();
303 
304  ::v8::Local<::v8::Integer> jsize = ::v8::Integer::New(static_cast<boost::int32_t>(size));
305 
306  return hs.Close(jsize);
307 }
308 
309 ::v8::Handle<::v8::Value> Geometry_GetWkb(const ::v8::Arguments& args)
310 {
311  ::v8::HandleScope hs;
312 
313  if(args.Holder().IsEmpty())
314  return ::v8::ThrowException(::v8::String::New("In order to use getWkb method you must use object notation: \"wkb = obj.getWkb(byteorder);\""));
315 
317 
318  if(args.Length() == 1)
319  {
320  if(args[0].IsEmpty() || !args[0]->IsInt32())
321  return ::v8::ThrowException(::v8::String::New("In order to use getWkb method you must use object notation: \"wkb = obj.getWkb(byteorder);\""));
322 
323  byteOrder = static_cast<char>(args[0]->ToInt32()->Value());
324  }
325 
326  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
327 
328  if(g == 0)
329  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getWkb method!"));
330 
331  std::size_t size = g->getWkbSize();
332 
333  char* wkb = new char[size];
334 
335  g->getWkb(wkb, byteOrder);
336 
337  ::v8::Local<::v8::String> jwkb = ::v8::String::New(wkb, size);
338 
339  delete [] wkb;
340 
341  return hs.Close(jwkb);
342 }
343 
344 ::v8::Handle<::v8::Value> Geometry_GetHWkb(const ::v8::Arguments& args)
345 {
346  ::v8::HandleScope hs;
347 
348  if(args.Holder().IsEmpty())
349  return ::v8::ThrowException(::v8::String::New("In order to use getHWkb method you must use object notation: \"hwkb = obj.getHWkb(byteorder);\""));
350 
352 
353  if(args.Length() == 1)
354  {
355  if(args[0].IsEmpty() || !args[0]->IsInt32())
356  return ::v8::ThrowException(::v8::String::New("In order to use getHWkb method you must use object notation: \"hwkb = obj.getHWkb(byteorder);\""));
357 
358  byteOrder = static_cast<char>(args[0]->ToInt32()->Value());
359  }
360 
361  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
362 
363  if(g == 0)
364  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getHWkb method!"));
365 
366  std::size_t size = g->getWkbSize();
367 
368  char* wkb = new char[size];
369 
370  g->getWkb(wkb, byteOrder);
371 
372  char* hwkb = te::common::Binary2Hex(wkb, size);
373 
374  delete [] wkb;
375 
376  ::v8::Local<::v8::String> jhwkb = ::v8::String::New(hwkb, 2 * size + 1);
377 
378  delete [] hwkb;
379 
380  return hs.Close(jhwkb);
381 }
382 
383 ::v8::Handle<::v8::Value> Geometry_IsEmpty(const ::v8::Arguments& args)
384 {
385  ::v8::HandleScope hs;
386 
387  if(args.Holder().IsEmpty())
388  return ::v8::ThrowException(::v8::String::New("In order to use isEmpty method you must use object notation: \"empty = obj.isEmpty();\""));
389 
390  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
391 
392  if(g == 0)
393  return ::v8::ThrowException(::v8::String::New("Invalid geometry in isEmpty method!"));
394 
395  bool is = g->isEmpty();
396 
397  ::v8::Handle<::v8::Boolean> jis = ::v8::Boolean::New(is);
398 
399  return hs.Close(jis);
400 }
401 
402 ::v8::Handle<::v8::Value> Geometry_IsSimple(const ::v8::Arguments& args)
403 {
404  ::v8::HandleScope hs;
405 
406  if(args.Holder().IsEmpty())
407  return ::v8::ThrowException(::v8::String::New("In order to use isSimple method you must use object notation: \"s = obj.isSimple();\""));
408 
409  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
410 
411  if(g == 0)
412  return ::v8::ThrowException(::v8::String::New("Invalid geometry in isSimple method!"));
413 
414  bool is = g->isSimple();
415 
416  ::v8::Handle<::v8::Boolean> jis = ::v8::Boolean::New(is);
417 
418  return hs.Close(jis);
419 }
420 
421 ::v8::Handle<::v8::Value> Geometry_IsValid(const ::v8::Arguments& args)
422 {
423  ::v8::HandleScope hs;
424 
425  if(args.Holder().IsEmpty())
426  return ::v8::ThrowException(::v8::String::New("In order to use isValid method you must use object notation: \"v = obj.isValid();\""));
427 
428  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
429 
430  if(g == 0)
431  return ::v8::ThrowException(::v8::String::New("Invalid geometry in isValid method!"));
432 
433  bool is = g->isValid();
434 
435  ::v8::Handle<::v8::Boolean> jis = ::v8::Boolean::New(is);
436 
437  return hs.Close(jis);
438 }
439 
440 ::v8::Handle<::v8::Value> Geometry_Is3D(const ::v8::Arguments& args)
441 {
442  ::v8::HandleScope hs;
443 
444  if(args.Holder().IsEmpty())
445  return ::v8::ThrowException(::v8::String::New("In order to use is3D method you must use object notation: \"v = obj.is3D();\""));
446 
447  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
448 
449  if(g == 0)
450  return ::v8::ThrowException(::v8::String::New("Invalid geometry in is3D method!"));
451 
452  bool is = g->is3D();
453 
454  ::v8::Handle<::v8::Boolean> jis = ::v8::Boolean::New(is);
455 
456  return hs.Close(jis);
457 }
458 
459 ::v8::Handle<::v8::Value> Geometry_IsMeasured(const ::v8::Arguments& args)
460 {
461  ::v8::HandleScope hs;
462 
463  if(args.Holder().IsEmpty())
464  return ::v8::ThrowException(::v8::String::New("In order to use isMeasured method you must use object notation: \"v = obj.isMeasured();\""));
465 
466  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
467 
468  if(g == 0)
469  return ::v8::ThrowException(::v8::String::New("Invalid geometry in isMeasured method!"));
470 
471  bool is = g->isMeasured();
472 
473  ::v8::Handle<::v8::Boolean> jis = ::v8::Boolean::New(is);
474 
475  return hs.Close(jis);
476 }
477 
478 ::v8::Handle<::v8::Value> Geometry_GetBoundary(const ::v8::Arguments& args)
479 {
480  ::v8::HandleScope hs;
481 
482  if(args.Holder().IsEmpty())
483  return ::v8::ThrowException(::v8::String::New("In order to use getBoundary method you must use object notation: \"o = obj.getBoundary();\""));
484 
485  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
486 
487  if(g == 0)
488  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getBoundary method!"));
489 
490  std::auto_ptr<te::gm::Geometry> boundary(g->getBoundary());
491 
492  ::v8::Local<::v8::Object> jboundary = te::v8::jsi::Geometry_Make(boundary.get(), true);
493 
494  boundary.release();
495 
496  return hs.Close(jboundary);
497 }
498 
499 ::v8::Handle<::v8::Value> Geometry_GetNPoints(const ::v8::Arguments& args)
500 {
501  ::v8::HandleScope hs;
502 
503  if(args.Holder().IsEmpty())
504  return ::v8::ThrowException(::v8::String::New("In order to use getNPoints method you must use object notation: \"np = obj.getNPoints();\""));
505 
506  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
507 
508  if(g == 0)
509  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getNPoints method!"));
510 
511  std::size_t np = g->getNPoints();
512 
513  ::v8::Handle<::v8::Integer> jnp = ::v8::Integer::New(static_cast<boost::int32_t>(np));
514 
515  return hs.Close(jnp);
516 }
517 
518 ::v8::Handle<::v8::Value> Geometry_Equals(const ::v8::Arguments& args)
519 {
520  ::v8::HandleScope hs;
521 
522  if(args.Holder().IsEmpty())
523  return ::v8::ThrowException(::v8::String::New("In order to use equals method you must use object notation: \"rel = obj.equals(another_obj);\""));
524 
525  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsObject())
526  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type in equals method!"));
527 
528  te::gm::Geometry* thisGeom = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
529 
530  te::gm::Geometry* rhsGeom = te::v8::common::Unwrap<te::gm::Geometry>(args[0]->ToObject());
531 
532  if((thisGeom == 0) || (rhsGeom == 0))
533  return ::v8::ThrowException(::v8::String::New("Invalid geometry in equals method!"));
534 
535  bool rel = thisGeom->equals(rhsGeom);
536 
537  ::v8::Handle<::v8::Boolean> jrel = ::v8::Boolean::New(rel);
538 
539  return hs.Close(jrel);
540 }
541 
542 ::v8::Handle<::v8::Value> Geometry_Disjoint(const ::v8::Arguments& args)
543 {
544  ::v8::HandleScope hs;
545 
546  if(args.Holder().IsEmpty())
547  return ::v8::ThrowException(::v8::String::New("In order to use disjoint method you must use object notation: \"rel = obj.disjoint(another_obj);\""));
548 
549  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsObject())
550  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type in disjoint method!"));
551 
552  te::gm::Geometry* thisGeom = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
553 
554  te::gm::Geometry* rhsGeom = te::v8::common::Unwrap<te::gm::Geometry>(args[0]->ToObject());
555 
556  if((thisGeom == 0) || (rhsGeom == 0))
557  return ::v8::ThrowException(::v8::String::New("Invalid geometry in disjoint method!"));
558 
559  bool rel = thisGeom->disjoint(rhsGeom);
560 
561  ::v8::Handle<::v8::Boolean> jrel = ::v8::Boolean::New(rel);
562 
563  return hs.Close(jrel);
564 }
565 
566 ::v8::Handle<::v8::Value> Geometry_Intersects(const ::v8::Arguments& args)
567 {
568  ::v8::HandleScope hs;
569 
570  if(args.Holder().IsEmpty())
571  return ::v8::ThrowException(::v8::String::New("In order to use intersects method you must use object notation: \"rel = obj.intersects(another_obj);\""));
572 
573  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsObject())
574  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type in intersects method!"));
575 
576  te::gm::Geometry* thisGeom = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
577 
578  te::gm::Geometry* rhsGeom = te::v8::common::Unwrap<te::gm::Geometry>(args[0]->ToObject());
579 
580  if((thisGeom == 0) || (rhsGeom == 0))
581  return ::v8::ThrowException(::v8::String::New("Invalid geometry in intersects method!"));
582 
583  bool rel = thisGeom->intersects(rhsGeom);
584 
585  ::v8::Handle<::v8::Boolean> jrel = ::v8::Boolean::New(rel);
586 
587  return hs.Close(jrel);
588 }
589 
590 ::v8::Handle<::v8::Value> Geometry_Touches(const ::v8::Arguments& args)
591 {
592  ::v8::HandleScope hs;
593 
594  if(args.Holder().IsEmpty())
595  return ::v8::ThrowException(::v8::String::New("In order to use touches method you must use object notation: \"rel = obj.touches(another_obj);\""));
596 
597  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsObject())
598  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type in touches method!"));
599 
600  te::gm::Geometry* thisGeom = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
601 
602  te::gm::Geometry* rhsGeom = te::v8::common::Unwrap<te::gm::Geometry>(args[0]->ToObject());
603 
604  if((thisGeom == 0) || (rhsGeom == 0))
605  return ::v8::ThrowException(::v8::String::New("Invalid geometry in touches method!"));
606 
607  bool rel = thisGeom->touches(rhsGeom);
608 
609  ::v8::Handle<::v8::Boolean> jrel = ::v8::Boolean::New(rel);
610 
611  return hs.Close(jrel);
612 }
613 
614 ::v8::Handle<::v8::Value> Geometry_Crosses(const ::v8::Arguments& args)
615 {
616  ::v8::HandleScope hs;
617 
618  if(args.Holder().IsEmpty())
619  return ::v8::ThrowException(::v8::String::New("In order to use crosses method you must use object notation: \"rel = obj.crosses(another_obj);\""));
620 
621  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsObject())
622  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type in crosses method!"));
623 
624  te::gm::Geometry* thisGeom = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
625 
626  te::gm::Geometry* rhsGeom = te::v8::common::Unwrap<te::gm::Geometry>(args[0]->ToObject());
627 
628  if((thisGeom == 0) || (rhsGeom == 0))
629  return ::v8::ThrowException(::v8::String::New("Invalid geometry in crosses method!"));
630 
631  bool rel = thisGeom->crosses(rhsGeom);
632 
633  ::v8::Handle<::v8::Boolean> jrel = ::v8::Boolean::New(rel);
634 
635  return hs.Close(jrel);
636 }
637 
638 ::v8::Handle<::v8::Value> Geometry_Within(const ::v8::Arguments& args)
639 {
640  ::v8::HandleScope hs;
641 
642  if(args.Holder().IsEmpty())
643  return ::v8::ThrowException(::v8::String::New("In order to use within method you must use object notation: \"rel = obj.within(another_obj);\""));
644 
645  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsObject())
646  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type in within method!"));
647 
648  te::gm::Geometry* thisGeom = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
649 
650  te::gm::Geometry* rhsGeom = te::v8::common::Unwrap<te::gm::Geometry>(args[0]->ToObject());
651 
652  if((thisGeom == 0) || (rhsGeom == 0))
653  return ::v8::ThrowException(::v8::String::New("Invalid geometry in within method!"));
654 
655  bool rel = thisGeom->within(rhsGeom);
656 
657  ::v8::Handle<::v8::Boolean> jrel = ::v8::Boolean::New(rel);
658 
659  return hs.Close(jrel);
660 }
661 
662 ::v8::Handle<::v8::Value> Geometry_Contains(const ::v8::Arguments& args)
663 {
664  ::v8::HandleScope hs;
665 
666  if(args.Holder().IsEmpty())
667  return ::v8::ThrowException(::v8::String::New("In order to use contains method you must use object notation: \"rel = obj.contains(another_obj);\""));
668 
669  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsObject())
670  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type in contains method!"));
671 
672  te::gm::Geometry* thisGeom = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
673 
674  te::gm::Geometry* rhsGeom = te::v8::common::Unwrap<te::gm::Geometry>(args[0]->ToObject());
675 
676  if((thisGeom == 0) || (rhsGeom == 0))
677  return ::v8::ThrowException(::v8::String::New("Invalid geometry in contains method!"));
678 
679  bool rel = thisGeom->contains(rhsGeom);
680 
681  ::v8::Handle<::v8::Boolean> jrel = ::v8::Boolean::New(rel);
682 
683  return hs.Close(jrel);
684 }
685 
686 ::v8::Handle<::v8::Value> Geometry_Overlaps(const ::v8::Arguments& args)
687 {
688  ::v8::HandleScope hs;
689 
690  if(args.Holder().IsEmpty())
691  return ::v8::ThrowException(::v8::String::New("In order to use overlaps method you must use object notation: \"rel = obj.overlaps(another_obj);\""));
692 
693  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsObject())
694  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type in overlaps method!"));
695 
696  te::gm::Geometry* thisGeom = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
697 
698  te::gm::Geometry* rhsGeom = te::v8::common::Unwrap<te::gm::Geometry>(args[0]->ToObject());
699 
700  if((thisGeom == 0) || (rhsGeom == 0))
701  return ::v8::ThrowException(::v8::String::New("Invalid geometry in overlaps method!"));
702 
703  bool rel = thisGeom->overlaps(rhsGeom);
704 
705  ::v8::Handle<::v8::Boolean> jrel = ::v8::Boolean::New(rel);
706 
707  return hs.Close(jrel);
708 }
709 
710 ::v8::Handle<::v8::Value> Geometry_Relate(const ::v8::Arguments& args)
711 {
712  ::v8::HandleScope hs;
713 
714  if(args.Holder().IsEmpty())
715  return ::v8::ThrowException(::v8::String::New("In order to use relate method you must use object notation: \"rel = obj.relation(another_obj);\""));
716 
717  te::gm::Geometry* thisGeom = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
718 
719  if(thisGeom == 0)
720  return ::v8::ThrowException(::v8::String::New("Invalid geometry in relate method!"));
721 
722  if(args.Length() == 1)
723  {
724  if(args[0].IsEmpty() || !args[0]->IsObject())
725  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type in relate method!"));
726 
727  te::gm::Geometry* rhsGeom = te::v8::common::Unwrap<te::gm::Geometry>(args[0]->ToObject());
728 
729  if(rhsGeom == 0)
730  return ::v8::ThrowException(::v8::String::New("Invalid geometry in relate method!"));
731 
732  std::string rel = thisGeom->relate(rhsGeom);
733 
734  ::v8::Local<::v8::String> jrel = ::v8::String::New(rel.c_str());
735 
736  return hs.Close(jrel);
737  }
738  else if(args.Length() == 2)
739  {
740  if(args[0].IsEmpty() || !args[0]->IsObject() || args[1].IsEmpty() || !args[1]->IsString())
741  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type in relate method!"));
742 
743  te::gm::Geometry* rhsGeom = te::v8::common::Unwrap<te::gm::Geometry>(args[0]->ToObject());
744 
745  if(rhsGeom == 0)
746  return ::v8::ThrowException(::v8::String::New("Invalid geometry in relate method!"));
747 
748  v8::String::Utf8Value jrel(args[1]->ToString());
749 
750  bool isRel = thisGeom->relate(rhsGeom, *jrel);
751 
752  ::v8::Handle<::v8::Boolean> jisRel = ::v8::Boolean::New(isRel);
753 
754  return hs.Close(jisRel);
755  }
756 
757  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type in relate method!"));
758 }
759 
760 ::v8::Handle<::v8::Value> Geometry_Covers(const ::v8::Arguments& args)
761 {
762  ::v8::HandleScope hs;
763 
764  if(args.Holder().IsEmpty())
765  return ::v8::ThrowException(::v8::String::New("In order to use covers method you must use object notation: \"rel = obj.covers(another_obj);\""));
766 
767  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsObject())
768  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type in covers method!"));
769 
770  te::gm::Geometry* thisGeom = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
771 
772  te::gm::Geometry* rhsGeom = te::v8::common::Unwrap<te::gm::Geometry>(args[0]->ToObject());
773 
774  if((thisGeom == 0) || (rhsGeom == 0))
775  return ::v8::ThrowException(::v8::String::New("Invalid geometry in covers method!"));
776 
777  bool rel = thisGeom->covers(rhsGeom);
778 
779  ::v8::Handle<::v8::Boolean> jrel = ::v8::Boolean::New(rel);
780 
781  return hs.Close(jrel);
782 }
783 
784 ::v8::Handle<::v8::Value> Geometry_CoveredBy(const ::v8::Arguments& args)
785 {
786  ::v8::HandleScope hs;
787 
788  if(args.Holder().IsEmpty())
789  return ::v8::ThrowException(::v8::String::New("In order to use coveredBy method you must use object notation: \"rel = obj.coveredBy(another_obj);\""));
790 
791  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsObject())
792  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type in covers method!"));
793 
794  te::gm::Geometry* thisGeom = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
795 
796  te::gm::Geometry* rhsGeom = te::v8::common::Unwrap<te::gm::Geometry>(args[0]->ToObject());
797 
798  if((thisGeom == 0) || (rhsGeom == 0))
799  return ::v8::ThrowException(::v8::String::New("Invalid geometry in coveredBy method!"));
800 
801  bool rel = thisGeom->coveredBy(rhsGeom);
802 
803  ::v8::Handle<::v8::Boolean> jrel = ::v8::Boolean::New(rel);
804 
805  return hs.Close(jrel);
806 }
807 
808 //prototype->Set(::v8::String::NewSymbol("locateAlong"), ::v8::FunctionTemplate::New(0));
809 //prototype->Set(::v8::String::NewSymbol("locateBetween"), ::v8::FunctionTemplate::New(0));
810 
811 ::v8::Handle<::v8::Value> Geometry_Distance(const ::v8::Arguments& args)
812 {
813  ::v8::HandleScope hs;
814 
815  if(args.Holder().IsEmpty())
816  return ::v8::ThrowException(::v8::String::New("In order to use distance method you must use object notation: \"dist = obj.distance(another_obj);\""));
817 
818  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsObject())
819  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type in distance method!"));
820 
821  te::gm::Geometry* thisGeom = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
822 
823  te::gm::Geometry* rhsGeom = te::v8::common::Unwrap<te::gm::Geometry>(args[0]->ToObject());
824 
825  if((thisGeom == 0) || (rhsGeom == 0))
826  return ::v8::ThrowException(::v8::String::New("Invalid geometry in distance method!"));
827 
828  double dist = thisGeom->distance(rhsGeom);
829 
830  ::v8::Local<::v8::Number> jdist = ::v8::Number::New(dist);
831 
832  return hs.Close(jdist);
833 }
834 
835 //prototype->Set(::v8::String::NewSymbol("buffer"), ::v8::FunctionTemplate::New(0));
836 
837 ::v8::Handle<::v8::Value> Geometry_ConvexHull(const ::v8::Arguments& args)
838 {
839  ::v8::HandleScope hs;
840 
841  if(args.Holder().IsEmpty())
842  return ::v8::ThrowException(::v8::String::New("In order to use convexHull method you must use object notation: \"ch = obj.convexHull();\""));
843 
844  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
845 
846  if(g == 0)
847  return ::v8::ThrowException(::v8::String::New("Invalid geometry in getEnvelope method!"));
848 
849  std::auto_ptr<te::gm::Geometry> ch(g->convexHull());
850 
851  ::v8::Local<::v8::Object> jch = te::v8::jsi::Geometry_Make(ch.get(), true);
852 
853  ch.release();
854 
855  return hs.Close(jch);
856 }
857 
858 ::v8::Handle<::v8::Value> Geometry_Intersection(const ::v8::Arguments& args)
859 {
860  ::v8::HandleScope hs;
861 
862  if(args.Holder().IsEmpty())
863  return ::v8::ThrowException(::v8::String::New("In order to use intersection method you must use object notation: \"newGeom = obj.intersection(another_obj);\""));
864 
865  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsObject())
866  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type in intersection method!"));
867 
868  te::gm::Geometry* thisGeom = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
869 
870  te::gm::Geometry* rhsGeom = te::v8::common::Unwrap<te::gm::Geometry>(args[0]->ToObject());
871 
872  if((thisGeom == 0) || (rhsGeom == 0))
873  return ::v8::ThrowException(::v8::String::New("Invalid geometry in intersection method!"));
874 
875  std::auto_ptr<te::gm::Geometry> newGeom(thisGeom->intersection(rhsGeom));
876 
877  ::v8::Local<::v8::Object> jnewGeom = te::v8::jsi::Geometry_Make(newGeom.get(), true);
878 
879  newGeom.release();
880 
881  return hs.Close(jnewGeom);
882 }
883 
884 ::v8::Handle<::v8::Value> Geometry_Union(const ::v8::Arguments& args)
885 {
886  ::v8::HandleScope hs;
887 
888  if(args.Holder().IsEmpty())
889  return ::v8::ThrowException(::v8::String::New("In order to use union method you must use object notation: \"newGeom = obj.union(another_obj);\""));
890 
891  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsObject())
892  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type in union method!"));
893 
894  te::gm::Geometry* thisGeom = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
895 
896  te::gm::Geometry* rhsGeom = te::v8::common::Unwrap<te::gm::Geometry>(args[0]->ToObject());
897 
898  if((thisGeom == 0) || (rhsGeom == 0))
899  return ::v8::ThrowException(::v8::String::New("Invalid geometry in union method!"));
900 
901  std::auto_ptr<te::gm::Geometry> newGeom(thisGeom->Union(rhsGeom));
902 
903  ::v8::Local<::v8::Object> jnewGeom = te::v8::jsi::Geometry_Make(newGeom.get(), true);
904 
905  newGeom.release();
906 
907  return hs.Close(jnewGeom);
908 }
909 
910 ::v8::Handle<::v8::Value> Geometry_Difference(const ::v8::Arguments& args)
911 {
912  ::v8::HandleScope hs;
913 
914  if(args.Holder().IsEmpty())
915  return ::v8::ThrowException(::v8::String::New("In order to use difference method you must use object notation: \"newGeom = obj.difference(another_obj);\""));
916 
917  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsObject())
918  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type in difference method!"));
919 
920  te::gm::Geometry* thisGeom = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
921 
922  te::gm::Geometry* rhsGeom = te::v8::common::Unwrap<te::gm::Geometry>(args[0]->ToObject());
923 
924  if((thisGeom == 0) || (rhsGeom == 0))
925  return ::v8::ThrowException(::v8::String::New("Invalid geometry in difference method!"));
926 
927  std::auto_ptr<te::gm::Geometry> newGeom(thisGeom->difference(rhsGeom));
928 
929  ::v8::Local<::v8::Object> jnewGeom = te::v8::jsi::Geometry_Make(newGeom.get(), true);
930 
931  newGeom.release();
932 
933  return hs.Close(jnewGeom);
934 }
935 
936 ::v8::Handle<::v8::Value> Geometry_SymDifference(const ::v8::Arguments& args)
937 {
938  ::v8::HandleScope hs;
939 
940  if(args.Holder().IsEmpty())
941  return ::v8::ThrowException(::v8::String::New("In order to use symDifference method you must use object notation: \"newGeom = obj.symDifference(another_obj);\""));
942 
943  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsObject())
944  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type in symDifference method!"));
945 
946  te::gm::Geometry* thisGeom = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
947 
948  te::gm::Geometry* rhsGeom = te::v8::common::Unwrap<te::gm::Geometry>(args[0]->ToObject());
949 
950  if((thisGeom == 0) || (rhsGeom == 0))
951  return ::v8::ThrowException(::v8::String::New("Invalid geometry in symDifference method!"));
952 
953  std::auto_ptr<te::gm::Geometry> newGeom(thisGeom->symDifference(rhsGeom));
954 
955  ::v8::Local<::v8::Object> jnewGeom = te::v8::jsi::Geometry_Make(newGeom.get(), true);
956 
957  newGeom.release();
958 
959  return hs.Close(jnewGeom);
960 }
961 
962 ::v8::Handle<::v8::Value> Geometry_DWithin(const ::v8::Arguments& args)
963 {
964  ::v8::HandleScope hs;
965 
966  if(args.Holder().IsEmpty())
967  return ::v8::ThrowException(::v8::String::New("In order to use dWithin method you must use object notation: \"result = obj.dWithin(another_obj, 10.0);\""));
968 
969  if((args.Length() != 2) || args[0].IsEmpty() || !args[0]->IsObject() || args[1].IsEmpty() || !args[1]->IsNumber())
970  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type in dWithin method!"));
971 
972  te::gm::Geometry* thisGeom = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
973 
974  te::gm::Geometry* rhsGeom = te::v8::common::Unwrap<te::gm::Geometry>(args[0]->ToObject());
975 
976  if((thisGeom == 0) || (rhsGeom == 0))
977  return ::v8::ThrowException(::v8::String::New("Invalid geometry in dWithin method!"));
978 
979  double d = args[0]->ToNumber()->Value();
980 
981  bool result = thisGeom->dWithin(rhsGeom, d);
982 
983  ::v8::Handle<::v8::Boolean> jresult = ::v8::Boolean::New(result);
984 
985  return hs.Close(jresult);
986 }
987 
988 ::v8::Handle<::v8::Value> Geometry_Clone(const ::v8::Arguments& args)
989 {
990  ::v8::HandleScope hs;
991 
992  if(args.Holder().IsEmpty())
993  return ::v8::ThrowException(::v8::String::New("In order to use clone method you must use object notation: \"newGeom = obj.clone();\""));
994 
995  te::gm::Geometry* g = te::v8::common::Unwrap<te::gm::Geometry>(args.Holder());
996 
997  if(g == 0)
998  return ::v8::ThrowException(::v8::String::New("Invalid geometry in clone method!"));
999 
1000  std::auto_ptr<te::gm::Geometry> ng(g->clone());
1001 
1002  ::v8::Local<::v8::Object> jng = te::v8::jsi::Geometry_Make(ng.get(), true);
1003 
1004  ng.release();
1005 
1006  return hs.Close(jng);
1007 }
1008 
1009 ::v8::Handle<::v8::Value> Geometry_GetGeomFromWKB(const ::v8::Arguments& args)
1010 {
1011  ::v8::HandleScope hs;
1012 
1013  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsString())
1014  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type for getGeomFromWKB method!"));
1015 
1016  v8::String::Utf8Value wkb(args[0]->ToString());
1017 
1018  std::auto_ptr<te::gm::Geometry> geom(te::gm::Geometry::getGeomFromWKB(*wkb));
1019 
1020  ::v8::Local<::v8::Object> jgeom = te::v8::jsi::Geometry_Make(geom.get(), true);
1021 
1022  geom.release();
1023 
1024  return hs.Close(jgeom);
1025 }
1026 
1027 ::v8::Handle<::v8::Value> Geometry_GetGeomFromHWKB(const ::v8::Arguments& args)
1028 {
1029  ::v8::HandleScope hs;
1030 
1031  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsString())
1032  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type for getGeomFromHWKB method!"));
1033 
1034  v8::String::Utf8Value hwkb(args[0]->ToString());
1035 
1036  std::auto_ptr<te::gm::Geometry> geom(te::gm::Geometry::getGeomFromWKB(*hwkb));
1037 
1038  ::v8::Local<::v8::Object> jgeom = te::v8::jsi::Geometry_Make(geom.get(), true);
1039 
1040  geom.release();
1041 
1042  return hs.Close(jgeom);
1043 }
1044 
1045 ::v8::Handle<::v8::Value> Geometry_GetGeomFromWKT(const ::v8::Arguments& args)
1046 {
1047  ::v8::HandleScope hs;
1048 
1049  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsString())
1050  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type for getGeomFromWKT method!"));
1051 
1052  v8::String::Utf8Value wkt(args[0]->ToString());
1053 
1054  std::auto_ptr<te::gm::Geometry> geom(te::gm::Geometry::getGeomFromWKT(*wkt));
1055 
1056  ::v8::Local<::v8::Object> jgeom = te::v8::jsi::Geometry_Make(geom.get(), true);
1057 
1058  geom.release();
1059 
1060  return hs.Close(jgeom);
1061 }
1062 
1063 ::v8::Handle<::v8::Value> Geometry_GetGeomFromEnvelope(const ::v8::Arguments& args)
1064 {
1065  ::v8::HandleScope hs;
1066 
1067  if((args.Length() != 2) || args[0].IsEmpty() || !args[0]->IsObject() || args[1].IsEmpty() || !args[1]->IsInt32())
1068  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type for getGeomFromEnvelope method!"));
1069 
1070  ::v8::Local<::v8::Object> jenvelope = args[0]->ToObject();
1071  ::v8::Local<::v8::Int32> srid = args[1]->ToInt32();
1072 
1073  te::gm::Envelope* envelope = te::v8::common::Unwrap<te::gm::Envelope>(jenvelope);
1074 
1075  std::auto_ptr<te::gm::Geometry> geom(te::gm::Geometry::getGeomFromEnvelope(envelope, srid->Int32Value()));
1076 
1077  ::v8::Local<::v8::Object> jgeom = te::v8::jsi::Geometry_Make(geom.get(), true);
1078 
1079  geom.release();
1080 
1081  return hs.Close(jgeom);
1082 }
1083 
1084 ::v8::Handle<::v8::Value> Geometry_StaticGetGeomTypeId(const ::v8::Arguments& args)
1085 {
1086  ::v8::HandleScope hs;
1087 
1088  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsString())
1089  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type for getGeomTypeId method!"));
1090 
1091  v8::String::Utf8Value gt(args[0]->ToString());
1092 
1094 
1095  ::v8::Local<::v8::Integer> jt = ::v8::Int32::New(static_cast<int>(t));
1096 
1097  return hs.Close(jt);
1098 }
1099 
1100 ::v8::Handle<::v8::Value> Geometry_IsGeomType(const ::v8::Arguments& args)
1101 {
1102  ::v8::HandleScope hs;
1103 
1104  if((args.Length() != 1) || args[0].IsEmpty() || !args[0]->IsString())
1105  return ::v8::ThrowException(::v8::String::New("Missing parameter or wrong parameter type for isGeomType method!"));
1106 
1107  v8::String::Utf8Value gt(args[0]->ToString());
1108 
1109  bool is = te::gm::Geometry::isGeomType(*gt);
1110 
1111  ::v8::Handle<::v8::Boolean> jis = ::v8::Boolean::New(is);
1112 
1113  return hs.Close(jis);
1114 }
1115 
1116 void te::v8::jsi::RegisterGeometry(::v8::Local<::v8::Object>& global)
1117 {
1118  ::v8::HandleScope hs;
1119 
1120  ::v8::Local<::v8::ObjectTemplate> jsgeom = ::v8::ObjectTemplate::New();
1121 
1122  jsgeom->Set(::v8::String::NewSymbol("getGeomFromWKB"), ::v8::FunctionTemplate::New(Geometry_GetGeomFromWKB));
1123  jsgeom->Set(::v8::String::NewSymbol("getGeomFromHWKB"), ::v8::FunctionTemplate::New(Geometry_GetGeomFromHWKB));
1124  jsgeom->Set(::v8::String::NewSymbol("getGeomFromWKT"), ::v8::FunctionTemplate::New(Geometry_GetGeomFromWKT));
1125  jsgeom->Set(::v8::String::NewSymbol("getGeomFromEnvelope"), ::v8::FunctionTemplate::New(Geometry_GetGeomFromEnvelope));
1126  jsgeom->Set(::v8::String::NewSymbol("getGeomTypeId"), ::v8::FunctionTemplate::New(Geometry_StaticGetGeomTypeId));
1127  jsgeom->Set(::v8::String::NewSymbol("isGeomType"), ::v8::FunctionTemplate::New(Geometry_IsGeomType));
1128 
1129  global->Set(::v8::String::New("TeGeometry"), jsgeom->NewInstance());
1130 }
1131 
1132 static ::v8::Persistent<::v8::FunctionTemplate> sg_geometry_template;
1133 
1134 ::v8::Persistent<::v8::FunctionTemplate>& te::v8::jsi::GetGeometryTemplate()
1135 {
1136  if(sg_geometry_template.IsEmpty())
1137  {
1138  ::v8::Persistent<::v8::FunctionTemplate>& adTpl = GetAbstractDataTemplate();
1139  ::v8::Local<::v8::FunctionTemplate> result = ::v8::FunctionTemplate::New();
1140  result->Inherit(adTpl);
1141 
1142  ::v8::Handle<::v8::ObjectTemplate> prototype = result->PrototypeTemplate();
1143 
1144  prototype->Set(::v8::String::NewSymbol("getDimension"), ::v8::FunctionTemplate::New(Geometry_GetDimension));
1145  prototype->Set(::v8::String::NewSymbol("getCoordinateDimension"), ::v8::FunctionTemplate::New(Geometry_GetCoordinateDimension));
1146  prototype->Set(::v8::String::NewSymbol("getGeometryType"), ::v8::FunctionTemplate::New(Geometry_GetGeometryType));
1147  prototype->Set(::v8::String::NewSymbol("getGeomTypeId"), ::v8::FunctionTemplate::New(Geometry_GetGeomTypeId));
1148  prototype->Set(::v8::String::NewSymbol("getSRID"), ::v8::FunctionTemplate::New(Geometry_GetSRID));
1149  prototype->Set(::v8::String::NewSymbol("setSRID"), ::v8::FunctionTemplate::New(Geometry_SetSRID));
1150  prototype->Set(::v8::String::NewSymbol("transform"), ::v8::FunctionTemplate::New(Geometry_Transform));
1151  prototype->Set(::v8::String::NewSymbol("getEnvelope"), ::v8::FunctionTemplate::New(Geometry_GetEnvelope));
1152  prototype->Set(::v8::String::NewSymbol("getMBR"), ::v8::FunctionTemplate::New(Geometry_GetMBR));
1153  prototype->Set(::v8::String::NewSymbol("computeMBR"), ::v8::FunctionTemplate::New(Geometry_ComputeMBR));
1154  prototype->Set(::v8::String::NewSymbol("asText"), ::v8::FunctionTemplate::New(Geometry_AsText));
1155  prototype->Set(::v8::String::NewSymbol("asBinary"), ::v8::FunctionTemplate::New(Geometry_AsBinary));
1156  prototype->Set(::v8::String::NewSymbol("getWkbSize"), ::v8::FunctionTemplate::New(Geometry_GetWkbSize));
1157  prototype->Set(::v8::String::NewSymbol("getWkb"), ::v8::FunctionTemplate::New(Geometry_GetWkb));
1158  prototype->Set(::v8::String::NewSymbol("getHWkb"), ::v8::FunctionTemplate::New(Geometry_GetHWkb));
1159  prototype->Set(::v8::String::NewSymbol("isEmpty"), ::v8::FunctionTemplate::New(Geometry_IsEmpty));
1160  prototype->Set(::v8::String::NewSymbol("isSimple"), ::v8::FunctionTemplate::New(Geometry_IsSimple));
1161  prototype->Set(::v8::String::NewSymbol("isValid"), ::v8::FunctionTemplate::New(Geometry_IsValid));
1162  prototype->Set(::v8::String::NewSymbol("is3D"), ::v8::FunctionTemplate::New(Geometry_Is3D));
1163  prototype->Set(::v8::String::NewSymbol("isMeasured"), ::v8::FunctionTemplate::New(Geometry_IsMeasured));
1164  prototype->Set(::v8::String::NewSymbol("getBoundary"), ::v8::FunctionTemplate::New(Geometry_GetBoundary));
1165  prototype->Set(::v8::String::NewSymbol("getNPoints"), ::v8::FunctionTemplate::New(Geometry_GetNPoints));
1166  prototype->Set(::v8::String::NewSymbol("equals"), ::v8::FunctionTemplate::New(Geometry_Equals));
1167  prototype->Set(::v8::String::NewSymbol("disjoint"), ::v8::FunctionTemplate::New(Geometry_Disjoint));
1168  prototype->Set(::v8::String::NewSymbol("intersects"), ::v8::FunctionTemplate::New(Geometry_Intersects));
1169  prototype->Set(::v8::String::NewSymbol("touches"), ::v8::FunctionTemplate::New(Geometry_Touches));
1170  prototype->Set(::v8::String::NewSymbol("crosses"), ::v8::FunctionTemplate::New(Geometry_Crosses));
1171  prototype->Set(::v8::String::NewSymbol("within"), ::v8::FunctionTemplate::New(Geometry_Within));
1172  prototype->Set(::v8::String::NewSymbol("contains"), ::v8::FunctionTemplate::New(Geometry_Contains));
1173  prototype->Set(::v8::String::NewSymbol("overlaps"), ::v8::FunctionTemplate::New(Geometry_Overlaps));
1174  prototype->Set(::v8::String::NewSymbol("relate"), ::v8::FunctionTemplate::New(Geometry_Relate));
1175  prototype->Set(::v8::String::NewSymbol("covers"), ::v8::FunctionTemplate::New(Geometry_Covers));
1176  prototype->Set(::v8::String::NewSymbol("coveredBy"), ::v8::FunctionTemplate::New(Geometry_CoveredBy));
1177  //prototype->Set(::v8::String::NewSymbol("locateAlong"), ::v8::FunctionTemplate::New(0));
1178  //prototype->Set(::v8::String::NewSymbol("locateBetween"), ::v8::FunctionTemplate::New(0));
1179  prototype->Set(::v8::String::NewSymbol("distance"), ::v8::FunctionTemplate::New(Geometry_Distance));
1180  //prototype->Set(::v8::String::NewSymbol("buffer"), ::v8::FunctionTemplate::New(Geometry_Buffer));
1181  prototype->Set(::v8::String::NewSymbol("convexHull"), ::v8::FunctionTemplate::New(Geometry_ConvexHull));
1182  prototype->Set(::v8::String::NewSymbol("intersection"), ::v8::FunctionTemplate::New(Geometry_Intersection));
1183  prototype->Set(::v8::String::NewSymbol("Union"), ::v8::FunctionTemplate::New(Geometry_Union));
1184  prototype->Set(::v8::String::NewSymbol("difference"), ::v8::FunctionTemplate::New(Geometry_Difference));
1185  prototype->Set(::v8::String::NewSymbol("symDifference"), ::v8::FunctionTemplate::New(Geometry_SymDifference));
1186  prototype->Set(::v8::String::NewSymbol("dWithin"), ::v8::FunctionTemplate::New(Geometry_DWithin));
1187  prototype->Set(::v8::String::NewSymbol("clone"), ::v8::FunctionTemplate::New(Geometry_Clone));
1188 
1189  sg_geometry_template = ::v8::Persistent<::v8::FunctionTemplate>::New(result);
1190  }
1191 
1192  return sg_geometry_template;
1193 }
1194 
1195 ::v8::Local<::v8::Object> te::v8::jsi::Geometry_Make(te::gm::Geometry* g, const bool isOwner)
1196 {
1197  ::v8::HandleScope hs;
1198 
1199  ::v8::Local<::v8::Object> jsgeom;
1200 
1201  switch(g->getGeomTypeId())
1202  {
1203  case te::gm::PointType:
1204  case te::gm::PointZType:
1205  case te::gm::PointMType:
1206  case te::gm::PointZMType:
1207  {
1208  te::gm::Point* pt = static_cast<te::gm::Point*>(g);
1209  jsgeom = te::v8::common::Make(pt, GetPointTemplate, isOwner);
1210  break;
1211  }
1212 
1213  case te::gm::PolygonType:
1214  case te::gm::PolygonZType:
1215  case te::gm::PolygonMType:
1216  case te::gm::PolygonZMType:
1217  {
1218  te::gm::Polygon* poly = static_cast<te::gm::Polygon*>(g);
1219  jsgeom = te::v8::common::Make(poly, GetPolygonTemplate, isOwner);
1220  break;
1221  }
1222 
1227  {
1228  te::gm::LineString* l = static_cast<te::gm::LineString*>(g);
1229  jsgeom = te::v8::common::Make(l, GetLineStringTemplate, isOwner);
1230  break;
1231  }
1232 
1237  {
1238  te::gm::MultiPoint* m = static_cast<te::gm::MultiPoint*>(g);
1239  jsgeom = te::v8::common::Make(m, GetMultiPointTemplate, isOwner);
1240  break;
1241  }
1242 
1247  {
1248  te::gm::MultiPolygon* m = static_cast<te::gm::MultiPolygon*>(g);
1249  jsgeom = te::v8::common::Make(m, GetMultiPolygonTemplate, isOwner);
1250  break;
1251  }
1252 
1257  {
1258  te::gm::MultiLineString* m = static_cast<te::gm::MultiLineString*>(g);
1259  jsgeom = te::v8::common::Make(m, GetMultiLineStringTemplate, isOwner);
1260  break;
1261  }
1262 
1267  {
1269  jsgeom = te::v8::common::Make(gc, GetGeometryCollectionTemplate, isOwner);
1270  break;
1271  }
1272 
1273  /*case TriangleType:
1274  case TriangleZType:
1275  case TriangleMType:
1276  case TriangleZMType:
1277  {
1278  break;
1279  }
1280 
1281  case TINType:
1282  case TINZType:
1283  case TINMType:
1284  case TINZMType:
1285  {
1286  break;
1287  }
1288 
1289  case PolyhedralSurfaceType:
1290  case PolyhedralSurfaceZType:
1291  case PolyhedralSurfaceMType:
1292  case PolyhedralSurfaceZMType:
1293  {
1294  break;
1295  }*/
1296 
1297  default:
1298  ::v8::ThrowException(::v8::String::New("The informed geometry type is unknown!"));
1299  }
1300 
1301  return hs.Close(jsgeom);
1302 }
1303 
1304 
::v8::Persistent<::v8::FunctionTemplate > & GetMultiPointTemplate()
It returns a reference to the persistent template of a MultiPoint object.
::v8::Local<::v8::Object > Make(T *obj, TF tfunc, const bool isOwner)
It creates a new JavaScript object from a C++ object (obj).
::v8::Handle<::v8::Value > Geometry_Overlaps(const ::v8::Arguments &args)
::v8::Persistent<::v8::FunctionTemplate > & GetPointTemplate()
It returns a reference to the persistent template of a Point object.
virtual Geometry * difference(const Geometry *const rhs) const _NOEXCEPT_OP(false)
It returns a geometric object that represents the point set difference with another geometry...
::v8::Handle<::v8::Value > Geometry_SymDifference(const ::v8::Arguments &args)
MultiPolygon is a MultiSurface whose elements are Polygons.
Definition: MultiPolygon.h:50
::v8::Handle<::v8::Value > Geometry_GetNPoints(const ::v8::Arguments &args)
GeomType
Each enumerated type is compatible with a Well-known Binary (WKB) type code.
::v8::Handle<::v8::Value > Geometry_IsGeomType(const ::v8::Arguments &args)
virtual Geometry * symDifference(const Geometry *const rhs) const _NOEXCEPT_OP(false)
It returns a geometric object that represents the point set symetric difference with another geometry...
::v8::Handle<::v8::Value > Geometry_SetSRID(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > Geometry_AsText(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > Geometry_GetEnvelope(const ::v8::Arguments &args)
virtual double distance(const Geometry *const rhs) const _NOEXCEPT_OP(false)
It returns the shortest distance between any two points in the two geometry objects.
::v8::Handle<::v8::Value > Geometry_ConvexHull(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > Geometry_Relate(const ::v8::Arguments &args)
virtual Dimensionality getDimension() const _NOEXCEPT_OP(true)=0
It returns the geometric object dimension (0, 1 or 2).
::v8::Handle<::v8::Value > Geometry_CoveredBy(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > Geometry_IsSimple(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > Geometry_AsBinary(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > Geometry_GetWkb(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > Geometry_GetWkbSize(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > Geometry_GetGeometryType(const ::v8::Arguments &args)
bool isMeasured() const _NOEXCEPT_OP(true)
It returns true if this geometric object has m coordinate values.
GeomType getGeomTypeId() const _NOEXCEPT_OP(true)
It returns the geometry subclass type identifier.
::v8::Handle<::v8::Value > Geometry_Clone(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > Geometry_Intersects(const ::v8::Arguments &args)
virtual Geometry * intersection(const Geometry *const rhs) const _NOEXCEPT_OP(false)
It returns a geometric object that represents the point set intersection with another geometry...
virtual bool dWithin(const Geometry *const rhs, const double &distance) const _NOEXCEPT_OP(false)
It returns true if the geometries are within the specified distance.
::v8::Handle<::v8::Value > Geometry_Crosses(const ::v8::Arguments &args)
static const MachineByteOrder sm_machineByteOrder
A flag that indicates the machine byte order (Big Endian or Little Endian).
virtual bool disjoint(const Geometry *const rhs) const _NOEXCEPT_OP(false)
It returns true if the geometry object is spatially disjoint from rhs geometry.
::v8::Handle<::v8::Value > Geometry_Intersection(const ::v8::Arguments &args)
virtual bool relate(const Geometry *const rhs, const std::string &matrix) const _NOEXCEPT_OP(false)
It returns true if this geometry object is spatially related to rhs geometry according to the pattern...
::v8::Handle<::v8::Value > Geometry_DWithin(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > Geometry_StaticGetGeomTypeId(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > Geometry_GetGeomTypeId(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > Geometry_GetGeomFromHWKB(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > Geometry_Disjoint(const ::v8::Arguments &args)
virtual Geometry * Union(const Geometry *const rhs) const _NOEXCEPT_OP(false)
It returns a geometric object that represents the point set union with another geometry.
virtual bool intersects(const Geometry *const rhs) const _NOEXCEPT_OP(false)
It returns true if the geometry object spatially intersects rhs geometry.
virtual bool touches(const Geometry *const rhs) const _NOEXCEPT_OP(false)
It returns true if the geometry object spatially touches rhs geometry.
virtual bool isSimple() const _NOEXCEPT_OP(false)
It returns true if this geometric object has no anomalous points, such as self intersection or self t...
std::size_t getWkbSize() const _NOEXCEPT_OP(true)
It returns the size required by a WKB representation for this geometric object.
::v8::Persistent<::v8::FunctionTemplate > & GetLineStringTemplate()
It returns a reference to the persistent template of a LineString object.
::v8::Persistent<::v8::FunctionTemplate > & GetEnvelopeTemplate()
It returns a reference to the persistent template of a Envelope object.
::v8::Persistent<::v8::FunctionTemplate > & GetMultiPolygonTemplate()
It returns a reference to the persistent template of a MultiPolygon object.
::v8::Handle<::v8::Value > Geometry_GetGeomFromWKT(const ::v8::Arguments &args)
virtual bool overlaps(const Geometry *const rhs) const _NOEXCEPT_OP(false)
It returns true if this geometry object spatially overlaps rhs geometry.
::v8::Handle<::v8::Value > Geometry_Difference(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > Geometry_Distance(const ::v8::Arguments &args)
te::gm::GeometryCollection * gc
::v8::Handle<::v8::Value > Geometry_GetBoundary(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > Geometry_Contains(const ::v8::Arguments &args)
int getSRID() const _NOEXCEPT_OP(true)
It returns the Spatial Reference System ID associated to this geometric object.
virtual void computeMBR(bool cascade) const _NOEXCEPT_OP(true)=0
It computes the minimum bounding rectangle for the geometry.
::v8::Handle<::v8::Value > Geometry_GetGeomFromWKB(const ::v8::Arguments &args)
MultiPoint is a GeometryCollection whose elements are restricted to points.
Definition: MultiPoint.h:50
Geometry * getEnvelope() const _NOEXCEPT_OP(true)
It returns the minimum bounding rectangle (MBR) for the geometry.
LineString is a curve with linear interpolation between points.
Definition: LineString.h:62
::v8::Handle<::v8::Value > Geometry_GetGeomFromEnvelope(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > Geometry_Covers(const ::v8::Arguments &args)
A point with x and y coordinate values.
Definition: Point.h:50
const Envelope * getMBR() const _NOEXCEPT_OP(true)
It returns the minimum bounding rectangle for the geometry in an internal representation.
virtual bool isValid() const _NOEXCEPT_OP(false)
It tells if the geometry is well formed.
An Envelope defines a 2D rectangular region.
::v8::Handle<::v8::Value > Geometry_Union(const ::v8::Arguments &args)
std::string asText() const _NOEXCEPT_OP(true)
It returns an string with the Well-Known Text Representation for the geometry.
Dimensionality
From Wikipedia: "in mathematics, the dimension of an object is an intrinsic property, independent of the space in which the object may happen to be embedded".
void RegisterGeometry(::v8::Local<::v8::Object > &global)
It register a singleton for the Geometry class.
virtual bool within(const Geometry *const rhs) const _NOEXCEPT_OP(false)
It returns true if the geometry object is spatially within rhs geometry.
::v8::Handle<::v8::Value > Geometry_GetHWkb(const ::v8::Arguments &args)
static te::dt::DateTime d(2010, 8, 9, 15, 58, 39)
virtual bool isEmpty() const _NOEXCEPT_OP(false)
It returns true if this geometric object is the empty Geometry.
::v8::Handle<::v8::Value > Geometry_IsMeasured(const ::v8::Arguments &args)
::v8::Persistent<::v8::FunctionTemplate > & GetPolygonTemplate()
It returns a reference to the persistent template of a Polygon object.
virtual bool contains(const Geometry *const rhs) const _NOEXCEPT_OP(false)
It returns true if this geometry object spatially contains rhs geometry.
virtual AbstractData * clone() const =0
It returns a clone of this object.
::v8::Handle<::v8::Value > Geometry_GetSRID(const ::v8::Arguments &args)
bool is3D() const _NOEXCEPT_OP(true)
It returns true if this geometric object has z coordinate values.
char * asBinary(std::size_t &size) const _NOEXCEPT_OP(false)
It serializes the geometric object to a Well-known Binary Representation (WKB).
::v8::Handle<::v8::Value > Geometry_IsEmpty(const ::v8::Arguments &args)
::v8::Handle<::v8::Value > Geometry_GetCoordinateDimension(const ::v8::Arguments &args)
Geometry is the root class of the geometries hierarchy, it follows OGC and ISO standards.
::v8::Persistent<::v8::FunctionTemplate > & GetAbstractDataTemplate()
It returns a reference to the persistent template of an AbstractData object.
::v8::Handle<::v8::Value > Geometry_GetMBR(const ::v8::Arguments &args)
MultiLineString is a MultiCurve whose elements are LineStrings.
::v8::Persistent<::v8::FunctionTemplate > & GetGeometryTemplate()
It returns a reference to the persistent template of a Geometry object.
::v8::Handle<::v8::Value > Geometry_Transform(const ::v8::Arguments &args)
Polygon is a subclass of CurvePolygon whose rings are defined by linear rings.
Definition: Polygon.h:50
::v8::Handle<::v8::Value > Geometry_Within(const ::v8::Arguments &args)
static bool isGeomType(const std::string &stype)
It tells if the given string is a geometry data type.
::v8::Handle<::v8::Value > Geometry_Touches(const ::v8::Arguments &args)
::v8::Local<::v8::Object > Geometry_Make(te::gm::Geometry *g, const bool isOwner)
Given a C++ geometry this function creates a new JavaScript geometry cast to the right geometry subty...
virtual void setSRID(int srid) _NOEXCEPT_OP(true)=0
It sets the Spatial Reference System ID of the geometry and all its parts if it is a GeometryCollecti...
virtual Geometry * getBoundary() const _NOEXCEPT_OP(false)
It returns the geometry boundary.
virtual std::size_t getNPoints() const _NOEXCEPT_OP(true)=0
it returns the number of points (vertexes) in the geometry.
::v8::Persistent<::v8::FunctionTemplate > & GetMultiLineStringTemplate()
It returns a reference to the persistent template of a MultiLineString object.
::v8::Handle<::v8::Value > Geometry_Is3D(const ::v8::Arguments &args)
static::v8::Persistent<::v8::FunctionTemplate > sg_geometry_template
virtual bool crosses(const Geometry *const rhs) const _NOEXCEPT_OP(false)
It returns true if the geometry object spatially crosses rhs geometry.
::v8::Handle<::v8::Value > Geometry_ComputeMBR(const ::v8::Arguments &args)
It is a collection of other geometric objects.
virtual void transform(int srid) _NOEXCEPT_OP(false)=0
It converts the coordinate values of the geometry to the new spatial reference system.
char * Binary2Hex(const char *s, std::size_t size)
Each char from the array of characters in binary format is converted into a pair of hex characters...
Definition: HexUtils.h:602
::v8::Handle<::v8::Value > Geometry_GetDimension(const ::v8::Arguments &args)
::v8::Persistent<::v8::FunctionTemplate > & GetGeometryCollectionTemplate()
It returns a reference to the persistent template of a GeometryCollection object. ...
int getCoordinateDimension() const _NOEXCEPT_OP(true)
It returns the number of measurements or axes needed to describe a position in a coordinate system...
std::string ToString(const XMLCh *const value)
It converts the XML string to a standard C++ string.
::v8::Handle<::v8::Value > Geometry_IsValid(const ::v8::Arguments &args)
virtual Geometry * convexHull() const _NOEXCEPT_OP(false)
This method calculates the Convex Hull of a geometry.
virtual bool coveredBy(const Geometry *const rhs) const _NOEXCEPT_OP(false)
It returns true if this geometry object is spatially covered by rhs geometry.
virtual bool equals(const Geometry *const rhs, const bool exact=false) const _NOEXCEPT_OP(false)
It returns true if the geometry object is spatially equal to rhs geometry.
virtual bool covers(const Geometry *const rhs) const _NOEXCEPT_OP(false)
It returns true if this geometry object spatially covers the rhs geometry.
void getWkb(char *wkb, te::common::MachineByteOrder byteOrder) const _NOEXCEPT_OP(false)
It serializes the geometry to a WKB representation into the specified buffer.
::v8::Handle<::v8::Value > Geometry_Equals(const ::v8::Arguments &args)
virtual const std::string & getGeometryType() const _NOEXCEPT_OP(true)=0
It returns the name of the geometry subclass.