Module: RGeo::Geos
- Defined in:
- lib/rgeo/geos.rb,
lib/rgeo/geos/utils.rb,
lib/rgeo/geos/interface.rb,
lib/rgeo/geos/zm_factory.rb,
lib/rgeo/geos/ffi_factory.rb,
lib/rgeo/geos/capi_factory.rb,
lib/rgeo/geos/zm_feature_classes.rb,
lib/rgeo/geos/zm_feature_methods.rb,
lib/rgeo/geos/ffi_feature_classes.rb,
lib/rgeo/geos/ffi_feature_methods.rb,
lib/rgeo/geos/capi_feature_classes.rb,
ext/geos_c_impl/globals.c
Defined Under Namespace
Modules: Analysis, CAPIGeometryCollectionMethods, CAPIGeometryMethods, CAPILineMethods, CAPILineStringMethods, CAPILinearRingMethods, CAPIMultiLineStringMethods, CAPIMultiPointMethods, CAPIMultiPolygonMethods, CAPIPolygonMethods, FFIGeometryCollectionMethods, FFIGeometryMethods, FFILineMethods, FFILineStringMethods, FFILinearRingMethods, FFIMultiLineStringMethods, FFIMultiPointMethods, FFIMultiPolygonMethods, FFIPointMethods, FFIPolygonMethods, Utils, ZMGeometryCollectionMethods, ZMGeometryMethods, ZMLineStringMethods, ZMMultiLineStringMethods, ZMMultiPolygonMethods, ZMPointMethods, ZMPolygonMethods Classes: CAPIFactory, CAPIGeometryCollectionImpl, CAPIGeometryImpl, CAPILineImpl, CAPILineStringImpl, CAPILinearRingImpl, CAPIMultiLineStringImpl, CAPIMultiPointImpl, CAPIMultiPolygonImpl, CAPIPointImpl, CAPIPolygonImpl, FFIFactory, FFIGeometryCollectionImpl, FFIGeometryImpl, FFILineImpl, FFILineStringImpl, FFILinearRingImpl, FFIMultiLineStringImpl, FFIMultiPointImpl, FFIMultiPolygonImpl, FFIPointImpl, FFIPolygonImpl, ZMFactory, ZMGeometryCollectionImpl, ZMGeometryImpl, ZMLineImpl, ZMLineStringImpl, ZMLinearRingImpl, ZMMultiLineStringImpl, ZMMultiPointImpl, ZMMultiPolygonImpl, ZMPointImpl, ZMPolygonImpl
Constant Summary collapse
- CAPI_SUPPORTED =
continue
RGeo::Geos.const_defined?(:CAPIGeometryMethods)
- CAP_ROUND =
1
- CAP_FLAT =
2
- CAP_SQUARE =
3
- JOIN_ROUND =
1
- JOIN_MITRE =
2
- JOIN_BEVEL =
3
Class Attribute Summary collapse
-
.preferred_native_interface ⇒ Object
The preferred native interface.
Class Method Summary collapse
-
.capi_geos?(object) ⇒ Boolean
Returns true if the given feature is a CAPI GEOS feature, or if the given factory is a CAPI GEOS factory.
-
.capi_supported? ⇒ Boolean
Returns true if the CAPI GEOS implementation is supported.
-
.factory(opts = {}) ⇒ Object
Returns a factory for the GEOS implementation.
-
.factory_generator(defaults = {}) ⇒ Object
Returns a Feature::FactoryGenerator that creates Geos-backed factories.
-
.ffi_geos?(object) ⇒ Boolean
Returns true if the given feature is an FFI GEOS feature, or if the given factory is an FFI GEOS factory.
-
.ffi_supported? ⇒ Boolean
Returns true if the FFI GEOS implementation is supported.
-
.geos?(object) ⇒ Boolean
Returns true if the given feature is a GEOS feature, or if the given factory is a GEOS factory.
- .is_capi_geos?(object) ⇒ Boolean
- .is_ffi_geos?(object) ⇒ Boolean
- .is_geos?(object) ⇒ Boolean
-
.supported? ⇒ Boolean
Returns true if any GEOS implementation is supported.
-
.version ⇒ Object
Returns the GEOS library version as a string of the format “x.y.z”.
Class Attribute Details
.preferred_native_interface ⇒ Object
The preferred native interface. This is the native interface used by default when a factory is created. Supported values are :capi
and :ffi
.
This is set automatically when RGeo loads, to :capi
if the CAPI interface is available, otheriwse to :ffi
if FFI is available, otherwise to nil if no GEOS interface is available. You can override this setting if you want to prefer FFI over CAPI.
101 102 103 |
# File 'lib/rgeo/geos/interface.rb', line 101 def preferred_native_interface @preferred_native_interface end |
Class Method Details
.capi_geos?(object) ⇒ Boolean
Returns true if the given feature is a CAPI GEOS feature, or if the given factory is a CAPI GEOS factory.
34 35 36 37 38 39 |
# File 'lib/rgeo/geos/interface.rb', line 34 def capi_geos?(object) CAPI_SUPPORTED && (CAPIFactory === object || CAPIGeometryMethods === object || ZMFactory === object && CAPIFactory === object.z_factory || ZMGeometryMethods === object && CAPIGeometryMethods === object.z_geometry) end |
.capi_supported? ⇒ Boolean
Returns true if the CAPI GEOS implementation is supported.
14 15 16 |
# File 'lib/rgeo/geos/interface.rb', line 14 def capi_supported? CAPI_SUPPORTED end |
.factory(opts = {}) ⇒ Object
Returns a factory for the GEOS implementation. Returns nil if the GEOS implementation is not supported.
Note that GEOS does not natively support 4-dimensional data (i.e. both z and m values). However, RGeo's GEOS wrapper does provide a 4-dimensional factory that utilizes an extra native GEOS object to handle the extra coordinate. Hence, a factory configured with both Z and M support will work, but will be slower than a 2-dimensional or 3-dimensional factory.
Options include:
:native_interface
-
Specifies which native interface to use. Possible values are
:capi
and:ffi
. The default is the value of the preferred_native_interface. :uses_lenient_multi_polygon_assertions
-
If set to true, assertion checking on MultiPolygon is disabled. This may speed up creation of MultiPolygon objects, at the expense of not doing the proper checking for OGC MultiPolygon compliance. See RGeo::Feature::MultiPolygon for details on the MultiPolygon assertions. Default is false. Also called
:lenient_multi_polygon_assertions
. :buffer_resolution
-
The resolution of buffers around geometries created by this factory. This controls the number of line segments used to approximate curves. The default is 1, which causes, for example, the buffer around a point to be approximated by a 4-sided polygon. A resolution of 2 would cause that buffer to be approximated by an 8-sided polygon. The exact behavior for different kinds of buffers is defined by GEOS.
:srid
-
Set the SRID returned by geometries created by this factory. Default is 0.
:proj4
-
The coordinate system in Proj4 format, either as a CoordSys::Proj4 object or as a string or hash representing the proj4 format. Optional.
:coord_sys
-
The coordinate system in OGC form, either as a subclass of CoordSys::CS::CoordinateSystem, or as a string in WKT format. Optional.
:srs_database
-
Optional. If provided, the object should respond to #get and #clear_cache. If both this and an SRID are provided, they are used to look up the proj4 and coord_sys objects from a spatial reference system database.
:has_z_coordinate
-
Support
z_coordinate
. Default is false. :has_m_coordinate
-
Support
m_coordinate
. Default is false. :wkt_parser
-
Configure the parser for WKT. You may either pass a hash of configuration parameters for WKRep::WKTParser.new, or the special value
:geos
, indicating to use the native GEOS parser. Default is the empty hash, indicating the default configuration for WKRep::WKTParser. Note that the special:geos
value is not supported for ZM factories, since GEOS currently can't handle ZM natively. :wkb_parser
-
Configure the parser for WKB. You may either pass a hash of configuration parameters for WKRep::WKBParser.new, or the special value
:geos
, indicating to use the native GEOS parser. Default is the empty hash, indicating the default configuration for WKRep::WKBParser. Note that the special:geos
value is not supported for ZM factories, since GEOS currently can't handle ZM natively. :wkt_generator
-
Configure the generator for WKT. You may either pass a hash of configuration parameters for WKRep::WKTGenerator.new, or the special value
:geos
, indicating to use the native GEOS generator. Default is{:convert_case => :upper}
. Note that the special:geos
value is not supported for ZM factories, since GEOS currently can't handle ZM natively. :wkb_generator
-
Configure the generator for WKB. You may either pass a hash of configuration parameters for WKRep::WKBGenerator.new, or the special value
:geos
, indicating to use the native GEOS generator. Default is the empty hash, indicating the default configuration for WKRep::WKBGenerator. Note that the special:geos
value is not supported for ZM factories, since GEOS currently can't handle ZM natively. :auto_prepare
-
Request an auto-prepare strategy. Supported values are
:simple
and:disabled
. The former (which is the default) generates a prepared geometry the second time an operation that would benefit from it is called. The latter never automatically generates a prepared geometry (unless you generate one explicitly using theprepare!
method).
192 193 194 195 196 197 198 199 200 201 202 203 |
# File 'lib/rgeo/geos/interface.rb', line 192 def factory(opts = {}) if supported? native_interface = opts[:native_interface] || Geos.preferred_native_interface if opts[:has_z_coordinate] && opts[:has_m_coordinate] ZMFactory.new(opts) elsif native_interface == :ffi FFIFactory.new(opts) else CAPIFactory.create(opts) end end end |
.factory_generator(defaults = {}) ⇒ Object
Returns a Feature::FactoryGenerator that creates Geos-backed factories. The given options are used as the default options.
A common case for this is to provide the :srs_database
as a default. Then, the factory generator need only be passed an SRID and it will automatically fetch the appropriate Proj4 and CoordSys objects.
213 214 215 |
# File 'lib/rgeo/geos/interface.rb', line 213 def factory_generator(defaults = {}) proc { |c| factory(defaults.merge(c)) } end |
.ffi_geos?(object) ⇒ Boolean
Returns true if the given feature is an FFI GEOS feature, or if the given factory is an FFI GEOS factory.
49 50 51 52 53 54 |
# File 'lib/rgeo/geos/interface.rb', line 49 def ffi_geos?(object) FFI_SUPPORTED && (FFIFactory === object || FFIGeometryMethods === object || ZMFactory === object && FFIFactory === object.z_factory || ZMGeometryMethods === object && FFIGeometryMethods === object.z_geometry) end |
.ffi_supported? ⇒ Boolean
Returns true if the FFI GEOS implementation is supported.
20 21 22 |
# File 'lib/rgeo/geos/interface.rb', line 20 def ffi_supported? FFI_SUPPORTED end |
.geos?(object) ⇒ Boolean
Returns true if the given feature is a GEOS feature, or if the given factory is a GEOS factory. Does not distinguish between CAPI and FFI.
64 65 66 67 68 |
# File 'lib/rgeo/geos/interface.rb', line 64 def geos?(object) CAPI_SUPPORTED && (CAPIFactory === object || CAPIGeometryMethods === object) || FFI_SUPPORTED && (FFIFactory === object || FFIGeometryMethods === object) || ZMFactory === object || ZMGeometryMethods === object end |
.is_capi_geos?(object) ⇒ Boolean
41 42 43 44 |
# File 'lib/rgeo/geos/interface.rb', line 41 def is_capi_geos?(object) warn "The is_capi_geos? method is deprecated, please use the capi_geos? counterpart, will be removed in v3" unless ENV["RGEO_SILENCE_DEPRECATION"] capi_geos?(object) end |
.is_ffi_geos?(object) ⇒ Boolean
56 57 58 59 |
# File 'lib/rgeo/geos/interface.rb', line 56 def is_ffi_geos?(object) warn "The is_ffi_geos? method is deprecated, please use the ffi_geos? counterpart, will be removed in v3" unless ENV["RGEO_SILENCE_DEPRECATION"] ffi_geos?(object) end |
.is_geos?(object) ⇒ Boolean
70 71 72 73 |
# File 'lib/rgeo/geos/interface.rb', line 70 def is_geos?(object) warn "The is_geos? method is deprecated, please use the geos? counterpart, will be removed in v3" unless ENV["RGEO_SILENCE_DEPRECATION"] geos?(object) end |
.supported? ⇒ Boolean
Returns true if any GEOS implementation is supported. If this returns false, GEOS features are not available at all.
27 28 29 |
# File 'lib/rgeo/geos/interface.rb', line 27 def supported? FFI_SUPPORTED || CAPI_SUPPORTED end |
.version ⇒ Object
Returns the GEOS library version as a string of the format “x.y.z”. Returns nil if GEOS is not available.
78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/rgeo/geos/interface.rb', line 78 def version unless defined?(@version) if RGeo::Geos::CAPI_SUPPORTED @version = RGeo::Geos::CAPIFactory._geos_version.freeze elsif RGeo::Geos::FFI_SUPPORTED @version = ::Geos::FFIGeos.GEOSversion.sub(/-CAPI-.*$/, "").freeze else @version = nil end end @version end |