Skip to content

Latest commit

 

History

History
241 lines (177 loc) · 18 KB

History.rdoc

File metadata and controls

241 lines (177 loc) · 18 KB

0.3.2 / 2011-06-06

  • GEOS CAPI implementation can now use prepared geometries to speed up certain operations. The GEOS FFI implementation will do the same once I find out how ffi-geos will handle prepared geometries internally.

  • Calling dup on a Proj4 object caused a segfault. Fixed.

0.3.1 / 2011-05-24

  • Running a == operator comparison between a geometry and a non-geometry caused an exception for some implementations. Fixed. (Reported by Daniel Hackney.)

  • Clarified the specifications for operators on geometry objects.

0.3.0 / 2011-05-23

  • RGeo can now use GEOS via the ffi-geos gem, in addition to RGeo’s built-in C integration. The ffi-geos integration is experimental right now, since ffi-geos is still in early beta. In particular, I do not recommend using it in JRuby yet (as of JRuby 1.6.1), because an apparent JRuby bug (JRUBY-5813) causes intermittent segfaults. However, once the issue is resolved (soon, I hope, since I’ve already submitted a patch to the JRuby team), we should have GEOS functional on JRuby.

  • It is now possible to add methods to geometry objects “globally”. This was not possible previously because there is no global base class; however, there is now a mechanism to specify mixins that all implementations are expected to include.

  • Added RGeo::Feature::Type.supertype and each_immediate_subtype.

  • POSSIBLE INCOMPATIBLE CHANGE: Taking the boundary of a GEOS GeometryCollection now returns nil. It used to return an empty GeometryCollection, regardless of the contents of the original collection. GeometryCollection subclasses like MultiPoint, however, do have proper boundaries.

  • Renamed the lenient_multi_polygon_assertions GEOS factory parameter to uses_lenient_multi_polygon_assertions. The older name will continue to work.

  • The GEOS buffer_resolution and uses_lenient_multi_polygon_assertions options are now exposed via properties.

  • The RGeo::Feature::Polygon module incorrectly included Enumerable. Fixed.

  • Several of the implementations included some extraneous (and nonfunctional) methods because they included the wrong modules. Fixed.

0.2.9 / 2011-04-25

  • INCOMPATIBLE CHANGE: mutator methods for the configurations of the WKRep parsers and generators have been removed. Create a new parser/generator if you need to change behavior.

  • POSSIBLE INCOMPATIBLE CHANGE: The GEOS implementation now uses WKRep (by default) instead of the native GEOS WKB/WKT parsers and generators. This is because of some issues with the GEOS 3.2.2 implementation: namely, that the GEOS WKT generator suffers from some floating-point roundoff issues due to its “fixed point” output, and that the GEOS WKT parser fails to recognize names not in all caps, in violation of the version 1.2 update of the SFS. (Thanks to sharpone74 for report GH-4.)

  • WKRep::WKTGenerator injects some more whitespace to make output more readable and more in line with the examples in the SFS.

  • It is now possible to configure the WKT/WKB parsers/generators for each of the implementations, by passing the configuration hash to the factory constructor. In addition, it is also possible to configure the GEOS factory to use the native GEOS WKT/WKB implementation instead of RGeo::WKRep (that is, to restore the behavior of RGeo <= 0.2.8).

  • The WKB parser auto-detects and interprets hex strings.

0.2.8 / 2011-04-11

  • A .gemspec file is now available for gem building and bundler git integration.

0.2.7 / 2011-04-09

  • POSSIBLE INCOMPATIBLE CHANGE: GeometryCollection#geometry_n, Polygon#interior_ring_n, and LineString#point_n, in some implementations, allowed negative indexes (which counted backwards from the end of the collection as per Ruby arrays). This was contrary to the SFS interface, and so the behavior has been removed. However, GeometryCollection#[], because it is supposed to model Ruby arrays, now explicitly DOES allow negative indexes. This means GeometryCollection#[] is no longer exactly the same as GeometryCollection#geometry_n. These clarifications have also been made in the RDoc.

  • The GEOS implementations of GeometryCollection#geometry_n and Polygon#interior_ring_n segfaulted when given an index out of bounds. Bounds Check Fail fixed. (Reported by sharpone74.)

0.2.6 / 2011-03-31

  • Ring direction analysis raised an exception if any of the line segments were zero length. Fixed. (Reported by spara.)

