nofxx-georuby 1.6.2 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.txt +20 -20
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/geo_ruby/gpx4r/gpx.rb +1 -1
- data/lib/geo_ruby/shp4r/dbf.rb +5 -1
- data/lib/geo_ruby/simple_features/envelope.rb +3 -3
- data/lib/geo_ruby/simple_features/ewkb_parser.rb +1 -1
- data/lib/geo_ruby/simple_features/ewkt_parser.rb +1 -1
- data/lib/geo_ruby/simple_features/geometry.rb +2 -8
- data/lib/geo_ruby/simple_features/geometry_collection.rb +2 -2
- data/lib/geo_ruby/simple_features/geometry_factory.rb +1 -1
- data/lib/geo_ruby/simple_features/line_string.rb +3 -3
- data/lib/geo_ruby/simple_features/linear_ring.rb +1 -1
- data/lib/geo_ruby/simple_features/multi_line_string.rb +15 -3
- data/lib/geo_ruby/simple_features/multi_point.rb +8 -3
- data/lib/geo_ruby/simple_features/multi_polygon.rb +20 -5
- data/lib/geo_ruby/simple_features/point.rb +8 -8
- data/lib/geo_ruby/simple_features/polygon.rb +14 -7
- data/{georuby.gemspec → nofxx-georuby.gemspec} +20 -19
- data/spec/geo_ruby/gpx4r/gpx_spec.rb +9 -8
- data/spec/geo_ruby/shp4r/shp_spec.rb +3 -3
- data/spec/geo_ruby/simple_features/multi_line_string_spec.rb +21 -2
- data/spec/geo_ruby/simple_features/multi_point_spec.rb +7 -1
- data/spec/geo_ruby/simple_features/multi_polygon_spec.rb +17 -2
- metadata +18 -17
    
        data/README.txt
    CHANGED
    
    | @@ -35,36 +35,36 @@ Georuby has support for reading ESRI shapefiles (http://www.esri.com/library/whi | |
| 35 35 |  | 
| 36 36 | 
             
            Here is an example of Shapefile reading, that goes through all the geometries in a file and disaply the values of the attributes :
         | 
| 37 37 |  | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
                            end
         | 
| 38 | 
            +
                  require 'geo_ruby/shp'
         | 
| 39 | 
            +
            																	 
         | 
| 40 | 
            +
                  ShpFile.open(shpfile) do |shp|
         | 
| 41 | 
            +
                    shp.each do |shape|
         | 
| 42 | 
            +
                      geom = shape.geometry #a GeoRuby SimpleFeature
         | 
| 43 | 
            +
                      att_data = shape.data #a Hash
         | 
| 44 | 
            +
                      shp.fields.each do |field|
         | 
| 45 | 
            +
                        puts att_data[field.name]
         | 
| 46 | 
            +
                      end
         | 
| 48 47 | 
             
                    end
         | 
| 48 | 
            +
                  end
         | 
| 49 49 |  | 
| 50 50 | 
             
            Support for ESRI shapefile creation and modification has been added as well. New shapefiles can be created given a geometry type and specifications for the DBF fields. Data can be added and removed from an existing shapefile. An update operation is also provided for convenience : it just performs a 'delete' and an 'add', which means the index of the modified record will change. Note that once a shapefile has been created, GeoRuby does not allow the modification of the schema (it will probably be done in a subsequent version).
         | 
| 51 51 |  | 
| 52 52 | 
             
            Here is an example of how to create a new Shapefile with 2 fields :
         | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 53 | 
            +
            																	 
         | 
| 54 | 
            +
                  shpfile = ShpFile.create('hello.shp',ShpType::POINT,[Dbf::Field.new("Hoyoyo","C",10),Dbf::Field.new("Boyoul","N",10,0)])
         | 
| 55 55 |  | 
| 56 56 | 
             
            The file is then open for reading and writing.
         | 
| 57 57 |  | 
| 58 58 | 
             
            Here is an example of how to write to a shapefile (created or not with GeoRuby) :
         | 
| 59 59 |  | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 60 | 
            +
                  shpfile = ShpFile.open('places.shp')
         | 
| 61 | 
            +
                  shpfile.transaction do |tr|
         | 
| 62 | 
            +
                    tr.add(ShpRecord.new(Point.from_x_y(123.4,123.4),'Hoyoyo' => "AEZ",'Bouyoul' => 45))
         | 
| 63 | 
            +
                    tr.update(4,ShpRecord.new(Point.from_x_y(-16.67,16.41),'Hoyoyo' => "EatMe",'Bouyoul' => 42))
         | 
| 64 | 
            +
                    tr.delete(1)
         | 
| 65 | 
            +
                  end
         | 
| 66 | 
            +
                  shpfile.close
         | 
| 67 | 
            +
            																	 
         | 
| 68 68 | 
             
            Note the transaction is just there so the operations on the files can be buffered. Nothing happens on the original files until the block has finished executing. Calling <tt>tr.rollback</tt> at anytime during the execution will prevent the modifications.
         | 
| 69 69 |  | 
| 70 70 | 
             
            Also currently, error reporting is minimal and it has not been tested that thoroughly so caveat emptor and backup before performing any destructive operation.
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -4,7 +4,7 @@ require 'rake' | |
| 4 4 | 
             
            begin
         | 
| 5 5 | 
             
              require 'jeweler'
         | 
| 6 6 | 
             
              Jeweler::Tasks.new do |gem|
         | 
| 7 | 
            -
                gem.name = "georuby"
         | 
| 7 | 
            +
                gem.name = "nofxx-georuby"
         | 
| 8 8 | 
             
                gem.summary = "Ruby data holder for OGC Simple Features"
         | 
| 9 9 | 
             
                gem.description = "GeoRuby provides geometric data types from the OGC 'Simple Features' specification."
         | 
| 10 10 | 
             
                gem.email = "x@nofxx.com"
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            1. | 
| 1 | 
            +
            1.7.1
         | 
    
        data/lib/geo_ruby/gpx4r/gpx.rb
    CHANGED
    
    | @@ -75,7 +75,7 @@ module GeoRuby | |
| 75 75 | 
             
                  # If the GPX isn't closed, a line from the first
         | 
| 76 76 | 
             
                  # to the last point will be created to close it.
         | 
| 77 77 | 
             
                  def as_polygon
         | 
| 78 | 
            -
                    Polygon.from_points([@points[0] == @points[-1] ?  @points : @points | 
| 78 | 
            +
                    Polygon.from_points([@points[0] == @points[-1] ?  @points : @points.push(@points[0].clone)])
         | 
| 79 79 | 
             
                  end
         | 
| 80 80 |  | 
| 81 81 | 
             
                  # Return GPX Envelope
         | 
    
        data/lib/geo_ruby/shp4r/dbf.rb
    CHANGED
    
    | @@ -1,7 +1,11 @@ | |
| 1 1 | 
             
            # Uses the dbf lib, Copyright 2006 Keith Morrison (http://infused.org)
         | 
| 2 2 | 
             
            # Modified to work as external gem now
         | 
| 3 3 | 
             
            require 'rubygems'
         | 
| 4 | 
            -
             | 
| 4 | 
            +
            begin
         | 
| 5 | 
            +
              require 'dbf'
         | 
| 6 | 
            +
            rescue LoadError
         | 
| 7 | 
            +
              puts "Unable to find gem 'dbf'. Please install."
         | 
| 8 | 
            +
            end
         | 
| 5 9 |  | 
| 6 10 | 
             
            module GeoRuby
         | 
| 7 11 | 
             
              module Shp4r
         | 
| @@ -7,7 +7,7 @@ module GeoRuby | |
| 7 7 | 
             
                  attr_accessor :srid, :with_z, :zoom
         | 
| 8 8 |  | 
| 9 9 | 
             
                  #Creates a enw Envelope with +lower_corner+ as the first element of the corners array and +upper_corner+ as the second element
         | 
| 10 | 
            -
                  def initialize(srid =  | 
| 10 | 
            +
                  def initialize(srid = DEFAULT_SRID, with_z = false)
         | 
| 11 11 | 
             
                    @srid = srid
         | 
| 12 12 | 
             
                    @with_z = with_z
         | 
| 13 13 | 
             
                  end
         | 
| @@ -148,7 +148,7 @@ module GeoRuby | |
| 148 148 | 
             
                  end
         | 
| 149 149 |  | 
| 150 150 | 
             
                  #Creates a new envelope. Accept an array of 2 points as argument
         | 
| 151 | 
            -
                  def self.from_points(points,srid | 
| 151 | 
            +
                  def self.from_points(points,srid=DEFAULT_SRID,with_z=false)
         | 
| 152 152 | 
             
                    raise "Not an array" unless points.class == Array
         | 
| 153 153 | 
             
                    e = Envelope.new(srid,with_z)
         | 
| 154 154 | 
             
                    e.lower_corner, e.upper_corner = points
         | 
| @@ -156,7 +156,7 @@ module GeoRuby | |
| 156 156 | 
             
                  end
         | 
| 157 157 |  | 
| 158 158 | 
             
                  #Creates a new envelope. Accept a sequence of point coordinates as argument : ((x,y),(x,y))
         | 
| 159 | 
            -
                  def self.from_coordinates(points,srid | 
| 159 | 
            +
                  def self.from_coordinates(points,srid=DEFAULT_SRID,with_z=false)
         | 
| 160 160 | 
             
                    e = Envelope.new(srid,with_z)
         | 
| 161 161 | 
             
                    e.lower_corner, e.upper_corner =  points.collect{|point_coords| Point.from_coordinates(point_coords,srid,with_z)}
         | 
| 162 162 | 
             
                    e
         | 
| @@ -67,7 +67,7 @@ module GeoRuby | |
| 67 67 | 
             
                      @geometry_type = @geometry_type & ~SRID_MASK
         | 
| 68 68 | 
             
                    else
         | 
| 69 69 | 
             
                      #to manage multi geometries : the srid is not present in sub_geometries, therefore we take the srid of the parent ; if it is the root, we take the default srid
         | 
| 70 | 
            -
                      @srid= @srid ||  | 
| 70 | 
            +
                      @srid= @srid || DEFAULT_SRID
         | 
| 71 71 | 
             
                    end
         | 
| 72 72 |  | 
| 73 73 | 
             
                    if @parse_options.has_key? @geometry_type
         | 
| @@ -68,7 +68,7 @@ module GeoRuby | |
| 68 68 |  | 
| 69 69 | 
             
                    else
         | 
| 70 70 | 
             
                      #to manage multi geometries : the srid is not present in sub_geometries, therefore we take the srid of the parent ; if it is the root, we take the default srid
         | 
| 71 | 
            -
                      @srid= @srid ||  | 
| 71 | 
            +
                      @srid= @srid || DEFAULT_SRID
         | 
| 72 72 | 
             
                      geom_type = token
         | 
| 73 73 | 
             
                    end
         | 
| 74 74 |  | 
| @@ -1,14 +1,8 @@ | |
| 1 1 | 
             
            module GeoRuby#:nodoc:
         | 
| 2 2 | 
             
              module SimpleFeatures
         | 
| 3 3 | 
             
                #arbitrary default SRID
         | 
| 4 | 
            -
                 | 
| 4 | 
            +
                DEFAULT_SRID = 4326 unless defined? DEFAULT_SRID
         | 
| 5 5 |  | 
| 6 | 
            -
                def self.default_srid
         | 
| 7 | 
            -
                  @@default_srid
         | 
| 8 | 
            -
                end
         | 
| 9 | 
            -
                def self.srid=(srid)
         | 
| 10 | 
            -
                  @@default_srid = srid
         | 
| 11 | 
            -
                end
         | 
| 12 6 |  | 
| 13 7 | 
             
                #Root of all geometric data classes.
         | 
| 14 8 | 
             
                #Objects of class Geometry should not be instantiated.
         | 
| @@ -22,7 +16,7 @@ module GeoRuby#:nodoc: | |
| 22 16 | 
             
                  attr_accessor :with_m
         | 
| 23 17 | 
             
                  alias :with_m? :with_m
         | 
| 24 18 |  | 
| 25 | 
            -
                  def initialize(srid | 
| 19 | 
            +
                  def initialize(srid=DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 26 20 | 
             
                    @srid=srid
         | 
| 27 21 | 
             
                    @with_z=with_z
         | 
| 28 22 | 
             
                    @with_m=with_m
         | 
| @@ -6,7 +6,7 @@ module GeoRuby | |
| 6 6 | 
             
                class GeometryCollection < Geometry
         | 
| 7 7 | 
             
                  attr_reader :geometries
         | 
| 8 8 |  | 
| 9 | 
            -
                  def initialize(srid =  | 
| 9 | 
            +
                  def initialize(srid = DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 10 10 | 
             
                    super(srid,with_z,with_m)
         | 
| 11 11 | 
             
                    @geometries = []
         | 
| 12 12 | 
             
                  end
         | 
| @@ -126,7 +126,7 @@ module GeoRuby | |
| 126 126 | 
             
                  end
         | 
| 127 127 |  | 
| 128 128 | 
             
                  #creates a new GeometryCollection from an array of geometries
         | 
| 129 | 
            -
                  def self.from_geometries(geometries,srid | 
| 129 | 
            +
                  def self.from_geometries(geometries,srid=DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 130 130 | 
             
                    geometry_collection = new(srid,with_z,with_m)
         | 
| 131 131 | 
             
                    geometry_collection.concat(geometries)
         | 
| 132 132 | 
             
                    geometry_collection
         | 
| @@ -59,7 +59,7 @@ module GeoRuby | |
| 59 59 | 
             
                    xyzm.each_slice(4) {|slice| add_point_x_y_z_m(*slice)}
         | 
| 60 60 | 
             
                  end
         | 
| 61 61 | 
             
                  #begin a geometry of type +geometry_type+
         | 
| 62 | 
            -
                  def begin_geometry(geometry_type,srid | 
| 62 | 
            +
                  def begin_geometry(geometry_type,srid=DEFAULT_SRID)
         | 
| 63 63 | 
             
                    geometry= geometry_type::new(srid)
         | 
| 64 64 | 
             
                    @geometry= geometry if @geometry.nil?
         | 
| 65 65 | 
             
                    @geometry_stack << geometry
         | 
| @@ -7,7 +7,7 @@ module GeoRuby | |
| 7 7 | 
             
                  #the list of points forming the line string
         | 
| 8 8 | 
             
                  attr_reader :points
         | 
| 9 9 |  | 
| 10 | 
            -
                  def initialize(srid=  | 
| 10 | 
            +
                  def initialize(srid= DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 11 11 | 
             
                    super(srid,with_z,with_m)
         | 
| 12 12 | 
             
                    @points=[]
         | 
| 13 13 | 
             
                  end
         | 
| @@ -167,14 +167,14 @@ module GeoRuby | |
| 167 167 | 
             
                  end
         | 
| 168 168 |  | 
| 169 169 | 
             
                  #Creates a new line string. Accept an array of points as argument
         | 
| 170 | 
            -
                  def self.from_points(points,srid | 
| 170 | 
            +
                  def self.from_points(points,srid=DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 171 171 | 
             
                    line_string = new(srid,with_z,with_m)
         | 
| 172 172 | 
             
                    line_string.concat(points)
         | 
| 173 173 | 
             
                    line_string
         | 
| 174 174 | 
             
                  end
         | 
| 175 175 |  | 
| 176 176 | 
             
                  #Creates a new line string. Accept a sequence of points as argument : ((x,y)...(x,y))
         | 
| 177 | 
            -
                  def self.from_coordinates(points,srid | 
| 177 | 
            +
                  def self.from_coordinates(points,srid=DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 178 178 | 
             
                    line_string = new(srid,with_z,with_m)
         | 
| 179 179 | 
             
                    line_string.concat( points.map {|p| Point.from_coordinates(p,srid,with_z,with_m) } )
         | 
| 180 180 | 
             
                    line_string
         | 
| @@ -4,7 +4,7 @@ module GeoRuby | |
| 4 4 | 
             
              module SimpleFeatures
         | 
| 5 5 | 
             
                #Represents a linear ring, which is a closed line string (see LineString). Currently, no check is performed to verify if the linear ring is really closed.
         | 
| 6 6 | 
             
                class LinearRing < LineString
         | 
| 7 | 
            -
                  def initialize(srid=  | 
| 7 | 
            +
                  def initialize(srid= DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 8 8 | 
             
                    super(srid,with_z,with_m)
         | 
| 9 9 | 
             
                  end
         | 
| 10 10 | 
             
                end
         | 
| @@ -1,10 +1,13 @@ | |
| 1 1 | 
             
            require 'geo_ruby/simple_features/geometry_collection'
         | 
| 2 2 |  | 
| 3 3 | 
             
            module GeoRuby
         | 
| 4 | 
            +
             | 
| 4 5 | 
             
              module SimpleFeatures
         | 
| 6 | 
            +
             | 
| 5 7 | 
             
                #Represents a group of line strings (see LineString).
         | 
| 6 8 | 
             
                class MultiLineString < GeometryCollection
         | 
| 7 | 
            -
             | 
| 9 | 
            +
             | 
| 10 | 
            +
                  def initialize(srid = DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 8 11 | 
             
                    super(srid)
         | 
| 9 12 | 
             
                  end
         | 
| 10 13 |  | 
| @@ -12,24 +15,33 @@ module GeoRuby | |
| 12 15 | 
             
                    5
         | 
| 13 16 | 
             
                  end
         | 
| 14 17 |  | 
| 18 | 
            +
                  def points
         | 
| 19 | 
            +
                    geometries.map(&:points).flatten
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
             | 
| 15 22 | 
             
                  #Text representation of a multi line string
         | 
| 16 23 | 
             
                  def text_representation(allow_z=true,allow_m=true) #:nodoc:
         | 
| 17 24 | 
             
                    @geometries.collect{|line_string| "(" + line_string.text_representation(allow_z,allow_m) + ")" }.join(",")
         | 
| 18 25 | 
             
                  end
         | 
| 26 | 
            +
             | 
| 19 27 | 
             
                  #WKT geometry type
         | 
| 20 28 | 
             
                  def text_geometry_type #:nodoc:
         | 
| 21 29 | 
             
                    "MULTILINESTRING"
         | 
| 22 30 | 
             
                  end
         | 
| 23 31 |  | 
| 32 | 
            +
                  def to_line_string(join = true)
         | 
| 33 | 
            +
                    LineString.from_points(points)
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
             | 
| 24 36 | 
             
                  #Creates a new multi line string from an array of line strings
         | 
| 25 | 
            -
                  def self.from_line_strings(line_strings,srid | 
| 37 | 
            +
                  def self.from_line_strings(line_strings,srid=DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 26 38 | 
             
                    multi_line_string = new(srid,with_z,with_m)
         | 
| 27 39 | 
             
                    multi_line_string.concat(line_strings)
         | 
| 28 40 | 
             
                    multi_line_string
         | 
| 29 41 | 
             
                  end
         | 
| 30 42 |  | 
| 31 43 | 
             
                  #Creates a new multi line string from sequences of points : (((x,y)...(x,y)),((x,y)...(x,y)))
         | 
| 32 | 
            -
                  def self.from_coordinates(point_sequences,srid | 
| 44 | 
            +
                  def self.from_coordinates(point_sequences,srid=DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 33 45 | 
             
                    multi_line_string = new(srid,with_z,with_m)
         | 
| 34 46 | 
             
                    multi_line_string.concat(point_sequences.collect {|points| LineString.from_coordinates(points,srid,with_z,with_m) })
         | 
| 35 47 | 
             
                    multi_line_string
         | 
| @@ -5,7 +5,7 @@ module GeoRuby | |
| 5 5 | 
             
                #Represents a group of points (see Point).
         | 
| 6 6 | 
             
                class MultiPoint < GeometryCollection
         | 
| 7 7 |  | 
| 8 | 
            -
                  def initialize(srid=  | 
| 8 | 
            +
                  def initialize(srid= DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 9 9 | 
             
                    super(srid,with_z,with_m)
         | 
| 10 10 | 
             
                  end
         | 
| 11 11 |  | 
| @@ -13,24 +13,29 @@ module GeoRuby | |
| 13 13 | 
             
                    4
         | 
| 14 14 | 
             
                  end
         | 
| 15 15 |  | 
| 16 | 
            +
                  def points
         | 
| 17 | 
            +
                    @geometries
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 16 20 | 
             
                  #Text representation of a MultiPoint
         | 
| 17 21 | 
             
                  def text_representation(allow_z=true,allow_m=true) #:nodoc:
         | 
| 18 22 | 
             
                    "(" + @geometries.collect{|point| point.text_representation(allow_z,allow_m)}.join("),(") + ")"
         | 
| 19 23 | 
             
                  end
         | 
| 24 | 
            +
             | 
| 20 25 | 
             
                  #WKT geoemtry type
         | 
| 21 26 | 
             
                  def text_geometry_type #:nodoc:
         | 
| 22 27 | 
             
                    "MULTIPOINT"
         | 
| 23 28 | 
             
                  end
         | 
| 24 29 |  | 
| 25 30 | 
             
                  #Creates a new multi point from an array of points
         | 
| 26 | 
            -
                  def self.from_points(points,srid=  | 
| 31 | 
            +
                  def self.from_points(points,srid= DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 27 32 | 
             
                    multi_point= new(srid,with_z,with_m)
         | 
| 28 33 | 
             
                    multi_point.concat(points)
         | 
| 29 34 | 
             
                    multi_point
         | 
| 30 35 | 
             
                  end
         | 
| 31 36 |  | 
| 32 37 | 
             
                  #Creates a new multi point from a list of point coordinates : ((x,y)...(x,y))
         | 
| 33 | 
            -
                  def self.from_coordinates(points,srid=  | 
| 38 | 
            +
                  def self.from_coordinates(points,srid= DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 34 39 | 
             
                    multi_point= new(srid,with_z,with_m)
         | 
| 35 40 | 
             
                    multi_point.concat(points.collect {|point| Point.from_coordinates(point,srid,with_z,with_m)})
         | 
| 36 41 | 
             
                    multi_point
         | 
| @@ -1,37 +1,52 @@ | |
| 1 1 | 
             
            require 'geo_ruby/simple_features/geometry_collection'
         | 
| 2 2 |  | 
| 3 3 | 
             
            module GeoRuby
         | 
| 4 | 
            +
             | 
| 4 5 | 
             
              module SimpleFeatures
         | 
| 6 | 
            +
             | 
| 5 7 | 
             
                #Represents a group of polygons (see Polygon).
         | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            +
                class MultiPolygon < GeometryCollection
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  def initialize(srid = DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 8 11 | 
             
                    super(srid)
         | 
| 9 12 | 
             
                  end
         | 
| 10 13 |  | 
| 11 14 | 
             
                  def binary_geometry_type #:nodoc:
         | 
| 12 15 | 
             
                    6
         | 
| 13 16 | 
             
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  def points
         | 
| 19 | 
            +
                    @points ||= geometries.inject([]) do |arr, r|
         | 
| 20 | 
            +
                      arr.concat(r.rings.map(&:points).flatten)
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 14 24 | 
             
                  #Text representation of a MultiPolygon
         | 
| 15 25 | 
             
                  def text_representation(allow_z=true,allow_m=true) #:nodoc:
         | 
| 16 | 
            -
                    @geometries. | 
| 26 | 
            +
                    @geometries.map {|polygon| "(" + polygon.text_representation(allow_z,allow_m) + ")"}.join(",")
         | 
| 17 27 | 
             
                  end
         | 
| 28 | 
            +
             | 
| 18 29 | 
             
                  #WKT geometry type
         | 
| 19 30 | 
             
                  def text_geometry_type #:nodoc:
         | 
| 20 31 | 
             
                    "MULTIPOLYGON"
         | 
| 21 32 | 
             
                  end
         | 
| 22 33 |  | 
| 23 34 | 
             
                  #Creates a multi polygon from an array of polygons
         | 
| 24 | 
            -
                  def self.from_polygons(polygons,srid | 
| 35 | 
            +
                  def self.from_polygons(polygons,srid=DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 25 36 | 
             
                    multi_polygon = new(srid,with_z,with_m)
         | 
| 26 37 | 
             
                    multi_polygon.concat(polygons)
         | 
| 27 38 | 
             
                    multi_polygon
         | 
| 28 39 | 
             
                  end
         | 
| 40 | 
            +
             | 
| 29 41 | 
             
                  #Creates a multi polygon from sequences of points : ((((x,y)...(x,y)),((x,y)...(x,y)),((x,y)...(x,y)))
         | 
| 30 | 
            -
                  def self.from_coordinates(point_sequence_sequences,srid=  | 
| 42 | 
            +
                  def self.from_coordinates(point_sequence_sequences,srid= DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 31 43 | 
             
                    multi_polygon = new(srid,with_z,with_m)
         | 
| 32 44 | 
             
                    multi_polygon.concat( point_sequence_sequences.collect {|point_sequences| Polygon.from_coordinates(point_sequences,srid,with_z,with_m) } )
         | 
| 33 45 | 
             
                    multi_polygon
         | 
| 34 46 | 
             
                  end
         | 
| 47 | 
            +
             | 
| 35 48 | 
             
                end
         | 
| 49 | 
            +
             | 
| 36 50 | 
             
              end
         | 
| 51 | 
            +
             | 
| 37 52 | 
             
            end
         | 
| @@ -17,7 +17,7 @@ module GeoRuby | |
| 17 17 | 
             
                  alias :tet :t
         | 
| 18 18 | 
             
                  alias :tetha :t
         | 
| 19 19 |  | 
| 20 | 
            -
                  def initialize(srid | 
| 20 | 
            +
                  def initialize(srid=DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 21 21 | 
             
                    super(srid,with_z,with_m)
         | 
| 22 22 | 
             
                    @x = @y = 0.0
         | 
| 23 23 | 
             
                    @z=0.0 #default value : meaningful if with_z
         | 
| @@ -261,7 +261,7 @@ module GeoRuby | |
| 261 261 | 
             
                  end
         | 
| 262 262 |  | 
| 263 263 | 
             
                  #creates a point from an array of coordinates
         | 
| 264 | 
            -
                  def self.from_coordinates(coords,srid | 
| 264 | 
            +
                  def self.from_coordinates(coords,srid=DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 265 265 | 
             
                    if ! (with_z or with_m)
         | 
| 266 266 | 
             
                      from_x_y(coords[0],coords[1],srid)
         | 
| 267 267 | 
             
                    elsif with_z and with_m
         | 
| @@ -274,26 +274,26 @@ module GeoRuby | |
| 274 274 | 
             
                  end
         | 
| 275 275 |  | 
| 276 276 | 
             
                  #creates a point from the X and Y coordinates
         | 
| 277 | 
            -
                  def self.from_x_y(x,y,srid | 
| 277 | 
            +
                  def self.from_x_y(x,y,srid=DEFAULT_SRID)
         | 
| 278 278 | 
             
                    point= new(srid)
         | 
| 279 279 | 
             
                    point.set_x_y(x,y)
         | 
| 280 280 | 
             
                  end
         | 
| 281 281 |  | 
| 282 282 | 
             
                  #creates a point from the X, Y and Z coordinates
         | 
| 283 | 
            -
                  def self.from_x_y_z(x,y,z,srid | 
| 283 | 
            +
                  def self.from_x_y_z(x,y,z,srid=DEFAULT_SRID)
         | 
| 284 284 | 
             
                    point= new(srid,true)
         | 
| 285 285 | 
             
                    point.set_x_y_z(x,y,z)
         | 
| 286 286 | 
             
                  end
         | 
| 287 287 |  | 
| 288 288 | 
             
                  #creates a point from the X, Y and M coordinates
         | 
| 289 | 
            -
                  def self.from_x_y_m(x,y,m,srid | 
| 289 | 
            +
                  def self.from_x_y_m(x,y,m,srid=DEFAULT_SRID)
         | 
| 290 290 | 
             
                    point= new(srid,false,true)
         | 
| 291 291 | 
             
                    point.m=m
         | 
| 292 292 | 
             
                    point.set_x_y(x,y)
         | 
| 293 293 | 
             
                  end
         | 
| 294 294 |  | 
| 295 295 | 
             
                  #creates a point from the X, Y, Z and M coordinates
         | 
| 296 | 
            -
                  def self.from_x_y_z_m(x,y,z,m,srid | 
| 296 | 
            +
                  def self.from_x_y_z_m(x,y,z,m,srid=DEFAULT_SRID)
         | 
| 297 297 | 
             
                    point= new(srid,true,true)
         | 
| 298 298 | 
             
                    point.m=m
         | 
| 299 299 | 
             
                    point.set_x_y_z(x,y,z)
         | 
| @@ -301,7 +301,7 @@ module GeoRuby | |
| 301 301 |  | 
| 302 302 | 
             
                  #creates a point using polar coordinates
         | 
| 303 303 | 
             
                  #r and theta(degrees)
         | 
| 304 | 
            -
                  def self.from_r_t(r,t,srid | 
| 304 | 
            +
                  def self.from_r_t(r,t,srid=DEFAULT_SRID)
         | 
| 305 305 | 
             
                    t *= DEG2RAD
         | 
| 306 306 | 
             
                    x = r * Math.cos(t)
         | 
| 307 307 | 
             
                    y = r * Math.sin(t)
         | 
| @@ -310,7 +310,7 @@ module GeoRuby | |
| 310 310 | 
             
                  end
         | 
| 311 311 |  | 
| 312 312 | 
             
                  #creates a point using coordinates like 22`34 23.45N
         | 
| 313 | 
            -
                  def self.from_latlong(lat,lon,srid | 
| 313 | 
            +
                  def self.from_latlong(lat,lon,srid=DEFAULT_SRID)
         | 
| 314 314 | 
             
                    p = [lat,lon].map do |l|
         | 
| 315 315 | 
             
                      sig, deg, min, sec, cen = l.scan(/(-)?(\d{1,2})\D*(\d{2})\D*(\d{2})(\D*(\d{1,3}))?/).flatten
         | 
| 316 316 | 
             
                      sig = true if l =~ /W|S/
         | 
| @@ -1,13 +1,15 @@ | |
| 1 1 | 
             
            require 'geo_ruby/simple_features/geometry'
         | 
| 2 2 |  | 
| 3 3 | 
             
            module GeoRuby
         | 
| 4 | 
            +
             | 
| 4 5 | 
             
              module SimpleFeatures
         | 
| 6 | 
            +
             | 
| 5 7 | 
             
                #Represents a polygon as an array of linear rings (see LinearRing). No check is performed regarding the validity of the geometries forming the polygon.
         | 
| 6 8 | 
             
                class Polygon < Geometry
         | 
| 7 9 | 
             
                  #the list of rings forming the polygon
         | 
| 8 10 | 
             
                  attr_reader :rings
         | 
| 9 11 |  | 
| 10 | 
            -
                  def initialize(srid =  | 
| 12 | 
            +
                  def initialize(srid = DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 11 13 | 
             
                    super(srid,with_z,with_m)
         | 
| 12 14 | 
             
                    @rings = []
         | 
| 13 15 | 
             
                  end
         | 
| @@ -64,12 +66,14 @@ module GeoRuby | |
| 64 66 | 
             
                      true
         | 
| 65 67 | 
             
                    end
         | 
| 66 68 | 
             
                  end
         | 
| 69 | 
            +
             | 
| 67 70 | 
             
                  #binary representation of a polygon, without the headers neccessary for a valid WKB string
         | 
| 68 71 | 
             
                  def binary_representation(allow_z=true,allow_m=true)
         | 
| 69 72 | 
             
                    rep = [length].pack("V")
         | 
| 70 73 | 
             
                    each {|linear_ring| rep << linear_ring.binary_representation(allow_z,allow_m)}
         | 
| 71 74 | 
             
                    rep
         | 
| 72 75 | 
             
                  end
         | 
| 76 | 
            +
             | 
| 73 77 | 
             
                  #WKB geometry type
         | 
| 74 78 | 
             
                  def binary_geometry_type
         | 
| 75 79 | 
             
                    3
         | 
| @@ -79,6 +83,7 @@ module GeoRuby | |
| 79 83 | 
             
                  def text_representation(allow_z=true,allow_m=true)
         | 
| 80 84 | 
             
                    @rings.collect{|line_string| "(" + line_string.text_representation(allow_z,allow_m) + ")" }.join(",")
         | 
| 81 85 | 
             
                  end
         | 
| 86 | 
            +
             | 
| 82 87 | 
             
                  #WKT geometry type
         | 
| 83 88 | 
             
                  def text_geometry_type
         | 
| 84 89 | 
             
                    "POLYGON"
         | 
| @@ -90,6 +95,7 @@ module GeoRuby | |
| 90 95 | 
             
                    geom_attr = options[:geom_attr]
         | 
| 91 96 | 
             
                    "<#{georss_ns}:polygon#{geom_attr}>" + self[0].georss_poslist + "</#{georss_ns}:polygon>\n"
         | 
| 92 97 | 
             
                  end
         | 
| 98 | 
            +
             | 
| 93 99 | 
             
                  #georss w3c representation : outputs the first point of the outer ring
         | 
| 94 100 | 
             
                  def georss_w3cgeo_representation(options)
         | 
| 95 101 | 
             
                    w3cgeo_ns = options[:w3cgeo_ns] || "geo"
         | 
| @@ -124,27 +130,28 @@ module GeoRuby | |
| 124 130 | 
             
                  end
         | 
| 125 131 |  | 
| 126 132 | 
             
                  #creates a new polygon. Accepts an array of linear strings as argument
         | 
| 127 | 
            -
                  def self.from_linear_rings(linear_rings,srid =  | 
| 133 | 
            +
                  def self.from_linear_rings(linear_rings,srid = DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 128 134 | 
             
                    polygon = new(srid,with_z,with_m)
         | 
| 129 135 | 
             
                    polygon.concat(linear_rings)
         | 
| 130 136 | 
             
                    polygon
         | 
| 131 137 | 
             
                  end
         | 
| 132 138 |  | 
| 133 139 | 
             
                  #creates a new polygon. Accepts a sequence of points as argument : ((x,y)....(x,y)),((x,y).....(x,y))
         | 
| 134 | 
            -
                  def self.from_coordinates(point_sequences,srid | 
| 140 | 
            +
                  def self.from_coordinates(point_sequences,srid=DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 135 141 | 
             
                    polygon = new(srid,with_z,with_m)
         | 
| 136 | 
            -
                    polygon.concat( point_sequences. | 
| 142 | 
            +
                    polygon.concat( point_sequences.map {|points| LinearRing.from_coordinates(points,srid,with_z,with_m) } )
         | 
| 137 143 | 
             
                    polygon
         | 
| 138 144 | 
             
                  end
         | 
| 139 145 |  | 
| 140 146 | 
             
                  #creates a new polygon from a list of Points (pt1....ptn),(pti....ptj)
         | 
| 141 | 
            -
                  def self.from_points(point_sequences, srid | 
| 147 | 
            +
                  def self.from_points(point_sequences, srid=DEFAULT_SRID,with_z=false,with_m=false)
         | 
| 142 148 | 
             
                    polygon = new(srid,with_z,with_m)
         | 
| 143 | 
            -
                    polygon.concat( point_sequences. | 
| 149 | 
            +
                    polygon.concat( point_sequences.map {|points| LinearRing.from_points(points,srid,with_z,with_m) } )
         | 
| 144 150 | 
             
                    polygon
         | 
| 145 | 
            -
             | 
| 146 151 | 
             
                  end
         | 
| 147 152 |  | 
| 148 153 | 
             
                end
         | 
| 154 | 
            +
             | 
| 149 155 | 
             
              end
         | 
| 156 | 
            +
             | 
| 150 157 | 
             
            end
         | 
| @@ -1,15 +1,15 @@ | |
| 1 1 | 
             
            # Generated by jeweler
         | 
| 2 | 
            -
            # DO NOT EDIT THIS FILE
         | 
| 3 | 
            -
            # Instead, edit Jeweler::Tasks in Rakefile, and run  | 
| 2 | 
            +
            # DO NOT EDIT THIS FILE DIRECTLY
         | 
| 3 | 
            +
            # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
         | 
| 4 4 | 
             
            # -*- encoding: utf-8 -*-
         | 
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 | 
            -
              s.name = %q{georuby}
         | 
| 8 | 
            -
              s.version = "1. | 
| 7 | 
            +
              s.name = %q{nofxx-georuby}
         | 
| 8 | 
            +
              s.version = "1.7.1"
         | 
| 9 9 |  | 
| 10 10 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 11 | 
             
              s.authors = ["Guilhem Vellut", "Marcos Augusto"]
         | 
| 12 | 
            -
              s.date = %q{ | 
| 12 | 
            +
              s.date = %q{2010-01-28}
         | 
| 13 13 | 
             
              s.description = %q{GeoRuby provides geometric data types from the OGC 'Simple Features' specification.}
         | 
| 14 14 | 
             
              s.email = %q{x@nofxx.com}
         | 
| 15 15 | 
             
              s.extra_rdoc_files = [
         | 
| @@ -23,7 +23,6 @@ Gem::Specification.new do |s| | |
| 23 23 | 
             
                 "README.txt",
         | 
| 24 24 | 
             
                 "Rakefile",
         | 
| 25 25 | 
             
                 "VERSION",
         | 
| 26 | 
            -
                 "georuby.gemspec",
         | 
| 27 26 | 
             
                 "lib/geo_ruby.rb",
         | 
| 28 27 | 
             
                 "lib/geo_ruby/gpx.rb",
         | 
| 29 28 | 
             
                 "lib/geo_ruby/gpx4r/gpx.rb",
         | 
| @@ -45,6 +44,7 @@ Gem::Specification.new do |s| | |
| 45 44 | 
             
                 "lib/geo_ruby/simple_features/multi_polygon.rb",
         | 
| 46 45 | 
             
                 "lib/geo_ruby/simple_features/point.rb",
         | 
| 47 46 | 
             
                 "lib/geo_ruby/simple_features/polygon.rb",
         | 
| 47 | 
            +
                 "nofxx-georuby.gemspec",
         | 
| 48 48 | 
             
                 "script/console",
         | 
| 49 49 | 
             
                 "script/destroy",
         | 
| 50 50 | 
             
                 "script/generate",
         | 
| @@ -94,24 +94,24 @@ Gem::Specification.new do |s| | |
| 94 94 | 
             
              s.rubygems_version = %q{1.3.5}
         | 
| 95 95 | 
             
              s.summary = %q{Ruby data holder for OGC Simple Features}
         | 
| 96 96 | 
             
              s.test_files = [
         | 
| 97 | 
            -
                "spec/ | 
| 98 | 
            -
                 "spec/spec_helper.rb",
         | 
| 99 | 
            -
                 "spec/geo_ruby/gpx4r/gpx_spec.rb",
         | 
| 97 | 
            +
                "spec/geo_ruby/gpx4r/gpx_spec.rb",
         | 
| 100 98 | 
             
                 "spec/geo_ruby/shp4r/shp_spec.rb",
         | 
| 101 | 
            -
                 "spec/geo_ruby/simple_features/point_spec.rb",
         | 
| 102 | 
            -
                 "spec/geo_ruby/simple_features/geometry_factory_spec.rb",
         | 
| 103 99 | 
             
                 "spec/geo_ruby/simple_features/envelope_spec.rb",
         | 
| 104 | 
            -
                 "spec/geo_ruby/simple_features/polygon_spec.rb",
         | 
| 105 | 
            -
                 "spec/geo_ruby/simple_features/line_string_spec.rb",
         | 
| 106 | 
            -
                 "spec/geo_ruby/simple_features/multi_line_string_spec.rb",
         | 
| 107 | 
            -
                 "spec/geo_ruby/simple_features/ewkt_parser_spec.rb",
         | 
| 108 100 | 
             
                 "spec/geo_ruby/simple_features/ewkb_parser_spec.rb",
         | 
| 109 | 
            -
                 "spec/geo_ruby/simple_features/ | 
| 101 | 
            +
                 "spec/geo_ruby/simple_features/ewkt_parser_spec.rb",
         | 
| 110 102 | 
             
                 "spec/geo_ruby/simple_features/geometry_collection_spec.rb",
         | 
| 111 | 
            -
                 "spec/geo_ruby/simple_features/ | 
| 112 | 
            -
                 "spec/geo_ruby/simple_features/ | 
| 103 | 
            +
                 "spec/geo_ruby/simple_features/geometry_factory_spec.rb",
         | 
| 104 | 
            +
                 "spec/geo_ruby/simple_features/geometry_spec.rb",
         | 
| 113 105 | 
             
                 "spec/geo_ruby/simple_features/georss_parser_spec.rb",
         | 
| 114 | 
            -
                 "spec/geo_ruby/simple_features/ | 
| 106 | 
            +
                 "spec/geo_ruby/simple_features/line_string_spec.rb",
         | 
| 107 | 
            +
                 "spec/geo_ruby/simple_features/linear_ring_spec.rb",
         | 
| 108 | 
            +
                 "spec/geo_ruby/simple_features/multi_line_string_spec.rb",
         | 
| 109 | 
            +
                 "spec/geo_ruby/simple_features/multi_point_spec.rb",
         | 
| 110 | 
            +
                 "spec/geo_ruby/simple_features/multi_polygon_spec.rb",
         | 
| 111 | 
            +
                 "spec/geo_ruby/simple_features/point_spec.rb",
         | 
| 112 | 
            +
                 "spec/geo_ruby/simple_features/polygon_spec.rb",
         | 
| 113 | 
            +
                 "spec/geo_ruby_spec.rb",
         | 
| 114 | 
            +
                 "spec/spec_helper.rb"
         | 
| 115 115 | 
             
              ]
         | 
| 116 116 |  | 
| 117 117 | 
             
              if s.respond_to? :specification_version then
         | 
| @@ -124,3 +124,4 @@ Gem::Specification.new do |s| | |
| 124 124 | 
             
              else
         | 
| 125 125 | 
             
              end
         | 
| 126 126 | 
             
            end
         | 
| 127 | 
            +
             | 
| @@ -72,14 +72,6 @@ describe Gpx4r do | |
| 72 72 | 
             
                  @gpxfile3.as_polyline.should be_instance_of LineString
         | 
| 73 73 | 
             
                end
         | 
| 74 74 |  | 
| 75 | 
            -
                it "should return it as a polygon" do
         | 
| 76 | 
            -
                  @gpxfile.as_polygon.should be_instance_of Polygon
         | 
| 77 | 
            -
                end
         | 
| 78 | 
            -
             | 
| 79 | 
            -
                it "should return it as a polygon 3" do
         | 
| 80 | 
            -
                  @gpxfile3.as_polygon.should be_instance_of Polygon
         | 
| 81 | 
            -
                end
         | 
| 82 | 
            -
             | 
| 83 75 | 
             
                it "should return a envelope" do
         | 
| 84 76 | 
             
                  @gpxfile.envelope.should be_instance_of Envelope
         | 
| 85 77 | 
             
                  @gpxfile.envelope.lower_corner.x.should be_close(9.08128, 0.001)
         | 
| @@ -92,6 +84,15 @@ describe Gpx4r do | |
| 92 84 | 
             
                  @gpxfile3.envelope.lower_corner.y.should be_close(-17.547636, 0.001)
         | 
| 93 85 | 
             
                end
         | 
| 94 86 |  | 
| 87 | 
            +
                it "should return it as a polygon" do
         | 
| 88 | 
            +
                  [@gpxfile, @gpxfile2, @gpxfile3].each do |g|
         | 
| 89 | 
            +
                    g.as_polygon.should be_instance_of Polygon
         | 
| 90 | 
            +
                    g.as_polygon[0].should be_instance_of LinearRing
         | 
| 91 | 
            +
                    g.as_polygon[0].should be_closed
         | 
| 92 | 
            +
                    g.as_polygon[1].should be_nil
         | 
| 93 | 
            +
                  end
         | 
| 94 | 
            +
                end
         | 
| 95 | 
            +
             | 
| 95 96 | 
             
                it "should close the polygon" do
         | 
| 96 97 | 
             
                  se = Point.from_x_y(-44, -23)
         | 
| 97 98 | 
             
                  sw = Point.from_x_y(-42, -22)
         | 
| @@ -23,7 +23,7 @@ describe Shp4r do | |
| 23 23 | 
             
                end
         | 
| 24 24 |  | 
| 25 25 | 
             
                it "should parse record 1" do
         | 
| 26 | 
            -
                  rec = @shpfile | 
| 26 | 
            +
                  rec = @shpfile[0]
         | 
| 27 27 | 
             
                  rec.geometry.should be_kind_of Point
         | 
| 28 28 | 
             
                  rec.geometry.x.should be_close(-90.08375, 0.00001)
         | 
| 29 29 | 
             
                  rec.geometry.y.should be_close(34.39996, 0.00001)
         | 
| @@ -60,7 +60,7 @@ describe Shp4r do | |
| 60 60 | 
             
                end
         | 
| 61 61 |  | 
| 62 62 | 
             
                it "should parse record 1" do
         | 
| 63 | 
            -
                  rec = @shpfile | 
| 63 | 
            +
                  rec = @shpfile[0]
         | 
| 64 64 | 
             
                  rec.geometry.should be_kind_of MultiLineString
         | 
| 65 65 | 
             
                  rec.geometry.length.should eql(1)
         | 
| 66 66 | 
             
                  rec.geometry[0].length.should eql(6)
         | 
| @@ -87,7 +87,7 @@ describe Shp4r do | |
| 87 87 | 
             
                end
         | 
| 88 88 |  | 
| 89 89 | 
             
                it "should parse record 1" do
         | 
| 90 | 
            -
                  rec = @shpfile | 
| 90 | 
            +
                  rec = @shpfile[0]
         | 
| 91 91 | 
             
                  rec.geometry.should be_kind_of MultiPolygon
         | 
| 92 92 | 
             
                  rec.geometry.length.should eql(1)
         | 
| 93 93 | 
             
                  rec.geometry[0].length.should eql(1)
         | 
| @@ -4,12 +4,12 @@ describe MultiLineString do | |
| 4 4 |  | 
| 5 5 | 
             
             it "test_multi_line_string_creation" do
         | 
| 6 6 | 
             
                multi_line_string1 = MultiLineString.from_line_strings([LineString.from_coordinates([[1.5,45.2],[-54.12312,-0.012]],256),LineString.from_coordinates([[1.5,45.2],[-54.12312,-0.012],[45.123,123.3]],256)],256)
         | 
| 7 | 
            -
                multi_line_string1.should be_instance_of | 
| 7 | 
            +
                multi_line_string1.should be_instance_of(MultiLineString)
         | 
| 8 8 | 
             
                multi_line_string1.length.should eql(2)
         | 
| 9 9 | 
             
                multi_line_string1[0].should == LineString.from_coordinates([[1.5,45.2],[-54.12312,-0.012]],256)
         | 
| 10 10 |  | 
| 11 11 | 
             
                multi_line_string2= MultiLineString.from_coordinates([[[1.5,45.2],[-54.12312,-0.012]],[[1.5,45.2],[-54.12312,-0.012],[45.123,123.3]]],256);
         | 
| 12 | 
            -
                multi_line_string1.should be_instance_of | 
| 12 | 
            +
                multi_line_string1.should be_instance_of(MultiLineString)
         | 
| 13 13 | 
             
                multi_line_string1.length.should eql(2)
         | 
| 14 14 | 
             
                multi_line_string2[0].should == LineString.from_coordinates([[1.5,45.2],[-54.12312,-0.012]],256)
         | 
| 15 15 |  | 
| @@ -32,4 +32,23 @@ describe MultiLineString do | |
| 32 32 | 
             
                multi_line_string.as_ewkt.should eql("SRID=256;MULTILINESTRING((1.5 45.2 1.3 1.2,-54.12312 -0.012 1.2 4.5),(1.5 45.2 5.1 -4.5,-54.12312 -0.012 -6.8 3.4,45.123 123.3 4.5 -5.3))")
         | 
| 33 33 | 
             
              end
         | 
| 34 34 |  | 
| 35 | 
            +
              describe "Some More" do
         | 
| 36 | 
            +
                before do
         | 
| 37 | 
            +
                  @mls = MultiLineString.from_line_strings([LineString.from_coordinates([[1.5,45.2],[-54.12312,-0.012]],256),LineString.from_coordinates([[1.5,45.2],[-54.12312,-0.012],[45.123,123.3]],256)],256)
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                it "should have a accessor to all points" do
         | 
| 41 | 
            +
                  @mls.points.should be_instance_of(Array)
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                it "should flatten the array" do
         | 
| 45 | 
            +
                  @mls.should have(5).points
         | 
| 46 | 
            +
                end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                it "should simplify to linestring" do
         | 
| 49 | 
            +
                  ls = @mls.to_line_string
         | 
| 50 | 
            +
                  ls.should be_instance_of(LineString)
         | 
| 51 | 
            +
                  ls.should have(5).points
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
              end
         | 
| 35 54 | 
             
            end
         | 
| @@ -4,7 +4,7 @@ describe MultiPoint do | |
| 4 4 |  | 
| 5 5 | 
             
              it "test_multi_point_creation" do
         | 
| 6 6 | 
             
                multi_point = MultiPoint.from_coordinates([[12.4,-123.3],[-65.1,123.4],[123.55555555,123]],444)
         | 
| 7 | 
            -
                multi_point.should be_instance_of | 
| 7 | 
            +
                multi_point.should be_instance_of(MultiPoint)
         | 
| 8 8 | 
             
                multi_point.length.should eql(3)
         | 
| 9 9 | 
             
                multi_point[0].should == Point.from_x_y(12.4,-123.3,444)
         | 
| 10 10 | 
             
                multi_point[2].should == Point.from_x_y(123.55555555,123,444)
         | 
| @@ -26,4 +26,10 @@ describe MultiPoint do | |
| 26 26 | 
             
                multi_point.as_ewkt.should eql("SRID=444;MULTIPOINT((12.4 -123.3 4.5),(-65.1 123.4 6.7),(123.55555555 123 7.8))")
         | 
| 27 27 | 
             
              end
         | 
| 28 28 |  | 
| 29 | 
            +
              it "should respond to points" do
         | 
| 30 | 
            +
                mp = MultiPoint.from_coordinates([[12.4,-123.3],[-65.1,123.4],[123.55555555,123]],444)
         | 
| 31 | 
            +
                mp.should have(3).geometries
         | 
| 32 | 
            +
                mp.should have(3).points
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
             | 
| 29 35 | 
             
            end
         | 
| @@ -4,12 +4,12 @@ describe MultiPolygon do | |
| 4 4 |  | 
| 5 5 | 
             
               it "test_multi_polygon_creation" do
         | 
| 6 6 | 
             
                multi_polygon1 = MultiPolygon.from_polygons([Polygon.from_coordinates([[[12.4,-45.3],[45.4,41.6],[4.456,1.0698],[12.4,-45.3]],[[2.4,5.3],[5.4,1.4263],[14.46,1.06],[2.4,5.3]]],256),Polygon.from_coordinates([[[0,0],[4,0],[4,4],[0,4],[0,0]],[[1,1],[3,1],[3,3],[1,3],[1,1]]],256)],256)
         | 
| 7 | 
            -
                multi_polygon1.should be_instance_of | 
| 7 | 
            +
                multi_polygon1.should be_instance_of(MultiPolygon)
         | 
| 8 8 | 
             
                multi_polygon1.length.should eql(2)
         | 
| 9 9 | 
             
                multi_polygon1[0].should == Polygon.from_coordinates([[[12.4,-45.3],[45.4,41.6],[4.456,1.0698],[12.4,-45.3]],[[2.4,5.3],[5.4,1.4263],[14.46,1.06],[2.4,5.3]]],256)
         | 
| 10 10 |  | 
| 11 11 | 
             
                multi_polygon2 = MultiPolygon.from_coordinates([[[[12.4,-45.3],[45.4,41.6],[4.456,1.0698],[12.4,-45.3]],[[2.4,5.3],[5.4,1.4263],[14.46,1.06],[2.4,5.3]]],[[[0,0],[4,0],[4,4],[0,4],[0,0]],[[1,1],[3,1],[3,3],[1,3],[1,1]]]],256)
         | 
| 12 | 
            -
                multi_polygon1.should be_instance_of | 
| 12 | 
            +
                multi_polygon1.should be_instance_of(MultiPolygon)
         | 
| 13 13 | 
             
                multi_polygon1.length.should eql(2)
         | 
| 14 14 |  | 
| 15 15 | 
             
                multi_polygon2[0].should == Polygon.from_coordinates([[[12.4,-45.3],[45.4,41.6],[4.456,1.0698],[12.4,-45.3]],[[2.4,5.3],[5.4,1.4263],[14.46,1.06],[2.4,5.3]]],256)
         | 
| @@ -32,4 +32,19 @@ describe MultiPolygon do | |
| 32 32 | 
             
                multi_polygon.as_ewkt.should eql("SRID=4326;MULTIPOLYGON(((12.4 -45.3 2,45.4 41.6 3,4.456 1.0698 4,12.4 -45.3 2),(2.4 5.3 1,5.4 1.4263 3.44,14.46 1.06 4.5,2.4 5.3 1)),((0 0 5.6,4 0 5.4,4 4 1,0 4 23,0 0 5.6),(1 1 2.3,3 1 4,3 3 5,1 3 6,1 1 2.3)))")
         | 
| 33 33 | 
             
              end
         | 
| 34 34 |  | 
| 35 | 
            +
              describe "Counting" do
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                before do
         | 
| 38 | 
            +
                  @mp = MultiPolygon.from_polygons([Polygon.from_coordinates([[[12.4,-45.3],[45.4,41.6],[4.456,1.0698],[12.4,-45.3]],[[2.4,5.3],[5.4,1.4263],[14.46,1.06],[2.4,5.3]]],256),Polygon.from_coordinates([[[0,0],[4,0],[4,4],[0,4],[0,0]],[[1,1],[3,1],[3,3],[1,3],[1,1]]],256)],256)
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                it "should have a points method" do
         | 
| 42 | 
            +
                  @mp.points[0].should be_instance_of(Point)
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                it "should flatten it right" do
         | 
| 46 | 
            +
                  @mp.should have(18).points
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
              end
         | 
| 35 50 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: nofxx-georuby
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.7.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors: 
         | 
| 7 7 | 
             
            - Guilhem Vellut
         | 
| @@ -10,7 +10,7 @@ autorequire: | |
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 12 |  | 
| 13 | 
            -
            date:  | 
| 13 | 
            +
            date: 2010-01-28 00:00:00 -02:00
         | 
| 14 14 | 
             
            default_executable: 
         | 
| 15 15 | 
             
            dependencies: []
         | 
| 16 16 |  | 
| @@ -30,7 +30,6 @@ files: | |
| 30 30 | 
             
            - README.txt
         | 
| 31 31 | 
             
            - Rakefile
         | 
| 32 32 | 
             
            - VERSION
         | 
| 33 | 
            -
            - georuby.gemspec
         | 
| 34 33 | 
             
            - lib/geo_ruby.rb
         | 
| 35 34 | 
             
            - lib/geo_ruby/gpx.rb
         | 
| 36 35 | 
             
            - lib/geo_ruby/gpx4r/gpx.rb
         | 
| @@ -52,6 +51,7 @@ files: | |
| 52 51 | 
             
            - lib/geo_ruby/simple_features/multi_polygon.rb
         | 
| 53 52 | 
             
            - lib/geo_ruby/simple_features/point.rb
         | 
| 54 53 | 
             
            - lib/geo_ruby/simple_features/polygon.rb
         | 
| 54 | 
            +
            - nofxx-georuby.gemspec
         | 
| 55 55 | 
             
            - script/console
         | 
| 56 56 | 
             
            - script/destroy
         | 
| 57 57 | 
             
            - script/generate
         | 
| @@ -94,9 +94,10 @@ files: | |
| 94 94 | 
             
            - spec/geo_ruby_spec.rb
         | 
| 95 95 | 
             
            - spec/spec.opts
         | 
| 96 96 | 
             
            - spec/spec_helper.rb
         | 
| 97 | 
            -
            has_rdoc:  | 
| 97 | 
            +
            has_rdoc: true
         | 
| 98 98 | 
             
            homepage: http://github.com/nofxx/georuby
         | 
| 99 | 
            -
            licenses: 
         | 
| 99 | 
            +
            licenses: []
         | 
| 100 | 
            +
             | 
| 100 101 | 
             
            post_install_message: 
         | 
| 101 102 | 
             
            rdoc_options: 
         | 
| 102 103 | 
             
            - --charset=UTF-8
         | 
| @@ -122,21 +123,21 @@ signing_key: | |
| 122 123 | 
             
            specification_version: 3
         | 
| 123 124 | 
             
            summary: Ruby data holder for OGC Simple Features
         | 
| 124 125 | 
             
            test_files: 
         | 
| 125 | 
            -
            - spec/geo_ruby_spec.rb
         | 
| 126 | 
            -
            - spec/spec_helper.rb
         | 
| 127 126 | 
             
            - spec/geo_ruby/gpx4r/gpx_spec.rb
         | 
| 128 127 | 
             
            - spec/geo_ruby/shp4r/shp_spec.rb
         | 
| 129 | 
            -
            - spec/geo_ruby/simple_features/point_spec.rb
         | 
| 130 | 
            -
            - spec/geo_ruby/simple_features/geometry_factory_spec.rb
         | 
| 131 128 | 
             
            - spec/geo_ruby/simple_features/envelope_spec.rb
         | 
| 132 | 
            -
            - spec/geo_ruby/simple_features/polygon_spec.rb
         | 
| 133 | 
            -
            - spec/geo_ruby/simple_features/line_string_spec.rb
         | 
| 134 | 
            -
            - spec/geo_ruby/simple_features/multi_line_string_spec.rb
         | 
| 135 | 
            -
            - spec/geo_ruby/simple_features/ewkt_parser_spec.rb
         | 
| 136 129 | 
             
            - spec/geo_ruby/simple_features/ewkb_parser_spec.rb
         | 
| 137 | 
            -
            - spec/geo_ruby/simple_features/ | 
| 130 | 
            +
            - spec/geo_ruby/simple_features/ewkt_parser_spec.rb
         | 
| 138 131 | 
             
            - spec/geo_ruby/simple_features/geometry_collection_spec.rb
         | 
| 139 | 
            -
            - spec/geo_ruby/simple_features/ | 
| 140 | 
            -
            - spec/geo_ruby/simple_features/multi_point_spec.rb
         | 
| 141 | 
            -
            - spec/geo_ruby/simple_features/georss_parser_spec.rb
         | 
| 132 | 
            +
            - spec/geo_ruby/simple_features/geometry_factory_spec.rb
         | 
| 142 133 | 
             
            - spec/geo_ruby/simple_features/geometry_spec.rb
         | 
| 134 | 
            +
            - spec/geo_ruby/simple_features/georss_parser_spec.rb
         | 
| 135 | 
            +
            - spec/geo_ruby/simple_features/line_string_spec.rb
         | 
| 136 | 
            +
            - spec/geo_ruby/simple_features/linear_ring_spec.rb
         | 
| 137 | 
            +
            - spec/geo_ruby/simple_features/multi_line_string_spec.rb
         | 
| 138 | 
            +
            - spec/geo_ruby/simple_features/multi_point_spec.rb
         | 
| 139 | 
            +
            - spec/geo_ruby/simple_features/multi_polygon_spec.rb
         | 
| 140 | 
            +
            - spec/geo_ruby/simple_features/point_spec.rb
         | 
| 141 | 
            +
            - spec/geo_ruby/simple_features/polygon_spec.rb
         | 
| 142 | 
            +
            - spec/geo_ruby_spec.rb
         | 
| 143 | 
            +
            - spec/spec_helper.rb
         |