lib/rgeo/geos/factory.rb in rgeo-0.1.10 vs lib/rgeo/geos/factory.rb in rgeo-0.1.11
- old
+ new
@@ -64,11 +64,12 @@
# factory. This controls the number of line segments used to
# approximate curves. The default is 1, which causes, for
# example, the buffer around a point to be approximated by a
# 4-sided polygon. A resolution of 2 would cause that buffer
# to be approximated by an 8-sided polygon. The exact behavior
- # for different kinds of buffers is not well-defined.
+ # for different kinds of buffers is internal to GEOS, and is not
+ # well-specified as far as I can tell.
# <tt>:srid</tt>::
# Set the SRID returned by geometries created by this factory.
# Default is 0.
def create(opts_={})
@@ -200,13 +201,13 @@
elems_ = elems_.to_a unless elems_.kind_of?(::Array)
MultiPolygonImpl.create(self, elems_) rescue nil
end
- # See ::RGeo::Features::Factory#convert
+ # See ::RGeo::Features::Factory#coerce
- def convert(original_, force_new_=false)
+ def coerce(original_, force_new_=false)
return nil unless Geos.supported?
case original_
when GeometryImpl
if original_.factory != self
result_ = original_.dup
@@ -222,24 +223,24 @@
PointImpl.create(self, original_.x, original_.y, original_.z)
else
PointImpl.create(self, original_.x, original_.y)
end
when Features::Line
- LineImpl.create(self, original_.start_point, original_.end_point)
+ LineImpl.create(self, coerce(original_.start_point), coerce(original_.end_point))
when Features::LinearRing
- LinearRingImpl.create(self, original_.points)
+ LinearRingImpl.create(self, original_.points.map{ |g_| coerce(g_) })
when Features::LineString
- LineStringImpl.create(self, original_.points)
+ LineStringImpl.create(self, original_.points.map{ |g_| coerce(g_) })
when Features::Polygon
- PolygonImpl.create(self, original_.exterior_ring, original_.interior_rings)
+ PolygonImpl.create(self, coerce(original_.exterior_ring), original_.interior_rings.map{ |g_| coerce(g_) })
when Features::MultiPoint
- MultiPointImpl.create(self, original_.to_a)
+ MultiPointImpl.create(self, original_.to_a.map{ |g_| coerce(g_) })
when Features::MultiLineString
- MultiLineStringImpl.create(self, original_.to_a)
+ MultiLineStringImpl.create(self, original_.to_a.map{ |g_| coerce(g_) })
when Features::MultiPolygon
- MultiPolygonImpl.create(self, original_.to_a)
+ MultiPolygonImpl.create(self, original_.to_a.map{ |g_| coerce(g_) })
when Features::GeometryCollection
- GeometryCollectionImpl.create(self, original_.to_a)
+ GeometryCollectionImpl.create(self, original_.to_a.map{ |g_| coerce(g_) })
else
nil
end
end