Поэтому я использовал Google Earth Engine и работал с некоторыми примерами кода в их репозитории. Я использую Python 3.6. Похоже, Google больше не будет поддерживать функцию сопоставления в Python 3 через их ee.mapclient()
. Мне было интересно, нашел ли кто-нибудь подходящий обходной путь? Обрисую проблему.
Я попытался загрузить ee.mapclient
для построения карты.
import ee
import ee.mapclient
ee.Initialize()
Но я получил ошибку:
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-13-6d4860410653> in <module>()
1 import ee
----> 2 import ee.mapclient
3 ee.Initialize()
/media/krishnab/lakshmi/anaconda3/envs/pMining/lib/python3.6/site-packages/ee/mapclient.py in <module>()
29
30 import collections
---> 31 import cStringIO
32 import functools
33 import math
ModuleNotFoundError: No module named 'cStringIO'
Проблему cStringIO
достаточно легко решить следующим образом: установка пакета электронной почты python 3.4.0: ImportError: нет модуля с именем 'cStringIO'
Итак, я решил опубликовать проблему в репозитории Google Earth Engine, но обнаружил уже существующую проблему:
https://github.com/google/earthengine-api/issues/16
В проблеме разработчики признают проблему, но указывают, что не будут ее исправлять из-за ограничений базового пакета Tk
.
Вот цитата из номера:
Мы не активно поддерживали объект mapclient, потому что он зависит от Tk, инструментария графического пользовательского интерфейса, который ведет себя по-разному на разных машинах. Не могли бы вы описать свой вариант использования, для которого требуется mapclient? Возможно, мы сможем предложить альтернативный подход.
Разработчики Google предложили представить обходной путь, но до сих пор обходной путь не опубликован.
Поэтому мне было интересно, нашел ли кто-нибудь еще подходящий обходной путь в Python3.6 для этой проблемы?
В качестве примера подлинного кода я могу предложить приведенный ниже код из репозитория примеров Google:
import datetime
import ee
import ee.mapclient
ee.Initialize()
ee.mapclient.centerMap(-95.738, 18.453, 9)
# Filter the LE7 collection to a single date.
collection = (ee.ImageCollection('LE7_L1T')
.filterDate(datetime.datetime(2002, 11, 8),
datetime.datetime(2002, 11, 9)))
image = collection.mosaic().select('B3', 'B2', 'B1')
# Display the image normally.
ee.mapclient.addToMap(image, {'gain': '1.6, 1.4, 1.1'}, 'Land')
# Add and stretch the water. Once where the elevation is masked,
# and again where the elevation is zero.
elev = ee.Image('srtm90_v4')
mask1 = elev.mask().eq(0).And(image.mask())
mask2 = elev.eq(0).And(image.mask())
ee.mapclient.addToMap(
image.mask(mask1), {'gain': 6.0, 'bias': -200}, 'Water: Masked')
ee.mapclient.addToMap(
image.mask(mask2), {'gain': 6.0, 'bias': -200}, 'Water: Elev 0')