# python-grass-addon **Repository Path**: jiangroubao/python-grass-addon ## Basic Information - **Project Name**: python-grass-addon - **Description**: No description available - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-05-05 - **Last Updated**: 2022-05-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 如何开发GRASS GIS7 Python 插件 本材料fork自github: https://github.com/wenzeslaus/python-grass-addon ## 使用指导 ### 仅使用GRASS GIS 图形界面运行程序 启动GRASS GIS程序,将下载的后缀为`.ipynb`的文件打开。 在GRASS GIS的*Layer Manager*窗口中,选择底部的*Python shell*。 即可进入Python控制台,可以将`.ipynb`中的代码复制到*Python shell*中进行测试。 ### 使用独立的jupyter notebook运行程序 在系统Terminal中,根据自己的需要创建项目文件夹: mkdir grass_addon cd grass_addon git clone https://github.com/wenzeslaus/python-grass-addon.git 未翻墙的情况下,为了加快下载速度,可以使用码云服务: git clone https://gitee.com/jiangroubao/python-grass-addon.git 项目克隆完成后,进入项目目录中: cd python-grass-addon 在项目目录下运行GRASS GIS程序,使用默认的北卡罗来纳州样例数据 grass7 打开GRASS GIS的*Layer Manager*窗口,在下方的console中输入并回车: ipython notebook 然后会看到弹出浏览器,可以在其中选择单个的`.ipynb`,在Jupyter Notebook环境中编辑并运行示例。 ## 摘要 GRASS GIS是地理数据分析的领先软件,它的核心版本提供了400多个模块以及许多附加组件(即用户提供的模块)。但是,如果要寻找的工具不在GRASS GIS中怎么办? 因此,只需创建自己的,我们将在本教程中展示如何实现。 在GRASS GIS 7中,Python是用于创建插件的默认语言,GRASS GIS中包含两个主要的Python库,Python脚本库允许通过链接现有模块来创建自己的工作流程,执行分析和计算新数据。 使用C语言封装的PyGRASS函数库,可以直接通过Python调用创建新的数据集(矢量或栅格),从而大大提高了脚本的功能和性能。可以方便地将GRASS Python库与其他Python库(例如NumPy或SciPy)混合使用。在本教程中,将指导完成编写自己的Python脚本的基本步骤,从调用和链接GRASS GIS模块开始,然后是使用PyGRASS直接访问和修改数据等更多python体验。 然后,通过定义一个简单的界面来启用自动生成的GUI,从而将脚本升级为插件。教程的下一部分将探讨GRASS GIS 7功能的更高级用法,包括在插件中使用Python API处理时间序列数据,最后基于自己开发的插件创建自己的工具箱,最后介绍测试插件的测试框架 以确保插件状态良好。 ## 需要的知识背景 学习者应具有GIS的基础知识,GRASS GIS的基础知识、Python的基础知识、Docker容器的基础知识。 ## 安装服务 在学习过程中,借助于服务器搭建好的配置环境,使用IPython Notebook(Jupyter Notebook)的构建方式,而不是在每台计算机上设置环境。当IPython Notebook在服务器上使用,学习者只需要一个浏览器进行编程,服务器端的设置都可以基于Docker环境进行构建。构建步骤为: ## 构建GRASS GIS Docker镜像 mkdir workdir     cd workdir wget http://grass.osgeo.org/sampledata/north_carolina/nc_basic_spm_grass7.tar.gz wget https://github.com/wenzeslaus/python-grass-addon/archive/master.tar.gz tar xvf nc_basic_spm_grass7.tar.gz     tar xvf master.tar.gz 如果下载比较慢,可以从百度云下载压缩包 链接:https://pan.baidu.com/s/10mYXgn2xt6RhMa7kQX5B7A  提取码:h19p 然后,获取GRASS GIS的Docker环境,请注意,如果用户没有使用Docker的权限(通常为defaut),则必须在docker命令前加上sudo前缀。这一条在之后的Docker环境中的操作同样适用。 如果Docker下载较慢的话,在上面提到的网盘中或者 https://gitee.com/jiangroubao/grass-gis-docker-xpra 下载解压,然后,运行docker build命令 sudo docker build -t [username]/grass-gis-docker . #如果没有安装docker,则先运行: sudo apt-get install docker.io 至此,已经建立好了一个带有GRASS GIS的Docker镜像 ## 构建Ipython Notebook环境镜像 基于GRASS GIS作为底层镜像,添加一层带有Ipython notebook的Docker镜像。 首先从python-grass-addon-master文件夹中的三个复制文件到workdir文件夹中: cd ~/workdir cp python-grass-addon-master/Dockerfile .     cp python-grass-addon-master/run_containers.sh .     cp python-grass-addon-master/command_containers.sh . 然后,基于示例数据集和Notebook构建Docker镜像。如果将镜像用于GRASS GIS(请参见上文),确保Dockerfile中具有正确的映像名称(由以下命令使用),打开其中的Dockerfile,修改成自己定义的用户名: FROM [usersname]/grass-gis-docker:latest MAINTAINER Vaclav Petras ADD python-grass-addon-master /notebooks ADD nc_basic_spm_grass7 /grassdata/nc_basic_spm_grass7 然后运行 sudo docker build -t wenzeslaus/python-grass-addon . 在创建镜像的同时,可以为每一个使用者创建配置文件,该文件的每行开头必须包含电子邮件格式(例如CSV,开头的双引号将被忽略)。 john@university.edu jsmith@example.com 然后,根据服务器的地址,修改run_containers.sh文件中的域名: vim run_containers.sh #修改这一行: echo "${user} [服务器公网地址]:${port} ${password}" 然后,为列表中的每一个用户创建镜像 ./run_containers.sh workshop_atendees.txt 9000# 第一个参数表示用户配置文件/用户数量,第二个参数表示起始的端口号 另外,可以仅指定要创建的容器数量,而不用配置具体的使用者: ./run_containers.sh 15 9000 这将然后会自动生成URL和密码列表以及相关的用户名,用户名仅用于跟踪容器和分发凭据。注意,使用者将必须在其浏览器中允许“不受信任的连接”对话框,因为所使用的证书是自签名的。 该指令同时也会创建一个名为containers_workshop_atendees.txt或者containers_dateandtime.txt的带有容器名称的文本文件。 如果要退出容器,请使用: ./command_conatiners.sh stop containers_workshop_atendees.txt    #该文件就是之前的用户配置文件 ./command_conatiners.sh rm containers_workshop_atendees.txt 至此,Docker环境就构建好了,可以利用浏览器直接登陆  用户IPython Notebook服务器时的说明 学习者将会获得例如如下网址: https://fatra.cnr.ncsu.edu:9503 本例中的结果为: http://112.126.92.240:9000/ 将url键入到Web浏览器中,注意是否为https协议,还请注意已指定端口号(末尾的数字与域之间用冒号隔开),注意在服务器安全组中开放响应的端口。 浏览器将警告您有关无效的安全证书,在这种情况下,您可以允许其运行,出现此消息的原因是证书是自签名的。 最后,输入得到的密码,登陆到IPython Notebook环境中。 项目地址: https://gitee.com/jiangroubao/python-grass-addon ## 该教程的视频 (https://www.youtube.com/watch?v=PX2UpMhp2hc) ## 原作者 * Pietro Zambelli, European Research Academy * Markus Neteler, Fondazione Edmund Mach * Luca Delucchi, Fondazione Edmund Mach * Vaclav Petras, NCSU OSGeoREL * Anna Petrasova, NCSU OSGeoREL Copyright (C) 2015 by authors. ## 协议 本文档根据CC BY-SA和GNU FDL 双重许可 代码示例执行GNU GPL 2 许可