Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
giswqs
GitHub Repository: giswqs/geemap
Path: blob/master/examples/javascripts/grid.js
2313 views
1
/*
2
3
A sample Earth Engine JavaScript library.
4
The script is adapted from https://code.earthengine.google.com/2bca4e5f36d5a2d642475a98fa421fa9
5
Credits to Gennadii Donchyts.
6
7
*/
8
9
var generateRasterGrid= function(origin, dx, dy, proj) {
10
var coords = origin.transform(proj).coordinates();
11
origin = ee.Image.constant(coords.get(0)).addBands(ee.Image.constant(coords.get(1)));
12
13
var pixelCoords = ee.Image.pixelCoordinates(proj);
14
15
var grid = pixelCoords
16
.subtract(origin)
17
.divide([dx, dy]).floor()
18
.toInt().reduce(ee.Reducer.sum()).bitwiseAnd(1).rename('grid');
19
20
var xy = pixelCoords.reproject(proj.translate(coords.get(0), coords.get(1)).scale(dx, dy));
21
22
var id = xy.multiply(ee.Image.constant([1, 1000000])).reduce(ee.Reducer.sum()).rename('id');
23
24
return grid
25
.addBands(id)
26
.addBands(xy);
27
}
28
29
30
/***
31
* Generates a regular grid using given bounds, specified as geometry.
32
*/
33
var generateGrid = function(xmin, ymin, xmax, ymax, dx, dy, marginx, marginy, opt_proj) {
34
var proj = opt_proj || 'EPSG:4326';
35
36
dx = ee.Number(dx);
37
dy = ee.Number(dy);
38
39
var xx = ee.List.sequence(xmin, ee.Number(xmax).subtract(ee.Number(dx).multiply(0.1)), dx);
40
var yy = ee.List.sequence(ymin, ee.Number(ymax).subtract(ee.Number(dy).multiply(0.1)), dy);
41
42
var cells = xx.map(function(x) {
43
return yy.map(function(y) {
44
var x1 = ee.Number(x).subtract(marginx);
45
var x2 = ee.Number(x).add(ee.Number(dx)).add(marginx);
46
var y1 = ee.Number(y).subtract(marginy);
47
var y2 = ee.Number(y).add(ee.Number(dy)).add(marginy);
48
49
var coords = ee.List([x1, y1, x2, y2]);
50
var rect = ee.Algorithms.GeometryConstructors.Rectangle(coords, proj, false);
51
52
var nx = x1.add(dx.multiply(0.5)).subtract(xmin).divide(dx).floor();
53
var ny = y1.add(dy.multiply(0.5)).subtract(ymin).divide(dy).floor();
54
55
return ee.Feature(rect)
56
.set({
57
nx: nx.format('%d'),
58
ny: ny.format('%d'),
59
});
60
// .set({cell_id: x1.format('%.3f').cat('_').cat(y1.format('%.3f')) })
61
});
62
}).flatten();
63
64
return ee.FeatureCollection(cells);
65
};
66
67
68
var grid_test = function() {
69
70
var gridRaster = generateRasterGrid(ee.Geometry.Point(0, 0), 10, 10, ee.Projection('EPSG:4326'));
71
Map.addLayer(gridRaster.select('id').randomVisualizer(), {}, 'Grid raster', true, 0.5);
72
73
var gridVector = generateGrid(-180, -70, 180, 70, 10, 10, 0, 0);
74
style = {'fillColor': '00000000'};
75
Map.addLayer(gridVector.style(style), {}, 'Grid vector');
76
77
}
78
79
exports.generateGrid = generateGrid;
80
exports.generateRasterGrid = generateRasterGrid;
81
exports.grid_test = grid_test;
82
83