Nested loop in time series change detection in Google Earth Engine?How to calculate forest loss in google earth engineCreating a area time series chart on Google Earth EngineGoogle Earth Engine, how to distinguish between rivers/streams and ponds/lakes in a water maskTemporal segmentation algorithms using Google Earth EngineCreate time series for multi-polygon Google Earth EngineRegarding Time Series analysis in earth engineExtracting pixel time series from Google Earth EngineEarth Engine loopObject detection in Google Earth EngineDoing change detection of land cover between 2 landsat images in google earth engine?
Is there a name of the flying bionic bird?
Is there any use for defining additional entity types in a SOQL FROM clause?
What to wear for invited talk in Canada
Patience, young "Padovan"
What is GPS' 19 year rollover and does it present a cybersecurity issue?
How to manage monthly salary
Is this food a bread or a loaf?
How to deal with fear of taking dependencies
Is ipsum/ipsa/ipse a third person pronoun, or can it serve other functions?
How to move the player while also allowing forces to affect it
How did the USSR manage to innovate in an environment characterized by government censorship and high bureaucracy?
Re-submission of rejected manuscript without informing co-authors
Is there a way to make member function NOT callable from constructor?
aging parents with no investments
Are white and non-white police officers equally likely to kill black suspects?
Manga about a female worker who got dragged into another world together with this high school girl and she was just told she's not needed anymore
New order #4: World
How to answer pointed "are you quitting" questioning when I don't want them to suspect
Why did the Germans forbid the possession of pet pigeons in Rostov-on-Don in 1941?
Are cabin dividers used to "hide" the flex of the airplane?
Can the Produce Flame cantrip be used to grapple, or as an unarmed strike, in the right circumstances?
What do the Banks children have against barley water?
Is it wise to hold on to stock that has plummeted and then stabilized?
Crop image to path created in TikZ?
Nested loop in time series change detection in Google Earth Engine?
How to calculate forest loss in google earth engineCreating a area time series chart on Google Earth EngineGoogle Earth Engine, how to distinguish between rivers/streams and ponds/lakes in a water maskTemporal segmentation algorithms using Google Earth EngineCreate time series for multi-polygon Google Earth EngineRegarding Time Series analysis in earth engineExtracting pixel time series from Google Earth EngineEarth Engine loopObject detection in Google Earth EngineDoing change detection of land cover between 2 landsat images in google earth engine?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
I want to execute Continuous Change Detection and Classification(CCDC, Zhu&Woodcock, 2014) to all pixels in a given region in GEE.
The first step is to build an image collection containing all landsat images according to the path and row number assigned with. Here is my code:
# Define the path and row
path = 120
row = 38
# Define the start and finish time
start = ee.Date.fromYMD(1983, 1, 1)
finish = ee.Date.fromYMD(2019, 1, 1)
# Select Landsat bands respectively as their different band configurations
l8_bandlist = ee.List(['B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B10', 'pixel_qa'])
l7_bandlist = ee.List(['B1', 'B2', 'B3', 'B4', 'B5', 'B7', 'B6', 'pixel_qa'])
# Unified the band names in the collection
rename_list = ee.List(['blue', 'green', 'red', 'nir', 'swir1', 'swir2', 'tbb', 'qa'])
# Function to rename the band names of images in the collection
def __renamelandsatbands(img):
return img.select(
old_bandname,
new_bandname
)
# Function to calculate the evi
def __calculateEVI(img):
index = img.expression(
'2.5 * ((NIR-RED) / (NIR +6 * RED -7.5* BLUE))',
'NIR': img.select('nir'),
'RED': img.select('red'),
'BLUE': img.select('blue')
).set('system:time_start', img.get('system:time_start'))
return img.addBands(index)
# Function to calculate the NBRT
def __calculateNBRT(img):
index = img.expression(
'(NIR - 0.1 * SWIR * Temp) / (NIR + 0.1 * SWIR * Temp)',
'NIR': img.select('nir'),
'SWIR': img.select('swir1'),
'Temp': img.select('tbb')
).set('system:time_start', img.get('system:time_start'))
return img.addBands(index)
#Landsat Collection
l8_sr = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR').filter(
ee.Filter.eq('WRS_PATH', path)).filter(ee.Filter.eq('WRS_ROW', row)).filterDate(
start, finish).select(l8_bandlist, rename_list).sort('system:time_start')
l7_sr = ee.ImageCollection('LANDSAT/LE07/C01/T1_SR').filter(
ee.Filter.eq('WRS_PATH', path)).filter(ee.Filter.eq('WRS_ROW', row)).filterDate(
start, finish).select(l7_bandlist, rename_list).sort('system:time_start')
l5_sr = ee.ImageCollection('LANDSAT/LT05/C01/T1_SR').filter(
ee.Filter.eq('WRS_PATH', path)).filter(ee.Filter.eq('WRS_ROW', row)).filterDate(
start, finish).select(l7_bandlist, rename_list).sort('system:time_start')
# Add EVI and NBRT into Landsat SR dataset
#OLI
l8_srevi = l8_sr.map(__calculateEVI)
l8_dataset = l8_srevi.map(__calculateNBRT)
#ETM+
l7_srevi = l7_sr.map(__calculateEVI)
l7_dataset = l7_srevi.map(__calculateNBRT)
# TM
l5_srevi = l5_sr.map(__calculateEVI)
l5_dataset = l5_srevi.map(__calculateNBRT)
# Rename images again
old_bandname = rename_list.add('constant').add('nir_1')
new_bandname = ee.List(['blue', 'green', 'red', 'nir', 'swir1', 'swir2', 'tbb', 'qa', 'evi', 'nbrt'])
l8_dataset = l8_dataset.map(__renamelandsatbands)
l7_dataset = l7_dataset.map(__renamelandsatbands)
l5_dataset = l5_dataset.map(__renamelandsatbands)
# Stack landsat series image collection
lcdataset = l8_dataset.merge(l7_dataset).merge(l5_dataset).sort('system:time_start')
According to these code above, i made a Landsat series image collection which contains all TM/ETM+/OLI images in path 120 and row 38. Each of the image contains ten bands, including seven surface reflectance bands('blue', 'green', 'red', 'nir', 'swir1', 'swir2', 'tbb'), two derived feature bands('EVI', ‘NBRT') and one quality control band('qa').
After the data get prepared, What i want to do is to get the every pixel clear observation time series of all seven SR bands and the two derived feature bands which filtered by the qa band. Then, for every pixel, the first 24 observations are used to initialize a regression time series model, the break points detection start from the 25th clear observation based on a specific threshold determined by 3 folds of the RMSE of the regression model . The 25th observation will be identified as a break pointexceed if it exceeds the threshold, and the next 24 clear observations will be used to initialize a new model again. If the 25th observation is in the threshold, it will be joined into the first 24 observations to update the initial model, and the 26th observation will be assessed until all clear observations of the time series been checked.
AS i introduced above, the algorithm is based on pixel scale and use circulative iteration of nine time series trajectorys to find the break point in each pixel. In other words, using CCDC to an image collection facing two iterations, the time series break points iterative evaluation and loop this algorithm pixel by pixel to the whole image coverage. Is there a best way to do this in GEE?
python google-earth-engine change-detection
add a comment |
I want to execute Continuous Change Detection and Classification(CCDC, Zhu&Woodcock, 2014) to all pixels in a given region in GEE.
The first step is to build an image collection containing all landsat images according to the path and row number assigned with. Here is my code:
# Define the path and row
path = 120
row = 38
# Define the start and finish time
start = ee.Date.fromYMD(1983, 1, 1)
finish = ee.Date.fromYMD(2019, 1, 1)
# Select Landsat bands respectively as their different band configurations
l8_bandlist = ee.List(['B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B10', 'pixel_qa'])
l7_bandlist = ee.List(['B1', 'B2', 'B3', 'B4', 'B5', 'B7', 'B6', 'pixel_qa'])
# Unified the band names in the collection
rename_list = ee.List(['blue', 'green', 'red', 'nir', 'swir1', 'swir2', 'tbb', 'qa'])
# Function to rename the band names of images in the collection
def __renamelandsatbands(img):
return img.select(
old_bandname,
new_bandname
)
# Function to calculate the evi
def __calculateEVI(img):
index = img.expression(
'2.5 * ((NIR-RED) / (NIR +6 * RED -7.5* BLUE))',
'NIR': img.select('nir'),
'RED': img.select('red'),
'BLUE': img.select('blue')
).set('system:time_start', img.get('system:time_start'))
return img.addBands(index)
# Function to calculate the NBRT
def __calculateNBRT(img):
index = img.expression(
'(NIR - 0.1 * SWIR * Temp) / (NIR + 0.1 * SWIR * Temp)',
'NIR': img.select('nir'),
'SWIR': img.select('swir1'),
'Temp': img.select('tbb')
).set('system:time_start', img.get('system:time_start'))
return img.addBands(index)
#Landsat Collection
l8_sr = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR').filter(
ee.Filter.eq('WRS_PATH', path)).filter(ee.Filter.eq('WRS_ROW', row)).filterDate(
start, finish).select(l8_bandlist, rename_list).sort('system:time_start')
l7_sr = ee.ImageCollection('LANDSAT/LE07/C01/T1_SR').filter(
ee.Filter.eq('WRS_PATH', path)).filter(ee.Filter.eq('WRS_ROW', row)).filterDate(
start, finish).select(l7_bandlist, rename_list).sort('system:time_start')
l5_sr = ee.ImageCollection('LANDSAT/LT05/C01/T1_SR').filter(
ee.Filter.eq('WRS_PATH', path)).filter(ee.Filter.eq('WRS_ROW', row)).filterDate(
start, finish).select(l7_bandlist, rename_list).sort('system:time_start')
# Add EVI and NBRT into Landsat SR dataset
#OLI
l8_srevi = l8_sr.map(__calculateEVI)
l8_dataset = l8_srevi.map(__calculateNBRT)
#ETM+
l7_srevi = l7_sr.map(__calculateEVI)
l7_dataset = l7_srevi.map(__calculateNBRT)
# TM
l5_srevi = l5_sr.map(__calculateEVI)
l5_dataset = l5_srevi.map(__calculateNBRT)
# Rename images again
old_bandname = rename_list.add('constant').add('nir_1')
new_bandname = ee.List(['blue', 'green', 'red', 'nir', 'swir1', 'swir2', 'tbb', 'qa', 'evi', 'nbrt'])
l8_dataset = l8_dataset.map(__renamelandsatbands)
l7_dataset = l7_dataset.map(__renamelandsatbands)
l5_dataset = l5_dataset.map(__renamelandsatbands)
# Stack landsat series image collection
lcdataset = l8_dataset.merge(l7_dataset).merge(l5_dataset).sort('system:time_start')
According to these code above, i made a Landsat series image collection which contains all TM/ETM+/OLI images in path 120 and row 38. Each of the image contains ten bands, including seven surface reflectance bands('blue', 'green', 'red', 'nir', 'swir1', 'swir2', 'tbb'), two derived feature bands('EVI', ‘NBRT') and one quality control band('qa').
After the data get prepared, What i want to do is to get the every pixel clear observation time series of all seven SR bands and the two derived feature bands which filtered by the qa band. Then, for every pixel, the first 24 observations are used to initialize a regression time series model, the break points detection start from the 25th clear observation based on a specific threshold determined by 3 folds of the RMSE of the regression model . The 25th observation will be identified as a break pointexceed if it exceeds the threshold, and the next 24 clear observations will be used to initialize a new model again. If the 25th observation is in the threshold, it will be joined into the first 24 observations to update the initial model, and the 26th observation will be assessed until all clear observations of the time series been checked.
AS i introduced above, the algorithm is based on pixel scale and use circulative iteration of nine time series trajectorys to find the break point in each pixel. In other words, using CCDC to an image collection facing two iterations, the time series break points iterative evaluation and loop this algorithm pixel by pixel to the whole image coverage. Is there a best way to do this in GEE?
python google-earth-engine change-detection
add a comment |
I want to execute Continuous Change Detection and Classification(CCDC, Zhu&Woodcock, 2014) to all pixels in a given region in GEE.
The first step is to build an image collection containing all landsat images according to the path and row number assigned with. Here is my code:
# Define the path and row
path = 120
row = 38
# Define the start and finish time
start = ee.Date.fromYMD(1983, 1, 1)
finish = ee.Date.fromYMD(2019, 1, 1)
# Select Landsat bands respectively as their different band configurations
l8_bandlist = ee.List(['B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B10', 'pixel_qa'])
l7_bandlist = ee.List(['B1', 'B2', 'B3', 'B4', 'B5', 'B7', 'B6', 'pixel_qa'])
# Unified the band names in the collection
rename_list = ee.List(['blue', 'green', 'red', 'nir', 'swir1', 'swir2', 'tbb', 'qa'])
# Function to rename the band names of images in the collection
def __renamelandsatbands(img):
return img.select(
old_bandname,
new_bandname
)
# Function to calculate the evi
def __calculateEVI(img):
index = img.expression(
'2.5 * ((NIR-RED) / (NIR +6 * RED -7.5* BLUE))',
'NIR': img.select('nir'),
'RED': img.select('red'),
'BLUE': img.select('blue')
).set('system:time_start', img.get('system:time_start'))
return img.addBands(index)
# Function to calculate the NBRT
def __calculateNBRT(img):
index = img.expression(
'(NIR - 0.1 * SWIR * Temp) / (NIR + 0.1 * SWIR * Temp)',
'NIR': img.select('nir'),
'SWIR': img.select('swir1'),
'Temp': img.select('tbb')
).set('system:time_start', img.get('system:time_start'))
return img.addBands(index)
#Landsat Collection
l8_sr = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR').filter(
ee.Filter.eq('WRS_PATH', path)).filter(ee.Filter.eq('WRS_ROW', row)).filterDate(
start, finish).select(l8_bandlist, rename_list).sort('system:time_start')
l7_sr = ee.ImageCollection('LANDSAT/LE07/C01/T1_SR').filter(
ee.Filter.eq('WRS_PATH', path)).filter(ee.Filter.eq('WRS_ROW', row)).filterDate(
start, finish).select(l7_bandlist, rename_list).sort('system:time_start')
l5_sr = ee.ImageCollection('LANDSAT/LT05/C01/T1_SR').filter(
ee.Filter.eq('WRS_PATH', path)).filter(ee.Filter.eq('WRS_ROW', row)).filterDate(
start, finish).select(l7_bandlist, rename_list).sort('system:time_start')
# Add EVI and NBRT into Landsat SR dataset
#OLI
l8_srevi = l8_sr.map(__calculateEVI)
l8_dataset = l8_srevi.map(__calculateNBRT)
#ETM+
l7_srevi = l7_sr.map(__calculateEVI)
l7_dataset = l7_srevi.map(__calculateNBRT)
# TM
l5_srevi = l5_sr.map(__calculateEVI)
l5_dataset = l5_srevi.map(__calculateNBRT)
# Rename images again
old_bandname = rename_list.add('constant').add('nir_1')
new_bandname = ee.List(['blue', 'green', 'red', 'nir', 'swir1', 'swir2', 'tbb', 'qa', 'evi', 'nbrt'])
l8_dataset = l8_dataset.map(__renamelandsatbands)
l7_dataset = l7_dataset.map(__renamelandsatbands)
l5_dataset = l5_dataset.map(__renamelandsatbands)
# Stack landsat series image collection
lcdataset = l8_dataset.merge(l7_dataset).merge(l5_dataset).sort('system:time_start')
According to these code above, i made a Landsat series image collection which contains all TM/ETM+/OLI images in path 120 and row 38. Each of the image contains ten bands, including seven surface reflectance bands('blue', 'green', 'red', 'nir', 'swir1', 'swir2', 'tbb'), two derived feature bands('EVI', ‘NBRT') and one quality control band('qa').
After the data get prepared, What i want to do is to get the every pixel clear observation time series of all seven SR bands and the two derived feature bands which filtered by the qa band. Then, for every pixel, the first 24 observations are used to initialize a regression time series model, the break points detection start from the 25th clear observation based on a specific threshold determined by 3 folds of the RMSE of the regression model . The 25th observation will be identified as a break pointexceed if it exceeds the threshold, and the next 24 clear observations will be used to initialize a new model again. If the 25th observation is in the threshold, it will be joined into the first 24 observations to update the initial model, and the 26th observation will be assessed until all clear observations of the time series been checked.
AS i introduced above, the algorithm is based on pixel scale and use circulative iteration of nine time series trajectorys to find the break point in each pixel. In other words, using CCDC to an image collection facing two iterations, the time series break points iterative evaluation and loop this algorithm pixel by pixel to the whole image coverage. Is there a best way to do this in GEE?
python google-earth-engine change-detection
I want to execute Continuous Change Detection and Classification(CCDC, Zhu&Woodcock, 2014) to all pixels in a given region in GEE.
The first step is to build an image collection containing all landsat images according to the path and row number assigned with. Here is my code:
# Define the path and row
path = 120
row = 38
# Define the start and finish time
start = ee.Date.fromYMD(1983, 1, 1)
finish = ee.Date.fromYMD(2019, 1, 1)
# Select Landsat bands respectively as their different band configurations
l8_bandlist = ee.List(['B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B10', 'pixel_qa'])
l7_bandlist = ee.List(['B1', 'B2', 'B3', 'B4', 'B5', 'B7', 'B6', 'pixel_qa'])
# Unified the band names in the collection
rename_list = ee.List(['blue', 'green', 'red', 'nir', 'swir1', 'swir2', 'tbb', 'qa'])
# Function to rename the band names of images in the collection
def __renamelandsatbands(img):
return img.select(
old_bandname,
new_bandname
)
# Function to calculate the evi
def __calculateEVI(img):
index = img.expression(
'2.5 * ((NIR-RED) / (NIR +6 * RED -7.5* BLUE))',
'NIR': img.select('nir'),
'RED': img.select('red'),
'BLUE': img.select('blue')
).set('system:time_start', img.get('system:time_start'))
return img.addBands(index)
# Function to calculate the NBRT
def __calculateNBRT(img):
index = img.expression(
'(NIR - 0.1 * SWIR * Temp) / (NIR + 0.1 * SWIR * Temp)',
'NIR': img.select('nir'),
'SWIR': img.select('swir1'),
'Temp': img.select('tbb')
).set('system:time_start', img.get('system:time_start'))
return img.addBands(index)
#Landsat Collection
l8_sr = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR').filter(
ee.Filter.eq('WRS_PATH', path)).filter(ee.Filter.eq('WRS_ROW', row)).filterDate(
start, finish).select(l8_bandlist, rename_list).sort('system:time_start')
l7_sr = ee.ImageCollection('LANDSAT/LE07/C01/T1_SR').filter(
ee.Filter.eq('WRS_PATH', path)).filter(ee.Filter.eq('WRS_ROW', row)).filterDate(
start, finish).select(l7_bandlist, rename_list).sort('system:time_start')
l5_sr = ee.ImageCollection('LANDSAT/LT05/C01/T1_SR').filter(
ee.Filter.eq('WRS_PATH', path)).filter(ee.Filter.eq('WRS_ROW', row)).filterDate(
start, finish).select(l7_bandlist, rename_list).sort('system:time_start')
# Add EVI and NBRT into Landsat SR dataset
#OLI
l8_srevi = l8_sr.map(__calculateEVI)
l8_dataset = l8_srevi.map(__calculateNBRT)
#ETM+
l7_srevi = l7_sr.map(__calculateEVI)
l7_dataset = l7_srevi.map(__calculateNBRT)
# TM
l5_srevi = l5_sr.map(__calculateEVI)
l5_dataset = l5_srevi.map(__calculateNBRT)
# Rename images again
old_bandname = rename_list.add('constant').add('nir_1')
new_bandname = ee.List(['blue', 'green', 'red', 'nir', 'swir1', 'swir2', 'tbb', 'qa', 'evi', 'nbrt'])
l8_dataset = l8_dataset.map(__renamelandsatbands)
l7_dataset = l7_dataset.map(__renamelandsatbands)
l5_dataset = l5_dataset.map(__renamelandsatbands)
# Stack landsat series image collection
lcdataset = l8_dataset.merge(l7_dataset).merge(l5_dataset).sort('system:time_start')
According to these code above, i made a Landsat series image collection which contains all TM/ETM+/OLI images in path 120 and row 38. Each of the image contains ten bands, including seven surface reflectance bands('blue', 'green', 'red', 'nir', 'swir1', 'swir2', 'tbb'), two derived feature bands('EVI', ‘NBRT') and one quality control band('qa').
After the data get prepared, What i want to do is to get the every pixel clear observation time series of all seven SR bands and the two derived feature bands which filtered by the qa band. Then, for every pixel, the first 24 observations are used to initialize a regression time series model, the break points detection start from the 25th clear observation based on a specific threshold determined by 3 folds of the RMSE of the regression model . The 25th observation will be identified as a break pointexceed if it exceeds the threshold, and the next 24 clear observations will be used to initialize a new model again. If the 25th observation is in the threshold, it will be joined into the first 24 observations to update the initial model, and the 26th observation will be assessed until all clear observations of the time series been checked.
AS i introduced above, the algorithm is based on pixel scale and use circulative iteration of nine time series trajectorys to find the break point in each pixel. In other words, using CCDC to an image collection facing two iterations, the time series break points iterative evaluation and loop this algorithm pixel by pixel to the whole image coverage. Is there a best way to do this in GEE?
python google-earth-engine change-detection
python google-earth-engine change-detection
edited Apr 6 at 4:16
myzhenghr
asked Apr 4 at 9:21
myzhenghrmyzhenghr
32
32
add a comment |
add a comment |
0
active
oldest
votes
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%2f317752%2fnested-loop-in-time-series-change-detection-in-google-earth-engine%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
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%2f317752%2fnested-loop-in-time-series-change-detection-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