Module: RGeo::Geos::FFIGeometryCollectionMethods
- Includes:
- Enumerable
- Included in:
- FFIGeometryCollectionImpl, FFIMultiLineStringImpl, FFIMultiPointImpl, FFIMultiPolygonImpl
- Defined in:
- lib/rgeo/geos/ffi_feature_methods.rb
Overview
:nodoc:
Instance Method Summary collapse
- #[](n) ⇒ Object
- #each ⇒ Object
- #geometry_n(n) ⇒ Object
- #geometry_type ⇒ Object
- #hash ⇒ Object
- #num_geometries ⇒ Object (also: #size)
- #rep_equals?(rhs) ⇒ Boolean
Instance Method Details
#[](n) ⇒ Object
525 526 527 528 529 530 531 |
# File 'lib/rgeo/geos/ffi_feature_methods.rb', line 525 def [](n) n += @fg_geom.num_geometries if n < 0 if n >= 0 && n < @fg_geom.num_geometries @factory.wrap_fg_geom(@fg_geom.get_geometry_n(n), @_klasses ? @_klasses[n] : nil) end end |
#each ⇒ Object
542 543 544 545 546 547 548 549 550 551 552 |
# File 'lib/rgeo/geos/ffi_feature_methods.rb', line 542 def each if block_given? @fg_geom.num_geometries.times do |n| yield @factory.wrap_fg_geom(@fg_geom.get_geometry_n(n), @_klasses ? @_klasses[n] : nil) end self else enum_for end end |
#geometry_n(n) ⇒ Object
518 519 520 521 522 523 |
# File 'lib/rgeo/geos/ffi_feature_methods.rb', line 518 def geometry_n(n) if n >= 0 && n < @fg_geom.num_geometries @factory.wrap_fg_geom(@fg_geom.get_geometry_n(n), @_klasses ? @_klasses[n] : nil) end end |
#geometry_type ⇒ Object
496 497 498 |
# File 'lib/rgeo/geos/ffi_feature_methods.rb', line 496 def geometry_type Feature::GeometryCollection end |
#hash ⇒ Object
533 534 535 536 537 538 539 540 |
# File 'lib/rgeo/geos/ffi_feature_methods.rb', line 533 def hash @hash ||= begin hash = [@factory, geometry_type].hash (0...num_geometries).inject(hash) do |h, i| (1_664_525 * h + geometry_n(i).hash).hash end end end |
#num_geometries ⇒ Object Also known as: size
513 514 515 |
# File 'lib/rgeo/geos/ffi_feature_methods.rb', line 513 def num_geometries @fg_geom.num_geometries end |
#rep_equals?(rhs) ⇒ Boolean
500 501 502 503 504 505 506 507 508 509 510 511 |
# File 'lib/rgeo/geos/ffi_feature_methods.rb', line 500 def rep_equals?(rhs) if rhs.class == self.class && rhs.factory.eql?(@factory) size = @fg_geom.num_geometries if size == rhs.num_geometries size.times do |n| return false unless geometry_n(n).rep_equals?(rhs.geometry_n(n)) end return true end end false end |