I am often asked about what’s new in the world of Earth Engine. Most of our users know about the big things, like script modules in the Earth Engine Code Editor, which we launched last fall to help our users to organize their code and share their own libraries. However, we’re also constantly making smaller additions and improvements to the platform, too. In this post I’ll gather up some of the lesser-known new Earth Engine features from the past year.

A few of the tabular datasets now available in the Earth Engine public data catalog.

One pretty significant new feature is the ability to store tabular spatial data — specifically, tables of points, lines, and polygons with attributes — directly in Earth Engine. You can upload your own Shapefiles, and we’ve started growing a catalog of commonly-used public data tables. Some of these are illustrated above, including the US Department of State’s Large Scale International Boundary Polygons, the US Census Bureau’s TIGER roads database, and UNEP’s World Database of Protected Areas (both polygons and points). We also added a new function called FeatureCollection.style() that you can use to style and visualize this sort of tabular data.

We also added a number of new functions to help with machine learning tasks. For example, we added a new tool for regularized linear regression, called ee.Classifier.gmoLinearRegression() , which you train the same way as the other classification and regression tools in the ee.Classifier package. We also added a function called ee.Image.stratifiedSample() that performs stratified random sampling, a technique often used to help build training datasets for machine learning. Along similar lines, we added a function called ee.Image.random() that generates images with pseudorandom pixel values, which you can use as a primitive to construct your own random sampling schemes.

A simple example of stratified random sampling: choosing 20 points from each of three classes.

For linear algebra experts, we added several new matrix decomposition functions that you can apply to Array objects or to each pixel in array-valued Image objects. These functions, which have names like ee.Array.matrixCholeskyDecomposition() , implement Cholesky, singular-value, LU, and QR decomposition. You can use these functions to implement a wide variety of efficient linear models and other matrix operations.

Speaking of matrices, we added a new reducer, ee.Reducer.autoHistogram() , that computes a histogram over its input data and returns the result as an Nx2 matrix. Because the result is an array, you can use this reducer together with ee.ImageCollection.reduce() to turn an image collection into an image where every pixel is a histogram of the input values at that pixel location. One column of the result matrix contains the lower bounds of each histogram bucket, and the other column contains the corresponding histogram counts.

Sometimes new functions fill in basic gaps that our users tell us about. For example, we added two other new reducers, ee.Reducer.last() and ee.Reducer.lastNonNull() , which select the final elements in a list or collection, complementing the existing first() and firstNonNull() reducers. We also added an ee.Image.blend() algorithm that performs simple alpha blending on a pair of images: it’s equivalent to putting the two images into a collection and calling mosaic() , but it’s simpler and a little more efficient.

Simple image compositing with ee.Image.blend().

Finally, we’ve extended the capabilities of some of our existing functions. For example, we updated the Landsat.calibratedRadiance() and Landsat.simpleComposite() functions to support the new Landsat Collection 1 data that the USGS began producing at scale last year. We also added a new skipEmptyTiles option to our image export and map export functions, to help users work with large sparse datasets more efficiently. Similarly, we added a new tileScale parameter to the ee.Image.sample() function and its relative ee.Image.sampleRegions() , analogous to the existing parameter on functions like ee.Image.reduceRegion() . Advanced users who are performing complex or memory-intensive image processing operations can use this new parameter to tune how those operations are parallelized when sampling the results.

In an upcoming post I’ll also review some of the new datasets that we’ve added to the Earth Engine public data catalog over the past year. If these updates are useful to you, don’t forget to sign up for the Earth Engine developers mailing list (also known as the Help Forum), where we announce new features and datasets periodically. You receive an invitation to the forum when you register for Earth Engine, but if your invitation expired please don’t hesitate to click the “Contact the owner” link to ask to be re-invited.