[EE Tile Layers] Strange behavior when ussing cm.palettes
ccsuehara opened this issue · 3 comments
Environment Information
Please run the following code on your computer and share the output with us so that we can better debug your issue:
![image](https://private-user-images.githubusercontent.com/12155945/251563620-fcf88e62-b1bf-4a20-a2aa-5854ab277161.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MDQ0NTU4NDYsIm5iZiI6MTcwNDQ1NTU0NiwicGF0aCI6Ii8xMjE1NTk0NS8yNTE1NjM2MjAtZmNmODhlNjItYjFiZi00YTIwLWEyYWEtNTg1NGFiMjc3MTYxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAxMDUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMTA1VDExNTIyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTVlOWZkNWQyZjUyNTZjYmJkOTIyYTMyMjQ5ODc2NmJmOThiOWYxZDE1ZTVhOTNiZjZkOTMzYmJiOGVkNDRlNmUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.2DslypdJoHYaEgND6zpZuy_7q-Yc6lg5ujwNfKkNKmk)
Description
Hello! I'm bumping into a strange behavior of geemap when using cm.palettes in the visualization. After defining the viz params, if I use the vizparam variable more than once (and since my layers are part of the different collection, just for different years), the following appears:
ValueError: The palette must be a list of colors, a string, or a Box object.
This appears even though the cm.palettes.Spectral is a Box object.
What I Did
import geemap.foliumap as geemap
# Load 2012 MODIS land cover and select the IGBP classification.
cover = ee.Image('MODIS/051/MCD12Q1/2012_01_01').select('Land_Cover_Type_1')
cover2 = ee.Image('MODIS/051/MCD12Q1/2011_01_01').select('Land_Cover_Type_1')
# Define a palette for the 18 distinct land cover classes.
igbp_palette = cm.palettes.Spectral
vizParams = {'min': 0, 'max': 17, 'palette': igbp_palette}
vizParams_2 = {'min': 0, 'max': 17, 'palette': igbp_palette}
# Define a map centered on the United States.
Map = geemap.Map()
# Add the image layer to the map and display it. Specify the min and max labels
# and the color palette matching the labels.
Map.addLayer(
cover, vizParams, 'IGBP classes 2012')
# Map.addLayer(
# cover2, vizParams,'IGBP classes 2011') // This line causes the Error
Map.addLayer(
cover2, vizParams_2,'IGBP classes 2011') // This line runs without an issue
Map
Thanks so much!
I think that _validate_palette should allow type tuple
.
Here is a test of what the palette looks like before and after going through .addLayer()
print(vizParams)
Map.addLayer(cover, vizParams, 'IGBP classes 2012')
print(vizParams)
Map.addLayer( cover2, vizParams, 'IGBP classes 2011')
{'min': 0, 'max': 17, 'palette': Box({'default': ('9e0142', 'a00343', 'a20643', 'a40844', 'a70b44', 'a90d45', 'ab0f45', 'ad1246', 'af1446', 'b11747', 'b41947', 'b61b48', 'b81e48', 'ba2049', 'bc2249', 'be254a', 'c1274a', 'c32a4b', 'c52c4b', 'c72e4c', 'c9314c', 'cb334d', 'cd364d', 'd0384e', 'd23a4e', 'd43d4f', 'd63f4f', 'd7414e', 'd8434e', 'd9444d', 'da464d', 'dc484c', 'dd4a4c', 'de4c4b', 'df4e4b', 'e1504b', 'e2514a', 'e3534a', 'e45549', 'e55749', 'e75948', 'e85b48', 'e95c47', 'ea5e47', 'eb6046', 'ed6246', 'ee6445', 'ef6645', 'f06744', 'f26944', 'f36b43', 'f46d43', 'f47044', 'f57245', 'f57547', 'f57748', 'f67a49', 'f67c4a', 'f67f4b', 'f7814c', 'f7844e', 'f8864f', 'f88950', 'f88c51', 'f98e52', 'f99153', 'f99355', 'fa9656', 'fa9857', 'fa9b58', 'fb9d59', 'fba05b', 'fba35c', 'fca55d', 'fca85e', 'fcaa5f', 'fdad60', 'fdaf62', 'fdb163', 'fdb365', 'fdb567', 'fdb768', 'fdb96a', 'fdbb6c', 'fdbd6d', 'fdbf6f', 'fdc171', 'fdc372', 'fdc574', 'fdc776', 'fec877', 'feca79', 'fecc7b', 'fece7c', 'fed07e', 'fed27f', 'fed481', 'fed683', 'fed884', 'feda86', 'fedc88', 'fede89', 'fee08b', 'fee18d', 'fee28f', 'fee491', 'fee593', 'fee695', 'fee797', 'fee999', 'feea9b', 'feeb9d', 'feec9f', 'feeda1', 'feefa3', 'fff0a6', 'fff1a8', 'fff2aa', 'fff3ac', 'fff5ae', 'fff6b0', 'fff7b2', 'fff8b4', 'fffab6', 'fffbb8', 'fffcba', 'fffdbc', 'fffebe', 'ffffbe', 'fefebd', 'fdfebb', 'fcfeba', 'fbfdb8', 'fafdb7', 'f9fcb5', 'f8fcb4', 'f7fcb2', 'f6fbb0', 'f5fbaf', 'f4faad', 'f3faac', 'f2faaa', 'f1f9a9', 'f0f9a7', 'eff9a6', 'eef8a4', 'edf8a3', 'ecf7a1', 'ebf7a0', 'eaf79e', 'e9f69d', 'e8f69b', 'e7f59a', 'e6f598', 'e4f498', 'e1f399', 'dff299', 'ddf19a', 'daf09a', 'd8ef9b', 'd6ee9b', 'd3ed9c', 'd1ed9c', 'cfec9d', 'cdeb9d', 'caea9e', 'c8e99e', 'c6e89f', 'c3e79f', 'c1e6a0', 'bfe5a0', 'bce4a0', 'bae3a1', 'b8e2a1', 'b5e1a2', 'b3e0a2', 'b1dfa3', 'aedea3', 'acdda4', 'aadca4', 'a7dba4', 'a4daa4', 'a2d9a4', '9fd8a4', '9cd7a4', '99d6a4', '97d5a4', '94d4a4', '91d3a4', '8fd2a4', '8cd1a4', '89d0a4', '86cfa5', '84cea5', '81cda5', '7ecca5', '7ccaa5', '79c9a5', '76c8a5', '74c7a5', '71c6a5', '6ec5a5', '6bc4a5', '69c3a5', '66c2a5', '64c0a6', '62bda7', '60bba8', '5eb9a9', '5cb7aa', '5ab4ab', '58b2ac', '56b0ad', '54aead', '52abae', '50a9af', '4ea7b0', '4ba4b1', '49a2b2', '47a0b3', '459eb4', '439bb5', '4199b6', '3f97b7', '3d95b8', '3b92b9', '3990ba', '378ebb', '358bbc', '3389bd', '3387bc', '3585bb', '3682ba', '3880b9', '3a7eb8', '3b7cb7', '3d79b6', '3f77b5', '4175b4', '4273b3', '4471b2', '466eb1', '486cb0', '496aaf', '4b68ae', '4d65ad', '4e63ac', '5061aa', '525fa9', '545ca8', '555aa7', '5758a6', '5956a5', '5b53a4', '5c51a3', '5e4fa2'), 'n03': ('9e0142', 'ffffbf', '5e4fa2'), 'n04': ('9e0142', 'fdbf6f', 'bfe5a0', '5e4fa2'), 'n05': ('9e0142', 'f88d52', 'ffffbf', '89d0a4', '5e4fa2'), 'n06': ('9e0142', 'f46d43', 'fee08b', 'e6f598', '66c2a5', '5e4fa2'), 'n07': ('9e0142', 'ea5d47', 'fdbf6f', 'ffffbf', 'bfe5a0', '55afad', '5e4fa2'), 'n08': ('9e0142', 'e2524a', 'fca55d', 'fee99a', 'edf8a3', 'a1d9a4', '48a1b3', '5e4fa2'), 'n09': ('9e0142', 'dd4a4c', 'f88d52', 'fed380', 'ffffbf', 'd7ef9b', '89d0a4', '3f97b7', '5e4fa2'), 'n10': ('9e0142', 'd8434e', 'f67b4a', 'fdbf6f', 'feeea2', 'f1f9a9', 'bfe5a0', '75c8a5', '388eba', '5e4fa2'), 'n11': ('9e0142', 'd53e4f', 'f46d43', 'fdae61', 'fee08b', 'ffffbf', 'e6f598', 'abdda4', '66c2a5', '3288bd', '5e4fa2'), 'n12': ('9e0142', 'd0384e', 'ee6445', 'fb9c59', 'fece7c', 'fff1a7', 'f4faad', 'd1ec9c', '98d6a4', '5db7a9', '3683bb', '5e4fa2')})}
{'min': 0, 'max': 17, 'palette': ('9e0142', 'a00343', 'a20643', 'a40844', 'a70b44', 'a90d45', 'ab0f45', 'ad1246', 'af1446', 'b11747', 'b41947', 'b61b48', 'b81e48', 'ba2049', 'bc2249', 'be254a', 'c1274a', 'c32a4b', 'c52c4b', 'c72e4c', 'c9314c', 'cb334d', 'cd364d', 'd0384e', 'd23a4e', 'd43d4f', 'd63f4f', 'd7414e', 'd8434e', 'd9444d', 'da464d', 'dc484c', 'dd4a4c', 'de4c4b', 'df4e4b', 'e1504b', 'e2514a', 'e3534a', 'e45549', 'e55749', 'e75948', 'e85b48', 'e95c47', 'ea5e47', 'eb6046', 'ed6246', 'ee6445', 'ef6645', 'f06744', 'f26944', 'f36b43', 'f46d43', 'f47044', 'f57245', 'f57547', 'f57748', 'f67a49', 'f67c4a', 'f67f4b', 'f7814c', 'f7844e', 'f8864f', 'f88950', 'f88c51', 'f98e52', 'f99153', 'f99355', 'fa9656', 'fa9857', 'fa9b58', 'fb9d59', 'fba05b', 'fba35c', 'fca55d', 'fca85e', 'fcaa5f', 'fdad60', 'fdaf62', 'fdb163', 'fdb365', 'fdb567', 'fdb768', 'fdb96a', 'fdbb6c', 'fdbd6d', 'fdbf6f', 'fdc171', 'fdc372', 'fdc574', 'fdc776', 'fec877', 'feca79', 'fecc7b', 'fece7c', 'fed07e', 'fed27f', 'fed481', 'fed683', 'fed884', 'feda86', 'fedc88', 'fede89', 'fee08b', 'fee18d', 'fee28f', 'fee491', 'fee593', 'fee695', 'fee797', 'fee999', 'feea9b', 'feeb9d', 'feec9f', 'feeda1', 'feefa3', 'fff0a6', 'fff1a8', 'fff2aa', 'fff3ac', 'fff5ae', 'fff6b0', 'fff7b2', 'fff8b4', 'fffab6', 'fffbb8', 'fffcba', 'fffdbc', 'fffebe', 'ffffbe', 'fefebd', 'fdfebb', 'fcfeba', 'fbfdb8', 'fafdb7', 'f9fcb5', 'f8fcb4', 'f7fcb2', 'f6fbb0', 'f5fbaf', 'f4faad', 'f3faac', 'f2faaa', 'f1f9a9', 'f0f9a7', 'eff9a6', 'eef8a4', 'edf8a3', 'ecf7a1', 'ebf7a0', 'eaf79e', 'e9f69d', 'e8f69b', 'e7f59a', 'e6f598', 'e4f498', 'e1f399', 'dff299', 'ddf19a', 'daf09a', 'd8ef9b', 'd6ee9b', 'd3ed9c', 'd1ed9c', 'cfec9d', 'cdeb9d', 'caea9e', 'c8e99e', 'c6e89f', 'c3e79f', 'c1e6a0', 'bfe5a0', 'bce4a0', 'bae3a1', 'b8e2a1', 'b5e1a2', 'b3e0a2', 'b1dfa3', 'aedea3', 'acdda4', 'aadca4', 'a7dba4', 'a4daa4', 'a2d9a4', '9fd8a4', '9cd7a4', '99d6a4', '97d5a4', '94d4a4', '91d3a4', '8fd2a4', '8cd1a4', '89d0a4', '86cfa5', '84cea5', '81cda5', '7ecca5', '7ccaa5', '79c9a5', '76c8a5', '74c7a5', '71c6a5', '6ec5a5', '6bc4a5', '69c3a5', '66c2a5', '64c0a6', '62bda7', '60bba8', '5eb9a9', '5cb7aa', '5ab4ab', '58b2ac', '56b0ad', '54aead', '52abae', '50a9af', '4ea7b0', '4ba4b1', '49a2b2', '47a0b3', '459eb4', '439bb5', '4199b6', '3f97b7', '3d95b8', '3b92b9', '3990ba', '378ebb', '358bbc', '3389bd', '3387bc', '3585bb', '3682ba', '3880b9', '3a7eb8', '3b7cb7', '3d79b6', '3f77b5', '4175b4', '4273b3', '4471b2', '466eb1', '486cb0', '496aaf', '4b68ae', '4d65ad', '4e63ac', '5061aa', '525fa9', '545ca8', '555aa7', '5758a6', '5956a5', '5b53a4', '5c51a3', '5e4fa2')}
You can see that visParams has been altered, it only includes the default
value, which is a tuple
. This line (return palette["default"]
) of _validate_palette
is returning a tuple. I don't understand why it would be modifying the visParams
input. Maybe a .copy()
needs to be made?
So, I think two things need to be fixed:
- Allow
tuple
type - this seems valid. - Don't allow input
visParams
dictionary to be modified - I'm not clear why this would happen.
@ccsuehara Thank you for reporting. This bug has been fixed by @jdbcode in #1613. Run geemap.update_package()
and restart the kernel to take effect.
BTW, your code can be simplified as follows. You can directly use Spectral
as the palette. No need to import cm and use cm.palettes.Spectral
.
import ee
import geemap.foliumap as geemap
Map = geemap.Map()
cover = ee.Image('MODIS/051/MCD12Q1/2012_01_01').select('Land_Cover_Type_1')
cover2 = ee.Image('MODIS/051/MCD12Q1/2011_01_01').select('Land_Cover_Type_1')
vizParams = {'min': 0, 'max': 17, 'palette': 'Spectral'}
Map.addLayer(
cover, vizParams, 'IGBP classes 2012')
Map.addLayer(
cover2, vizParams,'IGBP classes 2011')
Map