Module: OGR::GeometryMixins::Extensions

Included in:
OGR::Geometry
Defined in:
lib/ogr/extensions/geometry/extensions.rb

Instance Method Summary collapse

Instance Method Details

#!=(other) ⇒ Object



43
44
45
# File 'lib/ogr/extensions/geometry/extensions.rb', line 43

def !=(other)
  !equals?(other)
end

#collection?Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/ogr/extensions/geometry/extensions.rb', line 52

def collection?
  false
end

#container?Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/ogr/extensions/geometry/extensions.rb', line 29

def container?
  self.class.ancestors.include? OGR::GeometryTypes::Container
end

#curve?Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/ogr/extensions/geometry/extensions.rb', line 34

def curve?
  self.class.ancestors.include? OGR::GeometryTypes::Curve
end

#invalid?Boolean

Returns:

  • (Boolean)


48
49
50
# File 'lib/ogr/extensions/geometry/extensions.rb', line 48

def invalid?
  !valid?
end

#surface?Boolean

Returns:

  • (Boolean)


39
40
41
# File 'lib/ogr/extensions/geometry/extensions.rb', line 39

def surface?
  self.class.ancestors.include? OGR::GeometryTypes::Surface
end

#to_vector(file_name, driver, layer_name: "vectorized_geometry", spatial_reference: nil) ⇒ Object

Raises:



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/ogr/extensions/geometry/extensions.rb', line 56

def to_vector(file_name, driver, layer_name: "vectorized_geometry", spatial_reference: nil)
  driver = OGR::Driver.by_name(driver)

  data_source = driver.create_data_source(file_name)
  log "Creating layer #{layer_name}, type: #{type}"
  layer = data_source.create_layer(layer_name, geometry_type: type,
                                               spatial_reference: spatial_reference)

  # field = FieldDefinition.new('Name', :OFTString)
  # field.width = 32

  raise OGR::InvalidLayer, "Unable to create layer '#{layer_name}'." unless layer

  feature = layer.create_feature(layer_name)
  feature.geometry = self

  data_source
end

#utm_zoneInteger

Returns The number of the UTM zone this geometry belongs to.

Returns:

  • (Integer)

    The number of the UTM zone this geometry belongs to.



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/ogr/extensions/geometry/extensions.rb', line 9

def utm_zone
  return unless spatial_reference

  self_as4326 =
    if spatial_reference.authority_code == "4326"
      self
    else
      # NOTE: #clone here has overridden Ruby's clone and calls OGR_G_Clone;
      # it's important to do this and
      clone.tap { |as4326| as4326.transform_to!(OGR::SpatialReference.new.import_from_epsg(4326)) }
    end

  self_as4326 = self_as4326.buffer(0) unless valid?

  return unless self_as4326.point_on_surface.x

  ((self_as4326.point_on_surface.x + 180) / 6.to_f).floor + 1
end