Avg Release Cycle
195 days ago
- Marshal and YAML serialization now fully implemented for geometries.
- The spatial predicates for objects using the 4D (ZM) Geos factory almost always returned false because they weren't casting correctly. Fixed.
- Proj#canonical_str and the Geos implementations of Geometry#as_text were returning strings encoded as "ASCII-8BIT", which was causing strange binary output in YAML serialization, among other things. Now fixed. These strings are now encoded as "US-ASCII".
- YAML serialization for 4D (ZM) Geos factories didn't preserve coordinate systems. Fixed.
- Geometry#relate? was incorrectly spelled "Geometry#relate" in the Feature::Geometry module and in some (but not all) implementations, leading to various types of method not found errors. Fixed. We'll keep #relate as a deprecated alias for the time being.
- 🛠 Cloning a Geos CAPI factory caused a segfault. Fixed.
- 📜 Parsing a "well-known" format string using the ffi-geos implementation returned the low-level ffi-geos object rather than the RGeo feature if the generator was set to :geos. Fixed.
- GeometryCollection#each now returns an Enumerator if no block is given.
- Pure Ruby factories (simple_spherical, simple_cartesian) now support a :uses_lenient_assertions option, which disables assertion checking on LinearRing, Polygon, and MultiPolygon construction, since those checks can be expensive for large geometries.
- 🗄 Fixed Rails 3.2 deprecation warning in SRSDatabase::ActiveRecordTable.
- ✅ Fixed an issue with the ActiveRecordTable tests on ActiveRecord 3.2.
- 👍 Further work towards YAML and mashal serialization support. Factories are now done, but geometries are not. I'm working actively on geometry serialization; it should be in place in the next release.
- 📚 Reworked the terminology on equivalence levels. The documentation now names the three levels "spatial", "representational", and "objective" equivalence.
- Some geometry implementations didn't implement the == operator, resulting in various problems, including inability to set ActiveRecord attributes when using an implementation (such as simple_spherical polygons) that doesn't provide spatial equivalence tests. Fixed. The interfaces now specify that all implementations must implement the == operator and the eql? method, and should degrade to stronger forms of equivalence if weaker forms are not available. (Reported by Phil Murray.)
- ✅ Added Geometry#rep_equals? to test representational equivalence without the fallback behavior of Geometry#eql?
- The FFI-GEOS implementation now uses prepared geometries.
- 🛠 Fixed a segfault that sometimes happened when passing a non-GEOS geometry as an argument to a GEOS function under Ruby 1.8.7. (Reported by Greg Hazel.)
- A few minor optimizations in the C extension for GEOS.
- Recognizes MultiPoint WKTs in which individual points are not contained in parens. This is technically incorrect syntax, but apparently there are examples in the wild so we are now supporting it. (Reported by J Smith.)
- The Geos CAPI implementation sometimes returned the wrong result from GeometryCollection#geometry_n. Fixed.
- 🛠 Fixed a hang when validating certain projected linestrings. (Patch contributed by Toby Rahilly.)
- ⚡️ Several rdoc updates (including a contribution by Andy Allan).
- ⚠ Separated declarations and code in the C extensions to avert warnings on some compilers.
- Some objects can now be serialized and deserialized via Marshal or YAML. Supported objects include OGC coordinate systems, Proj4 coordinate systems, and WKRep parsers/generators. Factories and geometries will be supported shortly.
- The GEOS CAPI implementation can now use prepared geometries to speed up certain operations. The GEOS FFI implementation will do the same shortly.
- 🛠 Calling dup on a Proj4 object caused a segfault. Fixed.
- 🛠 Fixed an exception in RGeo::Cartesian::BoundingBox#to_geometry. (Thanks to Travis Dempsey.)
- WKTGenerator generated incorrect tag names for subtypes of LineString. Fixed.
- Installation automatically finds the KyngChaos GEOS and Proj4 frameworks for Mac OS X. (Thanks to benchi.)
- 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.
- 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.
- 🔧 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.
- 🏗 A .gemspec file is now available for gem building and bundler git integration.