0.2.5 / 2011-03-21

  • Line segment intersection tests in the simple cartesian implementations were failing for a few cases involving collinear segments. Fixed. (Reported by Dimitry Solovyov.)

  • Argument hash RDocs should be more readable.

0.2.4 / 2010-12-31

  • Several bugs were preventing the low-level Proj4 transform functions from working at all. Fixed. (Reported by mRg.)

  • The GEOS factories over-optimized projection casts, sometimes resulting in proj4 transformations not getting applied. Fixed. (Reported by mRg.)

  • Proj4 objects now have a flag to indicate whether geographic coordinate systems should be in radians. The (undocumented) radians option is no longer supported in transform_coords.

  • Disabled the spatialreference.org tests for the time being because the site seems to be offline.

0.2.3 / 2010-12-19

  • The “simple mercator” geographic type incorrectly reported EPSG 3857 instead of EPSG 3785 for the projection. Dyslexia fixed.

  • Geographic types couldn’t have their coord_sys set. Fixed.

  • You can now pass an :srs_database option when creating most factory types. This lets the factory look up its coordinate system using the given SRID.

  • There are now explicit methods you can call to obtain FactoryGenerator objects; you should not need to call method.

  • Wrote RDocs for all the CoordSys::CS and CoordSys::SRSDatabase classes.

0.2.2 / 2010-12-15

The main theme for this release was support for spatial reference system databases. The basic functionality is done and ready for experimentation. However, documentation is still in progress, and we’re still working on some ideas to make coordinate system management more seamless by integrating the SRS databases with FactoryGenerator.

  • Implemented OGC coordinate system objects, including most of the CS package of the OGC Coordinate Transform spec, and a parser for the WKT.

  • Defined interfaces for spatial reference system database access. Implemented a database based on ActiveRecord and backed by spatial_ref_sys tables; one based on the data files shared by the proj4 library; one based on retrieving data from spatialreference.org, and one based on retrieving data from arbitrary URLs.

  • Renamed RGeo::Feature::Type::Instance marker module to RGeo::Feature::Instance. The old name is aliased for backward compatibility but is deprecated.

  • Added a few more directories to the default lookup path for geos and proj4.

0.2.1 / 2010-12-09

  • Now compatible with Rubinius (version 1.1 or later).

  • Now partially compatible with JRuby (1.5 or later). A bunch of tests fail because GEOS and Proj4 are not available, hence there is no projection support and no complete Cartesian implementation. But at least RGeo loads and the basic operations work.

  • Some minor optimizations in the GEOS glue code.

0.2.0 / 2010-12-07

This is the first public alpha version of RGeo. With this version, we are soft-locking the API interfaces and will try to retain backwards compatibility from this point. Incompatible API changes may still be done, but only if considered necessary.

With this release, RGeo has been split into a core library and a set of optional modules. The following modules remain in the core “rgeo” gem:

  • RGeo::Feature

  • RGeo::CoordSys

  • RGeo::Geos

  • RGeo::Cartesian

  • RGeo::Geographic

  • RGeo::WKRep

The following modules have been spun off into separate gems:

  • RGeo::GeoJSON has been spun off into the “rgeo-geojson” gem.

  • RGeo::Shapefile has been spun off into the “rgeo-shapefile” gem.

  • RGeo::ActiveRecord has been spun off into the “rgeo-activerecord” gem.

The ActiveRecord adapters have been spun off into gems according to the recommended ActiveRecord naming scheme:

  • The mysqlspatial adapter is now in the gem “activerecord-mysqlspatial-adapter”.

  • The mysql2spatial adapter is now in the gem “activerecord-mysql2spatial-adapter”.

  • The spatialite adapter is now in the gem “activerecord-spatialite-adapter”.

  • The postgis adapter is now in the gem “activerecord-postgis-adapter”.

Any additional modules likely will be distributed similarly as separate gems.

Other changes in this version:

  • API CHANGE: Renamed UnsupportedCapability to UnsupportedOperation since we’ve done away with the “capability” concept.

  • Proj4 integration wasn’t building into the right location on a gem install. Fixed.

  • Various updates to the rdocs.

  • Minor updates to the Spatial Programming paper.

0.1.22 / 2010-12-05

This should be the last pre-alpha development version. The next version planned is the 0.2 alpha release.

  • API CHANGE: Renamed Geography module to Geographic.

  • API CHANGE: Renamed Factory#has_capability? to Factory#property to generalize the API.

  • API CHANGE: Factory#proj4 and Factory#coord_sys are now required methods.

  • The ZM Geos factory didn’t properly handle proj4. Fixed.

  • The proj4-based projected geographic factory now extracts the cooresponding geographic coordinate system from the projection, rather than always using WGS84.

  • Initial draft of Spatial Programming paper.

