Geographic Information Systems Asked on November 29, 2021
Is there a way to add a property when converting from a table to a list?
I have a table of lat and long points uploaded from a .csv (locTable), and found a GEE code that changed the format of my table so that I could use it as points for my ui.Chart input to make a timeseries graph. It converts the lat and long to geometries, but I want to add one of the table’s other columns (‘ID’) as a property when doing this conversion, so the lat and long points have an ID when looking at the timeseries chart.
Right now I have a function to add a property to a feature collection, and I call it in my function to reformat my table, but the geometries are in one list, and the IDs are in another.
Is there a way I can add the ID as a property when getting my geometries?
I tried .get() and .set() and neither of them worked.
When I hard code in a subset of lat/long points as a Feature Collection, I don’t need to go through all these steps, but when uploaded as a .csv file I do. I have a couple thousand points, so was hoping to be able to start with a .csv.
/// function to add a property to a feature in a feature collection
var addProperty = function(feature, property) {
var properties = feature.propertyNames()
var selectProperties = properties.filter(ee.Filter.eq('item', property))
return feature.select(selectProperties)
}
// Turn the location table (locTable) into a feature collection, necessary for ui.Chart input
// Make feature collection a list and map over the elements (features)
var tabletoList = locTable.toList(table.size()).map(function(feature) {
// Cast the input as a feature since it is coming from a list, get its
// geometry, then split geometries into a list.
var geomList = ee.Feature(feature).geometry().geometries()
// get the ID names from the feature collection and put into a list
var idList = locTable.map(function(feature){
return addProperty(feature, 'ID')
})
// Map over the geometry list.
var featureList = geomList.map(function(geom) {
// Return a feature representation of the geometry.
return ee.Feature(ee.Geometry(geom))
})
// Return a list of all the features making up a potential multi-geometry,
// this is a list.
return featureList;
})
// The result is a list of feature lists - flatten to a single list of features.
.flatten();
In case any one runs into the same problem. You first extract the list of features you want to add, and then add a second function to map over that list and add the features as a property.
// Turn the location table (locTable) into a feature collection, necessary for ui.Chart input
// Make feature collection a list and map over the elements (features)
var tabletoList = locTable.toList(table.size()).map(function(feature) {
// Cast the input as a feature since it is coming from a list, get its
// geometry, then split geometries into a list.
var id = ee.Feature(feature).get('ID')
var geomList = ee.Feature(feature).geometry().geometries()
// Map over the geometry list.
var featureList = geomList.map(function(geom) {
// Return a feature representation of the geometry.
return ee.Feature(ee.Geometry(geom))
})
// Map over the feature list, adding the IDs
var IDlist = featureList.map(function(index){
return ee.Feature(index).set('ID',id)
})
// Return a list of all the features making up a potential multi-geometry,
// this is a list.
return IDList;
})
// The result is a list of feature lists - flatten to a single list of features.
.flatten();
Answered by fjellrev123 on November 29, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP