如何将GEE Python Api集成到Django框架中进行使用(避免踩坑)(一)

前言

之前一直在GEE的网页端通过编写JavaScript代码进行研究,现在需要通过Python Api进行系统构建,通过对比选择Django框架对GEE进行集成,以便构建一个前后端交互的系统,下面借用github上的一个项目GEE Django进行演示。
以下都是在PyCharm中进行开发,而不是anaconda中

1.GEE Python Api安装

在本地进行GEE Python的安装,首先要安装GEE的Python库earthengine-api,打开命令行输入

pip install earthengine-api

安装Google的Python Api客户端

pip install google-api-python-client

安装鉴权验证依赖库

pip install pyCrypto

windows系统可能会遇到pyCrypto库无法进行安装的情况,可以执行以下命令,安装pyCrytodome库,两个库的功能是一样的

pip install pyCrytodome

打开编译器输入以下代码来进行身份验证:

import ee
#向GEE服务器进行身份验证
ee.Authenticate()
#初始化 API
ee.Initialize()

这时候可能会输出一个链接,点进去即可进行身份验证,选择自己的账号验证一下就可以了。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
如果没有在输出行打印出链接,则可能是电脑没有安装gcloud导致的,可以去官网下载一下gcloud cli,以便获得本地的授权,不然是无法使用的。
下载完gcloud后,输入以下命令进行激活,输入完后会弹出一个页面,确认自己的身份和云端项目即可生成token,将生成的token粘贴到命令行里,即可完成本地的授权认证,我这里已经经过认证了,就不再展示验证后的页面。

earthengine authenticate --auth_mode=notebook

在这里插入图片描述
到这为止,GEE Python Api基本已经安装完成,可以打开一个空白文件输入以下代码进行验证是否安装成功:
在这里插入图片描述

import ee
import os
#以下为设置代理服务器,需要和你自己的电脑的代理服务地址一致
os.environ['HTTP_PROXY'] = 'http://127.0.0.1:4780'
os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:4780'
# ee.Authenticate()
ee.Initialize()
#打印出数据信息
image = ee.Image('srtm90_v4')
print(image.getInfo())

在这里插入图片描述

2.Django框架安装

这部分内容csdn上好多博主都已经写过,这一步目前就跳过了。

3.GEE与Django的集成

以上已经安装好了GEE Python Api和Django框架,下面将会对两者进行集成,开篇提供了一个github项目–GEE Django的连接,下面会通过构建该项目来介绍如何使用。
首先构建一个Django项目,打开所要使用的文件夹,在命令行中输入:

django-admin startproject DjangoGEE 

构建Django项目之后,通过pycharm打开,在Terminal中输入以下命令,创建一个应用程序:

python manage.py startapp gee

创建完应用程序后,需要将其安装到系统中,打开setting.py文件,在以下代码中添加一行,这样系统就会知道我们添加了一个应用程序:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    #添加下面一行
    'gee'
]

在创建的gee文件夹里,找到views.py文件,输入以下内容:

from django.shortcuts import render
# generic base view
from django.views.generic import TemplateView 

#folium
import folium
#gee
import ee
ee.Initialize()

#forntend
#home
class home(TemplateView):
    template_name = 'index.html'
    # Define a method for displaying Earth Engine image tiles on a folium map.
    def get_context_data(self, **kwargs):

        figure = folium.Figure()

        m = folium.Map(
            location=[28.5973518, 83.54495724],
            zoom_start=8,
        )
        m.add_to(figure)       

        dataset = ee.ImageCollection('MODIS/006/MOD13Q1').filter(ee.Filter.date('2019-07-01', '2019-11-30')).first()
        modisndvi = dataset.select('NDVI')
        visParams = {'min':0, 'max':3000, 'palette':['225ea8','41b6c4','a1dab4','034B48']}
        vis_paramsNDVI = {
            'min': 0,
            'max': 9000,
            'palette': [ 'FE8374', 'C0E5DE', '3A837C','034B48',]}

        map_id_dict = ee.Image(modisndvi).getMapId(vis_paramsNDVI)
        folium.raster_layers.TileLayer(
                    tiles = map_id_dict['tile_fetcher'].url_format,
                    attr = 'Google Earth Engine',
                    name = 'NDVI',
                    overlay = True,
                    control = True
                    ).add_to(m) 

        m.add_child(folium.LayerControl())
    
        figure.render()

        print('test')
        return {"map": figure}

新建一个template模板文件夹,并创建index.html作为展示的页面,并输入以下代码:
在这里插入图片描述

<html>

<head>

  <title>Django and GEE</title>

  {{ map.header.render|safe }}

</head>

<body>

  <div class="row" style="height:1080px;width:1920px">
    <div class="col-lg-12">
      {{map.html.render|safe}}
    </div>
  </div>

  <script>

  {{ map.script.render|safe }}
    
  </script>

</body>

到此为止,可能程序会报一些错误
在这里插入图片描述
他这里提示了需要运行:

python manage.py migrate

后面的错误可能是模板文件的错误,在setting.py文件里,将下面一行做一个更改:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        #更改的是下面一行
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

到这为止,代码应该就可以顺利运行了,如果报一些超时的错误,则可能需要添加代理服务器,在views.py文件开头添加以下代码(上面有说过):

import os
os.environ['HTTP_PROXY'] = 'http://127.0.0.1:4780'
os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:4780'

大功告成,输入python manage.py runserver 即可运行该系统,效果大概是以下这样:
在这里插入图片描述

最后说两句

因为国内能找到的资源很有限,本人也在查阅了很多资料后写下这篇博客,在这其中自己也踩了很多坑,也在博客中进行了阐述,避免大家跟我犯同样的错误,也欢迎大家跟我一起交流。
以下是一些参考文章:
Google Earth Engine(python)——为什么要学习 Django 而不是其他框架呢?
GEE官网教程

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
gee(Google Earth Engine)是由谷歌开发的一款云端平台,用于存储、处理、分析和可视化地球数据。它提供了丰富的 Python API,使得用户可以使用 Python 编程语言来访问和操作地球数据。 使用 gee Python API,可以方便地进行地理数据的获取和处理。首先,我们可以使用 gee Python API 连接到 Google Earth Engine 服务器,获取世界范围内的各种地球数据集。这些数据集包括遥感图像(如卫星图像、气候数据等)、地形数据、地表覆盖数据等等。通过 Python API,我们可以使用简洁的代码来获取这些数据,并进行进一步的处理。 在数据获取后,gee Python API 提供了丰富的数据处理和分析功能。例如,我们可以使用 Python API 对遥感图像进行影像处理,如镶嵌、裁剪、融合等。此外,Python API 还支持各种地理统计分析、空间分析和机器学习算法。这些功能使得用户能够从大规模的地球数据提取有用的信息,并进行复杂的分析和建模工作。 除了数据处理和分析,gee Python API 还支持数据的可视化。它提供了丰富的绘图函数和库,可以生成各种静态和交互式地图,将地球数据以清晰、直观的方式展示出来。这使得使用者可以更好地理解和传达数据的结果,并进行更深入的探索和研究。 总之,gee Python API 提供了一个强大而灵活的平台,使得用户能够轻松地访问、处理和分析地球数据。它的丰富功能和易于使用的编程接口,使得科学家、学生和开发者们能够更好地利用地球数据,进行各种地理信息系统、生态环境、气候变化等方面的研究和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值