You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.2 KiB
70 lines
2.2 KiB
1 year ago
|
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);
|
||
|
}
|
||
|
}
|