static VALUE method_geometry_overlaps(VALUE self, VALUE rhs) { VALUE result; RGeo_GeometryData* self_data; const GEOSGeometry* self_geom; const GEOSGeometry* rhs_geom; char val; #ifdef RGEO_GEOS_SUPPORTS_PREPARED2 const GEOSPreparedGeometry* prep; #endif result = Qnil; self_data = RGEO_GEOMETRY_DATA_PTR(self); self_geom = self_data->geom; if (self_geom) { rhs_geom = rgeo_convert_to_geos_geometry(self_data->factory, rhs, Qnil); if (rhs_geom) { #ifdef RGEO_GEOS_SUPPORTS_PREPARED2 prep = rgeo_request_prepared_geometry(self_data); if (prep) val = GEOSPreparedOverlaps_r(self_data->geos_context, prep, rhs_geom); else #endif val = GEOSOverlaps_r(self_data->geos_context, self_geom, rhs_geom); if (val == 0) { result = Qfalse; } else if (val == 1) { result = Qtrue; } } } return result; }
static VALUE method_geometry_overlaps(VALUE self, VALUE rhs) { VALUE result = Qnil; RGeo_GeometryData* self_data = RGEO_GEOMETRY_DATA_PTR(self); const GEOSGeometry* self_geom = self_data->geom; if (self_geom) { const GEOSGeometry* rhs_geom = rgeo_convert_to_geos_geometry(self_data->factory, rhs, Qnil); if (rhs_geom) { char val = GEOSOverlaps_r(self_data->geos_context, self_geom, rhs_geom); if (val == 0) { result = Qfalse; } else if (val == 1) { result = Qtrue; } } } return result; }
bool Polygon::overlaps(const Polygon& p) const { return (bool) GEOSOverlaps_r(m_geoserr.ctx(), m_geom.get(), p.m_geom.get()); }