| function streamGeometry(geometry, stream) { |
| if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) { |
| streamGeometryType[geometry.type](geometry, stream); |
| } |
| } |
|
|
| var streamObjectType = { |
| Feature: function(object, stream) { |
| streamGeometry(object.geometry, stream); |
| }, |
| FeatureCollection: function(object, stream) { |
| var features = object.features, i = -1, n = features.length; |
| while (++i < n) streamGeometry(features[i].geometry, stream); |
| } |
| }; |
|
|
| var streamGeometryType = { |
| Sphere: function(object, stream) { |
| stream.sphere(); |
| }, |
| Point: function(object, stream) { |
| object = object.coordinates; |
| stream.point(object[0], object[1], object[2]); |
| }, |
| MultiPoint: function(object, stream) { |
| var coordinates = object.coordinates, i = -1, n = coordinates.length; |
| while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]); |
| }, |
| LineString: function(object, stream) { |
| streamLine(object.coordinates, stream, 0); |
| }, |
| MultiLineString: function(object, stream) { |
| var coordinates = object.coordinates, i = -1, n = coordinates.length; |
| while (++i < n) streamLine(coordinates[i], stream, 0); |
| }, |
| Polygon: function(object, stream) { |
| streamPolygon(object.coordinates, stream); |
| }, |
| MultiPolygon: function(object, stream) { |
| var coordinates = object.coordinates, i = -1, n = coordinates.length; |
| while (++i < n) streamPolygon(coordinates[i], stream); |
| }, |
| GeometryCollection: function(object, stream) { |
| var geometries = object.geometries, i = -1, n = geometries.length; |
| while (++i < n) streamGeometry(geometries[i], stream); |
| } |
| }; |
|
|
| function streamLine(coordinates, stream, closed) { |
| var i = -1, n = coordinates.length - closed, coordinate; |
| stream.lineStart(); |
| while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]); |
| stream.lineEnd(); |
| } |
|
|
| function streamPolygon(coordinates, stream) { |
| var i = -1, n = coordinates.length; |
| stream.polygonStart(); |
| while (++i < n) streamLine(coordinates[i], stream, 1); |
| stream.polygonEnd(); |
| } |
|
|
| export default function(object, stream) { |
| if (object && streamObjectType.hasOwnProperty(object.type)) { |
| streamObjectType[object.type](object, stream); |
| } else { |
| streamGeometry(object, stream); |
| } |
| } |
|
|