0.1.21 / 2010-12-03

  • API CHANGE: Added “_factory” to the end of the Geography toplevel interface methods, for consistency with the rest of the API.

  • API CHANGE: Simplified initializer API for WKTParser and WKBParser.

  • API CHANGE: Removed ActiveRecord::Base.rgeo_default_factory, and provided a reasonable default rgeo_factory_generator.

  • Removed deprecated pluralized names RGeo::Features and RGeo::Errors.

  • First pass implementation of the ActiveRecord adapters for SpatiaLite and PostGIS.

  • Fixed problems with Proj4 equivalence testing.

  • Several more minor fixes and documentation updates.

0.1.20 / 2010-11-30

  • API CHANGE: Methods that raised MethodUnimplemented now raise UnsupportedCapability instead. Removed MethodUnimplemented.

  • API CHANGE: Renamed RGeo::Features to RGeo::Feature, RGeo::Errors to RGeo::Error, and RGeo::ImplHelpers to RGeo::ImplHelper. The old pluralized names are aliased to the new names for now for backward compatibility, though they are deprecated and will be removed shortly.

  • Renamed the tests directory to test. Generally speaking, I’m getting rid of pluralized names.

  • Added RGeo::CoordSys::Proj4 representing a proj4 coordinate system. It uses the proj4 library.

  • Added Factory#proj4 as an optional method indicated by the :proj4 capability.

  • All existing geometry implementations now support proj4.

  • You can now cause casting to transform between proj4 projections by specifying the :project parameter.

  • A Geography implementation with an arbitrary projection backed by proj4 is now available.

0.1.19 / 2010-11-23

  • The GEOS implementation now supports ZM (4-dimensional data), via a wrapper since the underlying GEOS library doesn’t support 4d data natively.

  • Added a BoundingBox tool to the Cartesian module.

  • Fleshed out a few more methods of SimpleCartesian and SimpleSpherical.

  • The simple Cartesian point implementation included a bit more leakage from the Geography implementations (pole equivalence, lat/lon methods). Fixed.

  • Under certain circumstances, collections and polygons using GEOS could lose their Z or M coordinates. Fixed.

  • There were some cases when implementations based on ImplHelpers were pulling in the wrong methods. Fixed.

  • Taking the envelope of an empty GEOS collection yielded an illegal object that could cause a crash. Fixed. It now yields an empty collection.

  • Taking the boundary of an empty GEOS collection yielded nil. Fixed. It now yields an empty collection.

0.1.18 / 2010-11-22

  • API CHANGE: GeoJSON defaults to no JSON parser rather than to the JSON library. GeoJSON also fails better when attempting to use a JSON parser that isn’t installed.

  • Added a decorator tool for FactoryGenerator

  • Added an analysis module for Cartesian geometries, and implemented an algorithm for determining whether a ring is clockwise or counterclockwise. (We needed this to interpret shapefiles.)

  • First pass implementation of shapefile reading. It passes a basic test suite I borrowed from shapelib, but I haven’t yet done an exhaustive test on every case.

  • The simple Cartesian implementation mistakenly clamped x and y to lat/lon limits. Fixed.

0.1.17 / 2010-11-20

  • Implemented ActiveRecord adapters that cover MySQL Spatial for the mysql and mysql2 gems. SpatiaLite and PostGIS adapters are coming later.

  • Added and documented FactoryGenerator.

  • API CHANGE: WKRep parsers now take FactoryGenerator rather than the ad-hoc factory_from_srid.

  • API CHANGE: Factory#override_cast now takes its optional flags in a hash so it can be extended more cleanly in the future.

0.1.16 / 2010-11-18

  • Test coverage for WKB generator and parser; fixed a few bugs.

  • Eliminated the hard dependency on the JSON gem, and allow configuration of GeoJSON with an alternate JSON parser such as YAJL or ActiveSupport.

  • API CHANGE: geo factory is now a hash option in GeoJSON, and is now optional.

  • GeoJSON now handles Z and M coordinates, according to the capabilities of the geo factory.

  • GeoJSON feature objects can now handle null geometry and null properties, per the spec.

  • Factory::cast now optionally lets you pass the parameters as a hash.

