google earth engine随缘学习(二)介绍发布GEE地图

这一篇介绍发布GEE地图,偏摸索向

给几个官方发布的引用GEE的demo例子

官方demo—https://developers.google.com/earth-engine/app_engine_examples

打开可以看见代码,本科毕设时做过这个,那个时候只是简单套用模板,现在多多少少有一点框架的知识,看起来稍微容易一点。

先从灯光例子开始学(因为这个比较炫)
在这里插入图片描述
在这里插入图片描述
它这里用的是Jinja2框架,我之前用过django框架,反正两者差不多,我就用django来做了。从github下载下来html文件和static里的所有文件放到我的django框架对应的路径里去。
接着修改:

在这里插入图片描述
在script.js里面,这里的key要写上自己从谷歌地图申请下来的key,不然会无法加载谷歌地图。

在这里插入图片描述
在index.html末尾处,这里要写上eeMapId和eeToken,本demo的两个值要打开示例网页,通过控制台查看,我直接贴出来,复制粘贴替换上述代码就好了。
在这里插入图片描述
最后就能完美的在本地运行了~
在这里插入图片描述

关于eeMapId和eeToken的获取

本来我以为这个值是图像的ID,在GEE可以直接获取,后来发现不是,原来是在server.py生成并传入js的两组代码,现在我把相关功能源代码贴出来:
注意:token好像是随机生成的。而且是有时间限制的,所以官方例子中token是动态生成的

import ee

def GetTrendyMapId():
    collection = ee.ImageCollection(IMAGE_COLLECTION_ID)
    def CreateTimeBand(img):
        year = ee.Date(img.get('system:time_start')).get('year').subtract(1991)
        return ee.Image(year).byte().addBands(img)

    collection = collection.select('stable_lights').map(CreateTimeBand)
    fit = collection.reduce(ee.Reducer.linearFit())
    return fit.getMapId({
        'min': '0',
        'max': '0.18,20,-0.18',
        'bands': 'scale,offset,scale',
    })

ee.Initialize()
IMAGE_COLLECTION_ID = 'NOAA/DMSP-OLS/NIGHTTIME_LIGHTS'
mapid = GetTrendyMapId()
print(mapid)

这里的代码是对历年灯光数据变化做一个线性拟合,得到offset和scale两个参数波段,并将这两个参数波段通过某种拉伸做可视化,并最后封装成代码。
下面将用上述方法来实现人口密度数据的发布:
修改参数为:

def GetTrendyMapId():
    collection = ee.ImageCollection('CIESIN/GPWv4/population-density')
    collection = collection.select('population-density')
    fit = collection
    return fit.getMapId({
        'min': '-40.585220364507',
        'max': '3423.0576525324904',
        'bands': 'population-density',
        'palette': 'eef3e4,ffa2d1,ff1b64'
    })

得到id和token后去替换,再次运行得到网页:

在这里插入图片描述
了解了大致的原理后,就可以通过openlayers发布瓦片地图服务了(不过只是暂时的)~

<!DOCTYPE html>
<html>
  <head>
    <title>Simple Map</title>
    <link rel="stylesheet" href="https://openlayers.org/en/v4.6.5/css/ol.css" type="text/css">
    <!-- The line below is only needed for old environments like Internet Explorer and Android 4.x -->
    <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>
    <script src="https://openlayers.org/en/v4.6.5/build/ol.js"></script>
  </head>
  <body>
    <div id="map" class="map"></div>
    <script>
        var map = new ol.Map({
        layers: [
                   new ol.layer.Tile({
                  source: new ol.source.XYZ({
                              url:  'https://earthengine.googleapis.com/map/69f116ad42579461da2c45099d659e33/{z}/{x}/{y}?token=839c83429c13908ba804ce4d3824a823',               
                                })
          }),
        ],
        target: 'map',
        view: new ol.View({
          center: ol.proj.transform(
              [-122.416667, 37.783333], 'EPSG:4326', 'EPSG:3857'),
          zoom: 12
        })
      });
    </script>
  </body>
</html>

注意: 2019.12.10补充部分

新的earthengine-api包里修改了ee.Initialize()里的默认参数,

在这里插入图片描述
当默认为true时,输出的mapid将包括mapid和token,原有的token属性变成空,新的改变怎么去加载地图我并没有研究,,但是如果想实现原有的方法加载地图,只需要修改下面_init_.py里的Initialize()里的use_cloud_api参数即可,这里的参数代表是是否启用谷歌云~
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值