sabman / georuby forked from nofxx/georuby

Fork with some additions

This URL has Read+Write access

name age message
file .gitignore Sat May 02 17:14:44 -0700 2009 gemspec [nofxx]
file History.txt Sat May 02 11:46:45 -0700 2009 init [nofxx]
file LICENSE Sat May 02 11:46:45 -0700 2009 init [nofxx]
file README.txt Loading commit data...
file Rakefile
file VERSION
file georuby.gemspec
directory lib/
directory script/
directory spec/
README.txt
= GeoRuby

This is a fork of GeoRuby. It is intended as a holder for data returned from PostGIS and the Spatial Extensions of 
MySql. The data model roughly follows the OGC "Simple Features for SQL" specification (see 
http://www.opengis.org/docs/99-049.pdf), although without any kind of advanced functionalities (such as geometric 
operators or reprojections). It also supports various output and input formats (GeoRSS, KML, Shapefile).


=== Available data types

The following geometric data types are provided :
- Point
- Line string
- Linear ring
- Polygon
- Multi point
- Multi line string
- Multi polygon
- Geometry collection

They can be in 2D, 3DZ, 3DM, and 4D.

On top of this an Envelope class is available, to contain the bounding box of a geometry.


=== Input and output

These geometries can be input and output in WKB/EWKB/WKT/EWKT format (as well as the related HexWKB and HexEWKB 
formats). HexEWKB and WKB are the default form under which geometric data is returned respectively from PostGIS and 
MySql.

GeoRSS Simple, GeoRSS W3CGeo, GeoRSS GML can also be input and output. Note that they will not output valid RSS, but 
just the part strictly concerning the geometry as outlined in http://www.georss.org/1/ . Since the model does not allow 
multiple geometries, for geometry collections, only the first geometry will be output. Similarly, for polygons, the 
GeoRSS output will only contain the outer ring. As for W3CGeo output, only points can be output, so the first point of 
the geometry is chosen. By default the Simple format is output. Envelope can also be output in these formats: The box 
geometric type is chosen (except for W3CGeo, where the center of the envelope is chose). These formats can also be input 
and a GeoRuby geometry will be created. Note that it will not read a valid RSS file, only a geometry string.

On top of that, there is now support for KML output and input. As for GeoRSS, a valid KML file will not be output, but 
only the geometric data. Options <tt>:id</tt>, <tt>:extrude</tt>, <tt>:tesselate</tt> and <tt>:altitude_mode</tt> can be 
given. Note that if the <tt>:altitude_mode</tt> option is not passed or set to <tt>clampToGround</tt>, the altitude data 
will not be output even if present. Envelopes output a LatLonAltBox instead of a geometry. For the output, the following 
geometric types are supported : Point, LineString, Polygon.


=== SHP reading et writing

Georuby has support for reading ESRI shapefiles (http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf). A tool 
called <tt>shp2sql.rb</tt> is also provided : it shows how to use the SHP reading functionality together with the 
spatial adapter plugin for Rails to import spatial features into MySQL and PostGIS.

Here is an example of Shapefile reading, that goes through all the geometries in a file and disaply the values of the 
attributes :

        require 'geo_ruby/shp'

        ShpFile.open(shpfile) do |shp|
                shp.each do |shape|
                        geom = shape.geometry #a GeoRuby SimpleFeature
                        att_data = shape.data #a Hash
                        shp.fields.each do |field|
                                puts att_data[field.name]
                        end
                end
        end

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).

Here is an example of how to create a new Shapefile with 2 fields :

        shpfile = 
        ShpFile.create('hello.shp',ShpType::POINT,[Dbf::Field.new("Hoyoyo","C",10),Dbf::Field.new("Boyoul","N",10,0)])

The file is then open for reading and writing.

Here is an example of how to write to a shapefile (created or not with GeoRuby) :

        shpfile = ShpFile.open('places.shp')
        shpfile.transaction do |tr|
                tr.add(ShpRecord.new(Point.from_x_y(123.4,123.4),'Hoyoyo' => "AEZ",'Bouyoul' => 45))
                tr.update(4,ShpRecord.new(Point.from_x_y(-16.67,16.41),'Hoyoyo' => "EatMe",'Bouyoul' => 42))
                tr.delete(1)
        end
        shpfile.close

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.

Also currently, error reporting is minimal and it has not been tested that thoroughly so caveat emptor and backup before 
performing any destructive operation.


=== GPX Reading

You can read and convert GPX Files to LineString/Polygon:

     gpxfile = GpxFile.open(tour.gpx')
     gpxfile.as_line_string
     => GeoRuby::SimpleFeatures::LineString..


=== Installation

To install the latest version, just type :

      gem install nofxx-georuby


=== Changes since the last version

- Writing of ESRI shapefiles
- Reading of ESRI shapefiles
- Addition of a small tool to import spatial features in MySQL and PostGIS from a SHP file


=== Coming in the next versions

- Schema modification of existing shapefiles
- More error reporting when writing shapefiles
- More tests on writing shapefiles ; tests on real-world shapefiles
- Better shp2sql import tool
- Documentation


=== Acknowledgement

The SHP reading part uses the DBF library (http://rubyforge.org/projects/dbf/) by Keith Morrison (http://infused.org).
Thanks also to Pramukta Kumar and Pete Schwamb for their contributions.


=== License

GeoRuby is released under the MIT license.

=== Support

Any questions, enhancement proposals, bug notifications or corrections
can be sent to mailto:guilhem.vellut@gmail.com.