0.1.15 / 2010-11-08

  • Cleanup, fixes, documentation, and partial test coverage in the WKT/WKB implementations.

  • Implemented autoload for the various modules.

  • A few minor fixes.

0.1.14 / 2010-11-04

  • Introduced capability checking API.

  • Standardized API and semantics for handling of points with Z and/or M coordinates.

  • Fixed several problems with Z coordinates in GEOS.

  • Fixed exceptions and wrong values returned from GEOS LineString#start_point and LineString#end_point.

  • Fixed crash in GEOS LineString#point_n when the index was out of bounds.

  • Fixed GEOS line string closed test.

  • Implemented support for Z and M coordinates in GEOS, SimpleCartesian, SimpleMercator, and SimpleSpherical. GEOS and SimpleMercator support Z or M but not both at once, because the underlying GEOS library supports only 3 dimensions. SimpleCartesian and SimpleSpherical can support both at once.

  • Implemented parsers and generators for WKT/WKB and EWKT/EWKB in Ruby, providing full support for all generally used cases including 3 and 4 dimensional data and embedded SRIDs. This implementation is used by default by all feature implementations except GEOS, which continues to use its own internal WKT/WKB implementation unless the Ruby implementation is invoked explicitly.

0.1.13 / 2010-10-26

  • Reworked the way casting is done. Casting has two dimensions: factory casting and type casting, either or both of which can be done at once. Implemented a standard casting algorithm to handle these cases, and an override mechanism for factories that want to do some of their own casting. Removed Factory#cast and Geometry#cast, and implemented a global Features::cast entry point instead.

  • All factory and relational methods now perform auto-casting on inputs.

  • Removed the “auto-flattening” behavior of Factory#multi_point, Factory#multi_line_string, and Factory#multi_polygon because it seemed overkill for factory methods. These methods now just attempt to auto-cast the immediate objects.

  • Filled out more test cases for SimpleSpherical.

  • Provided SimpleCartesian as a fallback implementation in case Geos is not available. SimpleCartesian is like SimpleSpherical in that some operations are not provided, but it is pure ruby and doesn’t depend on external libraries.

  • Improved feature type checking facilities.

  • Documentation updates.

0.1.12 / 2010-10-23

  • API CHANGE: Factory#coerce renamed to Factory#cast. I think this should be the final name for this function.

  • Some new tests and a lot of fixes in SimpleMercator and SimpleSpherical.

  • Implemented a few more pieces of SimpleSpherical. Notably, LineString#is_simple? (which should now allow LinearRing to work).

  • Classes that included Features::Geometry had their === operator erroneously overridden. Fixed.

  • A few more documentation updates.

0.1.11 / 2010-10-21

  • API CHANGE: Factory#convert renamed to Factory#coerce.

  • Some implementations that inherit from RGeo::Features::Geometry (e.g. the Geography implementations) raised Unimplemented from operator implementations because they had aliased the wrong methods. Fixed.

  • Geos coercer didn’t properly coerce “contained” elements in a compound geometry. Fixed.

  • The SimpleMercator and SimpleSpherical factories failed to properly check and coerce inputs into the typed collection methods. Fixed.

  • The options for the SimpleMercator factory were not documented and didn’t work. Fixed.

  • A bunch of additional test cases and minor fixes for SimpleMercator and SimpleSpherical.

0.1.10 / 2010-10-19

Initial public release. This release is considered pre-alpha quality and is being released for experimentation and feedback. We are using it in production in a limited capacity at GeoPage, but we do not yet recommend general production deployment because there are a number of known bugs and incomplete areas, and many features and APIs are still in flux.

Status:

  • GEOS-based Cartesian implementation is tested and should be fairly stable.

  • GeoJSON parsers and generators are tested and should be fairly stable.

  • Parts of SimpleMercator implementation are fairly stable, but test coverage of more advanced features is still lacking.

  • SimpleSpherical implementation is under construction and not yet available.

  • Rails (ActiveRecord or ActiveModel) integration is pending.

  • Several other integration features, including possible SimpleGeo integration, are pending.

Changes since 0.1.9:

  • Eliminated a few (harmless) compiler warnings when compiling the GEOS bridge under Ruby 1.9.2 on Snow Leopard.

  • Modified file headers, copyright notices, and README files for public release.

  • Changed name from “gp_rgeo” to “rgeo” for public release.

0.1.9

This and earlier versions were tested internally at GeoPage, Inc. but not publicly released.