MODULE = Geo::Geos PACKAGE = Geo::Geos::Geometry PROTOTYPES: DISABLE int Geometry::getSRID() void Geometry::setSRID(int newSRID) bool Geometry::isEmpty() bool Geometry::isSimple() bool Geometry::isRectangle() bool Geometry::isValid() size_t Geometry::getNumPoints() int Geometry::getDimension() int Geometry::getCoordinateDimension() int Geometry::getBoundaryDimension() int Geometry::getNumGeometries() Sv Geometry::reverse() { RETVAL = Helper::uplift(THIS->reverse()); } Sv Geometry::getGeometryN(size_t n) { auto g = THIS->getGeometryN(n); if (g) RETVAL = Helper::uplift(g->clone()); else XSRETURN_UNDEF; } Coordinate* Geometry::getCoordinate() { // avoid mem-leak due to https://trac.osgeo.org/geos/ticket/918 if (THIS->isEmpty()) XSRETURN_UNDEF; auto c = THIS->getCoordinate(); if (c) RETVAL = new Coordinate(*c); else XSRETURN_UNDEF; } std::string Geometry::getGeometryType() int Geometry::getGeometryTypeId() std::string Geometry::toString (...) std::string Geometry::toText() bool Geometry::equalsExact(Geometry& other, double tolerance = 0) { RETVAL = THIS->equalsExact(&other, tolerance); } bool Geometry::equals(Geometry& other) { RETVAL = THIS->equals(&other); } int Geometry::compareTo(Geometry& other) { RETVAL = THIS->compareTo(&other); } Sv Geometry::getBoundary() { RETVAL = Helper::uplift(THIS->getBoundary()); } double Geometry::getArea() double Geometry::getLength() double Geometry::distance(Geometry& g) { RETVAL = THIS->distance(&g); } bool Geometry::isWithinDistance(Geometry& g, double distance) { RETVAL = THIS->isWithinDistance(&g, distance); } Point* Geometry::getCentroid() { RETVAL = THIS->getCentroid(); } Point* Geometry::getInteriorPoint() { RETVAL = THIS->getInteriorPoint(); } Sv Geometry::symDifference(Geometry& other) { RETVAL = Helper::uplift(THIS->symDifference(&other)); } Sv Geometry::difference(Geometry& other) { RETVAL = Helper::uplift(THIS->difference(&other)); } Sv Geometry::Union(Geometry& other) { RETVAL = Helper::uplift(THIS->Union(&other)); } Sv Geometry::intersection(Geometry& other) { RETVAL = Helper::uplift(THIS->intersection(&other)); } Sv Geometry::convexHull() { RETVAL = Helper::uplift(THIS->convexHull()); } Sv Geometry::buffer(double distance, SV* arg2 = NULL, SV* arg3 = NULL) { Geometry* r; if (!arg2) r = THIS->buffer(distance); else { int quadrantSegments = SvIV(arg2); if (arg3) { int endCapStyle = SvIV(arg3); r = THIS->buffer(distance, quadrantSegments, endCapStyle); } else { r = THIS->buffer(distance, quadrantSegments); } } RETVAL = Helper::uplift(r); } bool Geometry::coveredBy(Geometry& other) { RETVAL = THIS->coveredBy(&other); } bool Geometry::covers(Geometry& other) { RETVAL = THIS->covers(&other); } bool Geometry::overlaps(Geometry& other) { RETVAL = THIS->overlaps(&other); } bool Geometry::contains(Geometry& other) { RETVAL = THIS->contains(&other); } bool Geometry::within(Geometry& other) { RETVAL = THIS->within(&other); } bool Geometry::crosses(Geometry& other) { RETVAL = THIS->crosses(&other); } bool Geometry::intersects(Geometry& other) { RETVAL = THIS->intersects(&other); } bool Geometry::touches(Geometry& other) { RETVAL = THIS->touches(&other); } bool Geometry::disjoint(Geometry& other) { RETVAL = THIS->disjoint(&other); } Sv Geometry::getEnvelope() { RETVAL = Helper::uplift(THIS->getEnvelope()); } Sv Geometry::clone() { RETVAL = Helper::uplift(THIS->clone()); } PrecisionModel* Geometry::getPrecisionModel() { auto pm = THIS->getPrecisionModel(); RETVAL = new PrecisionModel(*pm); } Array Geometry::getCoordinates() { auto seq = std::unique_ptr(THIS->getCoordinates()); RETVAL = Helper::convert_copy(seq.get()); } Sv Geometry::relate(Geometry& other, SV* arg = NULL) { if (!arg) RETVAL = xs::out(THIS->relate(&other)); else { std::string intersectionPattern { SvPV_nolen(arg) }; RETVAL = Simple(THIS->relate(&other, intersectionPattern)); } } void Geometry::normalize() BOOT { auto this_stash = Stash(__PACKAGE__); xs::exp::create_constants(this_stash, { {"TYPE_GEOS_POINT", GeometryTypeId::GEOS_POINT}, {"TYPE_GEOS_LINESTRING", GeometryTypeId::GEOS_LINESTRING}, {"TYPE_GEOS_LINEARRING", GeometryTypeId::GEOS_LINEARRING}, {"TYPE_GEOS_POLYGON", GeometryTypeId::GEOS_POLYGON}, {"TYPE_GEOS_MULTIPOINT", GeometryTypeId::GEOS_MULTIPOINT}, {"TYPE_GEOS_MULTILINESTRING", GeometryTypeId::GEOS_MULTILINESTRING}, {"TYPE_GEOS_MULTIPOLYGON", GeometryTypeId::GEOS_MULTIPOLYGON}, {"TYPE_GEOS_GEOMETRYCOLLECTION", GeometryTypeId::GEOS_GEOMETRYCOLLECTION}, {"TYPE_CAP_ROUND", geos::operation::buffer::BufferParameters::CAP_ROUND}, {"TYPE_CAP_FLAT", geos::operation::buffer::BufferParameters::CAP_FLAT}, {"TYPE_CAP_SQUARE", geos::operation::buffer::BufferParameters::CAP_SQUARE} }); xs::exp::autoexport(this_stash); Stash("Geo::Geos::GeometryCollection").inherit(__PACKAGE__); Stash("Geo::Geos::Puntal", GV_ADD).mark_as_loaded("Geo::Geos"); Stash("Geo::Geos::Puntal").inherit(__PACKAGE__); Stash("Geo::Geos::Lineal", GV_ADD).mark_as_loaded("Geo::Geos"); Stash("Geo::Geos::Lineal").inherit(__PACKAGE__); Stash("Geo::Geos::Polygonal", GV_ADD).mark_as_loaded("Geo::Geos"); Stash("Geo::Geos::Polygonal").inherit(__PACKAGE__); } int CLONE_SKIP (...) { PERL_UNUSED_VAR(items); RETVAL = 1; } Sv Geometry::HOOK_CLONE () { RETVAL = Helper::uplift(THIS->clone()); }