Extracting pixel values by points and converting to table in Google Earth Engine? The 2019 Stack Overflow Developer Survey Results Are In Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Extracting pixel values by points from multi-band image and converting to table in Google Earth Engine?Extract Pixel Values for Multiple Polygons and ImagesApplying geometry to a collectionNearest Neighbour Pixel Value Google Earth EngineGoogle Earth Engine - Map.addLayerExtracting pixel values by points from multi-band image and converting to table in Google Earth Engine?Google Earth Engine, how to distinguish between rivers/streams and ponds/lakes in a water maskExtracting mean values in Earth EngineExtracting color values from polygons drawn in Google Earth Engine?Changing pixel type of image in Google Earth Engine?Extracting pixel time series from Google Earth EngineConverting Raster to Vector, Google Earth Engine,Extracting Soil moisture value using Google Earth Engine?
How is simplicity better than precision and clarity in prose?
Hopping to infinity along a string of digits
Is a pteranodon too powerful as a beast companion for a beast master?
Why can't devices on different VLANs, but on the same subnet, communicate?
Sort list of array linked objects by keys and values
Are spiders unable to hurt humans, especially very small spiders?
How can I define good in a religion that claims no moral authority?
What was the last x86 CPU that did not have the x87 floating-point unit built in?
Working through the single responsibility principle (SRP) in Python when calls are expensive
Take groceries in checked luggage
Typeface like Times New Roman but with "tied" percent sign
Are my PIs rude or am I just being too sensitive?
The variadic template constructor of my class cannot modify my class members, why is that so?
First use of “packing” as in carrying a gun
verb not working in beamer even though I use [fragile]
How to copy the contents of all files with a certain name into a new file?
Why can't wing-mounted spoilers be used to steepen approaches?
Derivation tree not rendering
What can I do if neighbor is blocking my solar panels intentionally?
Is every episode of "Where are my Pants?" identical?
ELI5: Why do they say that Israel would have been the fourth country to land a spacecraft on the Moon and why do they call it low cost?
Make it rain characters
How do I add random spotting to the same face in cycles?
In horse breeding, what is the female equivalent of putting a horse out "to stud"?
Extracting pixel values by points and converting to table in Google Earth Engine?
The 2019 Stack Overflow Developer Survey Results Are In
Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Extracting pixel values by points from multi-band image and converting to table in Google Earth Engine?Extract Pixel Values for Multiple Polygons and ImagesApplying geometry to a collectionNearest Neighbour Pixel Value Google Earth EngineGoogle Earth Engine - Map.addLayerExtracting pixel values by points from multi-band image and converting to table in Google Earth Engine?Google Earth Engine, how to distinguish between rivers/streams and ponds/lakes in a water maskExtracting mean values in Earth EngineExtracting color values from polygons drawn in Google Earth Engine?Changing pixel type of image in Google Earth Engine?Extracting pixel time series from Google Earth EngineConverting Raster to Vector, Google Earth Engine,Extracting Soil moisture value using Google Earth Engine?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
I realise that this question has been asked before link to previous question; however, I can't get the code to work. It runs, but the value of the raster isn't added to the table it just prints the point attributes
var yearly = ee.ImageCollection('JRC/GSW1_0/YearlyHistory');
Map.addLayer(yearly, , 'yearly', false);
var fg_points = ee.FeatureCollection('ft:1quTYHcLHQNy1yrssUPaubflVBEkGGMoPFLdbc_-J')
// Empty Collection to fill
var ft = ee.FeatureCollection(ee.List([]))
var fill = function(img, ini)
// type cast
var inift = ee.FeatureCollection(ini)
// gets the values for the points in the current img
var ft2 = img.reduceRegions(fg_points, ee.Reducer.first(),30)
// gets the date of the img
var date = img.date().format()
// writes the date in each feature
var ft3 = ft2.map(function(f)return f.set("date", date))
// merges the FeatureCollections
return inift.merge(ft3)
// Iterates over the ImageCollection
var newft = ee.FeatureCollection(yearly.iterate(fill, ft));
// Export
Export.table.toDrive(newft,
"export_Points",
"export_Points",
"export_Points");
google-earth-engine
add a comment |
I realise that this question has been asked before link to previous question; however, I can't get the code to work. It runs, but the value of the raster isn't added to the table it just prints the point attributes
var yearly = ee.ImageCollection('JRC/GSW1_0/YearlyHistory');
Map.addLayer(yearly, , 'yearly', false);
var fg_points = ee.FeatureCollection('ft:1quTYHcLHQNy1yrssUPaubflVBEkGGMoPFLdbc_-J')
// Empty Collection to fill
var ft = ee.FeatureCollection(ee.List([]))
var fill = function(img, ini)
// type cast
var inift = ee.FeatureCollection(ini)
// gets the values for the points in the current img
var ft2 = img.reduceRegions(fg_points, ee.Reducer.first(),30)
// gets the date of the img
var date = img.date().format()
// writes the date in each feature
var ft3 = ft2.map(function(f)return f.set("date", date))
// merges the FeatureCollections
return inift.merge(ft3)
// Iterates over the ImageCollection
var newft = ee.FeatureCollection(yearly.iterate(fill, ft));
// Export
Export.table.toDrive(newft,
"export_Points",
"export_Points",
"export_Points");
google-earth-engine
add a comment |
I realise that this question has been asked before link to previous question; however, I can't get the code to work. It runs, but the value of the raster isn't added to the table it just prints the point attributes
var yearly = ee.ImageCollection('JRC/GSW1_0/YearlyHistory');
Map.addLayer(yearly, , 'yearly', false);
var fg_points = ee.FeatureCollection('ft:1quTYHcLHQNy1yrssUPaubflVBEkGGMoPFLdbc_-J')
// Empty Collection to fill
var ft = ee.FeatureCollection(ee.List([]))
var fill = function(img, ini)
// type cast
var inift = ee.FeatureCollection(ini)
// gets the values for the points in the current img
var ft2 = img.reduceRegions(fg_points, ee.Reducer.first(),30)
// gets the date of the img
var date = img.date().format()
// writes the date in each feature
var ft3 = ft2.map(function(f)return f.set("date", date))
// merges the FeatureCollections
return inift.merge(ft3)
// Iterates over the ImageCollection
var newft = ee.FeatureCollection(yearly.iterate(fill, ft));
// Export
Export.table.toDrive(newft,
"export_Points",
"export_Points",
"export_Points");
google-earth-engine
I realise that this question has been asked before link to previous question; however, I can't get the code to work. It runs, but the value of the raster isn't added to the table it just prints the point attributes
var yearly = ee.ImageCollection('JRC/GSW1_0/YearlyHistory');
Map.addLayer(yearly, , 'yearly', false);
var fg_points = ee.FeatureCollection('ft:1quTYHcLHQNy1yrssUPaubflVBEkGGMoPFLdbc_-J')
// Empty Collection to fill
var ft = ee.FeatureCollection(ee.List([]))
var fill = function(img, ini)
// type cast
var inift = ee.FeatureCollection(ini)
// gets the values for the points in the current img
var ft2 = img.reduceRegions(fg_points, ee.Reducer.first(),30)
// gets the date of the img
var date = img.date().format()
// writes the date in each feature
var ft3 = ft2.map(function(f)return f.set("date", date))
// merges the FeatureCollections
return inift.merge(ft3)
// Iterates over the ImageCollection
var newft = ee.FeatureCollection(yearly.iterate(fill, ft));
// Export
Export.table.toDrive(newft,
"export_Points",
"export_Points",
"export_Points");
google-earth-engine
google-earth-engine
edited Jul 24 '18 at 21:39
PolyGeo♦
53.9k1782246
53.9k1782246
asked Dec 14 '17 at 17:58
Thomas WorthingtonThomas Worthington
6317
6317
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
I have no access to your fusion table, so I made up one to make the answer.
First approach: 2D table
var yearly = ee.ImageCollection('JRC/GSW1_0/YearlyHistory');
// function to map over the FeatureCollection
var mapfunc = function(feat)
// get feature geometry
var geom = feat.geometry()
// function to iterate over the yearly ImageCollection
// the initial object for the iteration is the feature
var addProp = function(img, f)
// cast Feature
var newf = ee.Feature(f)
// get date as string
var date = img.date().format()
// extract the value (first) of 'waterClass' in the feature
var value = img.reduceRegion(ee.Reducer.first(), geom, 30).get('waterClass')
// if the value is not null, set the values as a property of the feature. The name of the property will be the date
return ee.Feature(ee.Algorithms.If(value,
newf.set(date, ee.String(value)),
newf.set(date, ee.String('No data'))))
var newfeat = ee.Feature(yearly.iterate(addProp, feat))
return newfeat
;
var newft = fg_points.map(mapfunc);
// Export
Export.table.toDrive(newft,
"export_Points",
"export_Points",
"export_Points");
Second approach: 1D table
var yearly = ee.ImageCollection('JRC/GSW1_0/YearlyHistory');
// function to map over the FeatureCollection
var mapfunc = function(feat)
// get feature id
var id = ee.String(feat.id())
// get feature geometry
var geom = feat.geometry()
// make an empty list to store the features
var newfc = ee.List([])
// function to iterate over the ImageCollection
var addProp = function(img, fc)
// the initial value is the empty list
fc = ee.List(fc)
// get the date as string
var date = img.date().format()
// extract the value of 'waterClass'
var value = img.reduceRegion(ee.Reducer.first(), geom, 30).get('waterClass')
// If the value is null then store it as 'No data'
var val = ee.String(ee.Algorithms.If(value, ee.String(value), ee.String('No data')))
// make the name of the feature (feat_id-date)
var featname = ee.String("feat_").cat(id).cat(ee.String("-")).cat(date)
// make the Feature
var newfeat = ee.Feature(geom, name:featname,
value:val)
// add the value to the list
return fc.add(newfeat)
var newfeat = ee.FeatureCollection(ee.List(yearly.iterate(addProp, newfc)))
return newfeat
;
var newft = fg_points.map(mapfunc).flatten();
Export.table.toDrive(newft,
"export_Points",
"export_Points",
"export_Points");
If features in your FeatureCollection have a name property (or something that identifies each feat) you can change in the second approach:
var id = ee.String(feat.id())
for
var id = ee.String(feat.get('name'))
1
I would recommend annotating the code, commenting on what, each line, is doing.
– csheth
Oct 10 '18 at 7:21
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "79"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f265392%2fextracting-pixel-values-by-points-and-converting-to-table-in-google-earth-engine%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
I have no access to your fusion table, so I made up one to make the answer.
First approach: 2D table
var yearly = ee.ImageCollection('JRC/GSW1_0/YearlyHistory');
// function to map over the FeatureCollection
var mapfunc = function(feat)
// get feature geometry
var geom = feat.geometry()
// function to iterate over the yearly ImageCollection
// the initial object for the iteration is the feature
var addProp = function(img, f)
// cast Feature
var newf = ee.Feature(f)
// get date as string
var date = img.date().format()
// extract the value (first) of 'waterClass' in the feature
var value = img.reduceRegion(ee.Reducer.first(), geom, 30).get('waterClass')
// if the value is not null, set the values as a property of the feature. The name of the property will be the date
return ee.Feature(ee.Algorithms.If(value,
newf.set(date, ee.String(value)),
newf.set(date, ee.String('No data'))))
var newfeat = ee.Feature(yearly.iterate(addProp, feat))
return newfeat
;
var newft = fg_points.map(mapfunc);
// Export
Export.table.toDrive(newft,
"export_Points",
"export_Points",
"export_Points");
Second approach: 1D table
var yearly = ee.ImageCollection('JRC/GSW1_0/YearlyHistory');
// function to map over the FeatureCollection
var mapfunc = function(feat)
// get feature id
var id = ee.String(feat.id())
// get feature geometry
var geom = feat.geometry()
// make an empty list to store the features
var newfc = ee.List([])
// function to iterate over the ImageCollection
var addProp = function(img, fc)
// the initial value is the empty list
fc = ee.List(fc)
// get the date as string
var date = img.date().format()
// extract the value of 'waterClass'
var value = img.reduceRegion(ee.Reducer.first(), geom, 30).get('waterClass')
// If the value is null then store it as 'No data'
var val = ee.String(ee.Algorithms.If(value, ee.String(value), ee.String('No data')))
// make the name of the feature (feat_id-date)
var featname = ee.String("feat_").cat(id).cat(ee.String("-")).cat(date)
// make the Feature
var newfeat = ee.Feature(geom, name:featname,
value:val)
// add the value to the list
return fc.add(newfeat)
var newfeat = ee.FeatureCollection(ee.List(yearly.iterate(addProp, newfc)))
return newfeat
;
var newft = fg_points.map(mapfunc).flatten();
Export.table.toDrive(newft,
"export_Points",
"export_Points",
"export_Points");
If features in your FeatureCollection have a name property (or something that identifies each feat) you can change in the second approach:
var id = ee.String(feat.id())
for
var id = ee.String(feat.get('name'))
1
I would recommend annotating the code, commenting on what, each line, is doing.
– csheth
Oct 10 '18 at 7:21
add a comment |
I have no access to your fusion table, so I made up one to make the answer.
First approach: 2D table
var yearly = ee.ImageCollection('JRC/GSW1_0/YearlyHistory');
// function to map over the FeatureCollection
var mapfunc = function(feat)
// get feature geometry
var geom = feat.geometry()
// function to iterate over the yearly ImageCollection
// the initial object for the iteration is the feature
var addProp = function(img, f)
// cast Feature
var newf = ee.Feature(f)
// get date as string
var date = img.date().format()
// extract the value (first) of 'waterClass' in the feature
var value = img.reduceRegion(ee.Reducer.first(), geom, 30).get('waterClass')
// if the value is not null, set the values as a property of the feature. The name of the property will be the date
return ee.Feature(ee.Algorithms.If(value,
newf.set(date, ee.String(value)),
newf.set(date, ee.String('No data'))))
var newfeat = ee.Feature(yearly.iterate(addProp, feat))
return newfeat
;
var newft = fg_points.map(mapfunc);
// Export
Export.table.toDrive(newft,
"export_Points",
"export_Points",
"export_Points");
Second approach: 1D table
var yearly = ee.ImageCollection('JRC/GSW1_0/YearlyHistory');
// function to map over the FeatureCollection
var mapfunc = function(feat)
// get feature id
var id = ee.String(feat.id())
// get feature geometry
var geom = feat.geometry()
// make an empty list to store the features
var newfc = ee.List([])
// function to iterate over the ImageCollection
var addProp = function(img, fc)
// the initial value is the empty list
fc = ee.List(fc)
// get the date as string
var date = img.date().format()
// extract the value of 'waterClass'
var value = img.reduceRegion(ee.Reducer.first(), geom, 30).get('waterClass')
// If the value is null then store it as 'No data'
var val = ee.String(ee.Algorithms.If(value, ee.String(value), ee.String('No data')))
// make the name of the feature (feat_id-date)
var featname = ee.String("feat_").cat(id).cat(ee.String("-")).cat(date)
// make the Feature
var newfeat = ee.Feature(geom, name:featname,
value:val)
// add the value to the list
return fc.add(newfeat)
var newfeat = ee.FeatureCollection(ee.List(yearly.iterate(addProp, newfc)))
return newfeat
;
var newft = fg_points.map(mapfunc).flatten();
Export.table.toDrive(newft,
"export_Points",
"export_Points",
"export_Points");
If features in your FeatureCollection have a name property (or something that identifies each feat) you can change in the second approach:
var id = ee.String(feat.id())
for
var id = ee.String(feat.get('name'))
1
I would recommend annotating the code, commenting on what, each line, is doing.
– csheth
Oct 10 '18 at 7:21
add a comment |
I have no access to your fusion table, so I made up one to make the answer.
First approach: 2D table
var yearly = ee.ImageCollection('JRC/GSW1_0/YearlyHistory');
// function to map over the FeatureCollection
var mapfunc = function(feat)
// get feature geometry
var geom = feat.geometry()
// function to iterate over the yearly ImageCollection
// the initial object for the iteration is the feature
var addProp = function(img, f)
// cast Feature
var newf = ee.Feature(f)
// get date as string
var date = img.date().format()
// extract the value (first) of 'waterClass' in the feature
var value = img.reduceRegion(ee.Reducer.first(), geom, 30).get('waterClass')
// if the value is not null, set the values as a property of the feature. The name of the property will be the date
return ee.Feature(ee.Algorithms.If(value,
newf.set(date, ee.String(value)),
newf.set(date, ee.String('No data'))))
var newfeat = ee.Feature(yearly.iterate(addProp, feat))
return newfeat
;
var newft = fg_points.map(mapfunc);
// Export
Export.table.toDrive(newft,
"export_Points",
"export_Points",
"export_Points");
Second approach: 1D table
var yearly = ee.ImageCollection('JRC/GSW1_0/YearlyHistory');
// function to map over the FeatureCollection
var mapfunc = function(feat)
// get feature id
var id = ee.String(feat.id())
// get feature geometry
var geom = feat.geometry()
// make an empty list to store the features
var newfc = ee.List([])
// function to iterate over the ImageCollection
var addProp = function(img, fc)
// the initial value is the empty list
fc = ee.List(fc)
// get the date as string
var date = img.date().format()
// extract the value of 'waterClass'
var value = img.reduceRegion(ee.Reducer.first(), geom, 30).get('waterClass')
// If the value is null then store it as 'No data'
var val = ee.String(ee.Algorithms.If(value, ee.String(value), ee.String('No data')))
// make the name of the feature (feat_id-date)
var featname = ee.String("feat_").cat(id).cat(ee.String("-")).cat(date)
// make the Feature
var newfeat = ee.Feature(geom, name:featname,
value:val)
// add the value to the list
return fc.add(newfeat)
var newfeat = ee.FeatureCollection(ee.List(yearly.iterate(addProp, newfc)))
return newfeat
;
var newft = fg_points.map(mapfunc).flatten();
Export.table.toDrive(newft,
"export_Points",
"export_Points",
"export_Points");
If features in your FeatureCollection have a name property (or something that identifies each feat) you can change in the second approach:
var id = ee.String(feat.id())
for
var id = ee.String(feat.get('name'))
I have no access to your fusion table, so I made up one to make the answer.
First approach: 2D table
var yearly = ee.ImageCollection('JRC/GSW1_0/YearlyHistory');
// function to map over the FeatureCollection
var mapfunc = function(feat)
// get feature geometry
var geom = feat.geometry()
// function to iterate over the yearly ImageCollection
// the initial object for the iteration is the feature
var addProp = function(img, f)
// cast Feature
var newf = ee.Feature(f)
// get date as string
var date = img.date().format()
// extract the value (first) of 'waterClass' in the feature
var value = img.reduceRegion(ee.Reducer.first(), geom, 30).get('waterClass')
// if the value is not null, set the values as a property of the feature. The name of the property will be the date
return ee.Feature(ee.Algorithms.If(value,
newf.set(date, ee.String(value)),
newf.set(date, ee.String('No data'))))
var newfeat = ee.Feature(yearly.iterate(addProp, feat))
return newfeat
;
var newft = fg_points.map(mapfunc);
// Export
Export.table.toDrive(newft,
"export_Points",
"export_Points",
"export_Points");
Second approach: 1D table
var yearly = ee.ImageCollection('JRC/GSW1_0/YearlyHistory');
// function to map over the FeatureCollection
var mapfunc = function(feat)
// get feature id
var id = ee.String(feat.id())
// get feature geometry
var geom = feat.geometry()
// make an empty list to store the features
var newfc = ee.List([])
// function to iterate over the ImageCollection
var addProp = function(img, fc)
// the initial value is the empty list
fc = ee.List(fc)
// get the date as string
var date = img.date().format()
// extract the value of 'waterClass'
var value = img.reduceRegion(ee.Reducer.first(), geom, 30).get('waterClass')
// If the value is null then store it as 'No data'
var val = ee.String(ee.Algorithms.If(value, ee.String(value), ee.String('No data')))
// make the name of the feature (feat_id-date)
var featname = ee.String("feat_").cat(id).cat(ee.String("-")).cat(date)
// make the Feature
var newfeat = ee.Feature(geom, name:featname,
value:val)
// add the value to the list
return fc.add(newfeat)
var newfeat = ee.FeatureCollection(ee.List(yearly.iterate(addProp, newfc)))
return newfeat
;
var newft = fg_points.map(mapfunc).flatten();
Export.table.toDrive(newft,
"export_Points",
"export_Points",
"export_Points");
If features in your FeatureCollection have a name property (or something that identifies each feat) you can change in the second approach:
var id = ee.String(feat.id())
for
var id = ee.String(feat.get('name'))
edited Apr 7 at 19:19
answered Dec 17 '17 at 3:18
Rodrigo E. PrincipeRodrigo E. Principe
4,31611021
4,31611021
1
I would recommend annotating the code, commenting on what, each line, is doing.
– csheth
Oct 10 '18 at 7:21
add a comment |
1
I would recommend annotating the code, commenting on what, each line, is doing.
– csheth
Oct 10 '18 at 7:21
1
1
I would recommend annotating the code, commenting on what, each line, is doing.
– csheth
Oct 10 '18 at 7:21
I would recommend annotating the code, commenting on what, each line, is doing.
– csheth
Oct 10 '18 at 7:21
add a comment |
Thanks for contributing an answer to Geographic Information Systems Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f265392%2fextracting-pixel-values-by-points-and-converting-to-table-in-google-earth-engine%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown