对于大多数用户,没有必要下载GeoTrellis源代码来使用它。本文档的目的是描述为各种用例获取运行环境的最快方法。
到目前为止,能够使用GeoTrellis的最快途径是遵循以下步骤:
git
克隆我们的项目模板库:git clone git@github.com:geotrellis/geotrellis-sbt-template
sbt
其中包含的脚本; 这将启动一个SBT会话,如果它还没有安装它。console
命令; 这将启动Scala解释器。此时,您应该能够在不引发错误的情况下发出命令 。这将使该包的内容可用。例如,可以通过键入在原点创建一个点。import geotrellis.vector._
Point(0, 0)
这个项目可以用作编写简单程序的模板。在项目根目录下是src
具有以src/main
和为根的子树的目录src/test
。前者是应用程序代码所在的位置,后者包含需要它的任何模块的单元测试。SBT文档将描述如何运行应用程序或测试代码。
在登录页面上,显示了与GeoTrellis交互式会话的示例。我们将在这里更详细地重新讨论这个示例,使用该示例的各个部分作为突出库特征的方法,并将初学者编组到文档中感兴趣的部分。
首先需要公开相关软件包的功能(可以在此处找到完整的列表包及其内容摘要 ):
scala> import geotrellis.raster._
import geotrellis.raster._
scala> import geotrellis.raster.mapalgebra.focal._
import geotrellis.raster.mapalgebra.focal._
GeoTrellis的大部分核心功能都在于栅格库。 栅格是具有一定空间范围概念的常规数据网格。使用栅格时,可以与空间信息分开操作数据网格。栅格内部保存的数据网格称为“平铺”。我们可以创建一个示例Tile,如下所示:
scala> val nd = NODATA
nd: Int = -2147483648
scala> val input = Array[Int](
nd, 7, 1, 1, 3, 5, 9, 8, 2,
9, 1, 1, 2, 2, 2, 4, 3, 5,
3, 8, 1, 3, 3, 3, 1, 2, 2,
2, 4, 7, 1, nd, 1, 8, 4, 3)
input: Array[Int] = Array(-2147483648, 7, 1, 1, 3, 5, 9, 8, 2, 9, 1, 1, 2,
2, 2, 4, 3, 5, 3, 8, 1, 3, 3, 3, 1, 2, 2, 2, 4, 7, 1, -2147483648, 1, 8, 4, 3)
scala> val iat = IntArrayTile(input, 9, 4) // 9 and 4 here specify columns and rows
iat: geotrellis.raster.IntArrayTile = IntArrayTile(I@278434d0,9,4)
// The asciiDraw method is mostly useful when you're working with small tiles
// which can be taken in at a glance
scala> iat.asciiDraw()
res0: String =
" ND 7 1 1 3 5 9 8 2
9 1 1 2 2 2 4 3 5
3 8 1 3 3 3 1 2 2
2 4 7 1 ND 1 8 4 3
"
请注意,并非需要指定切片中的每个单元位置; 这是功能NODATA
。另请注意,其NODATA
值因CellType而异。在这种情况下,使用IntArrayTile
意味着如上所述IntCellType
定义NODATA
。
作为GIS软件包,GeoTrellis提供了许多地图代数操作。在下面的示例中,邻域被定义为焦点操作的感兴趣区域,执行焦点平均操作,并查询值:
scala> val focalNeighborhood = Square(1) // a 3x3 square neighborhood
focalNeighborhood: geotrellis.raster.op.focal.Square =
O O O
O O O
O O O
scala> val meanTile = iat.focalMean(focalNeighborhood)
meanTile: geotrellis.raster.Tile = DoubleArrayTile(D@7e31c125,9,4)
scala> meanTile.getDouble(0, 0) // Should equal (1 + 7 + 9) / 3
res1: Double = 5.666666666666667
在此示例中,请注意在计算均值时忽略了NODATA值。
这只是GeoTrellis可能实现的一个非常简单的例子。要了解更多信息,建议读者继续阅读 核心概念部分。内核密度教程中提供了另一个面向新用户的示例。
GeoTrellis适用于采用Apache Spark的分布式环境。它描述了如何设置甚至使用Spark,这超出了快速入门指南的范围,但获取REPL有两种途径可以与Spark进行交互。
第一:从geotrellis/geotrellis-sbt-template
项目根目录,发出./sbt
启动SBT。加载SBT后,发出test:console
命令。这将引发一个REPL,允许使用以下命令构造SparkContext:
val conf = new org.apache.spark.SparkConf()
conf.setMaster("local[*]")
implicit val sc = geotrellis.spark.util.SparkUtils.createSparkContext("Test console", conf)
然后可以发出诸如的命令 sc.parallelize(Array(1,2,3))
。
或者,如果项目目录树中包含源文件,则可以发出assembly
命令sbt
以生成胖.jar文件,该文件将显示在target/scala-
当前项目根目录下的目录中。只要您在本地计算机上安装了Spark,该jar文件就可以作为命令的一部分提供给Spark shell 。通过创建的Fat jar 也可以提供给 在远程Spark master上运行作业的命令。同样,Spark的细节超出了本文档的范围,但这些指针可能提供有用的跳跃点。spark-shell --conf spark.serializer=org.apache.spark.serializer.KryoSerializer --jars
assembly
spark-submit