背景
对于GIS的大数据量实时数据分析和渲染的需求,ArcGIS Server和Geoserver、普通空间数据库往往难以满足,对此我一直感觉很沮丧。这时就要寻求大数据的分布式框架帮助。(ArcGIS的ga也可以,但是太贵)
现状
我了解到有Geomesa,Geotrellis,GeoWave三大框架。GeoWave和Geomesa都可以支持Geoserver,但是Geotrellis可以支持这两个框架。Geotrellis是一个高性能的GIS数据应用,可以处理栅格和矢量数据,提供实时的rest服务,能够渲染数据并提供切片服务。本文要使用的是它的py版geopyspark。
准备
首先在linux(Centos 7)环境中安装docker,参考菜鸟教程(安装教程)。然后执行下面的命令,经过漫长的等待(装了一天,终于在早上装好了),完成就会启动项目。
sudo docker run -it --rm --name geopyspark -p 8000:8000 quay.io/geodocker/jupyter-geopyspark:b
log
浏览器访问localhost:8000/链接,输入账户名密码hadoop.jupyter中有一个自带例子,修改原来的下载数据代码,注释例子中最后一个格子的代码,程序会自动下载数据并读取数据计算分析生成切片展示到前台界面(原数据因为墙的问题通过代码下载失败,所以我事先下好数据放到github上面)
!curl -o /tmp/bars.geojson https://raw.githubusercontent.com/tpolong/geodocker/master/bars.geojson
!curl -o /tmp/cafes.geojson https://raw.githubusercontent.com/tpolong/geodocker/master/cafes.geojson
!curl -o /tmp/transit.geojson https://raw.githubusercontent.com/tpolong/geodocker/master/transit.geojson !curl -o /tmp/roads.geojson https://raw.githubusercontent.com/tpolong/geodocker/master/roads.geojson
成果
本例中主要实现的是距离成本计算,根据酒吧、咖啡馆、中转站的不同权重结合道路计算距离成本,有蓝色向黄色转变表示成本由高到低的变化。
参考资料:
Geotrellis官网
geospark的github地址
how-to-run-geopyspark-in-a-geonotebook-with-docker
introducing-geopyspark-a-python-binding-of-geotrellis