Geotrellis学(踩)习(坑)笔记(二)——矢转栅

矢量转栅格一直是GIS领域的一个重要的问题,对于分布式计算来说,栅格数据较矢量数据更加优化,查询、分析起来也更快。于是我们考虑可以将全国的地表覆盖数据全部栅格化之后来进行分析。

那就先试一下最简单的栅格化好惹 生成一张单波段的栅格图像,同时栅格的值表示地表覆盖数据中的分类码。

我先在geotrellis的系列文章中翻了一下,发现还真有一篇矢量栅格化的文章:

https://www.cnblogs.com/shoufengwei/p/5619419.html

于是我先照着文章里的做法试了一下:

为了方便测试,我在arcgis中随便画了四个polygon,坐标是4326

1.首先将矢量数据读进来

读取矢量数据首先需要引入一些geotools的包,在build.sbt里加一些依赖:

resolvers := Seq(
"Typesafe Releases" at "http://repo.typesafe.com/typesafe/maven-releases/",
"Unidata Repository" at "https://artifacts.unidata.ucar.edu/content/repositories/unidata-releases",
MavenRepository("geotools","http://download.osgeo.org/webdav/geotools"),
"nscala-time" at "http://mvnrepository.com/artifact/com.github.nscala-time/nscala-time_2.10"
)

libraryDependencies += "com.vividsolutions" % "jts" % "1.13"
libraryDependencies += "org.geotools" % "gt-main" % "14.1"
libraryDependencies += "org.geotools" % "gt-shapefile" % "10.2"
上面那一段resolvers表示geotools的包可以去maven的仓库里下载

更新完所有的包之后,就可以读取矢量文件啦~ 这里提供两种方法(其实是同一种方法→。→)

第一种方法:方法一是博客里的方法,直接把geotrellis读取shp的代码搬过来,最后得到的是一个Seq[Geometry]:

代码如下:

def getFeatures(path: String, attrName: String = "the_geom", charset: String = "UTF-8"): mutable.ListBuffer[Geometry] ={
    val features = mutable.ListBuffer[Geometry]()
    var polygon: Option[MultiPolygon] = null
    val shpDataStore = new ShapefileDataStore(new File(path).toURI().toURL())
    shpDataStore.setCharset(Charset.forName(charset))
    val typeName = shpDataStore.getTypeNames()(0)
    val featureSource = shpDataStore.getFeatureSource(typeName)
    val result = featureSource.getFeatures()
    val itertor = result.features()
    while (itertor.hasNext()) {
      val feature = itertor.next()
      val p = feature.getProperties()
      val it = p.iterator()

      while (it.hasNext()) {
        val pro = it.next()
        if (pro.getName.getLocalPart.equals(attrName)) {
           features += WKT.read(pro.getValue.toString) //get all geom from shp
        }
      }
    }
    itertor.close()
    shpDataStore.dispose()
    features
  }
第二种方法:直接调用ShapeFileReader中readSimpleFeature的方法,最后得到一个Feature类型的Listbuffer:
代码如下:

val shpPath = "D:\\IdeaProjects\\ScalaDemo\\data\\shapefile\\shp2raster2.shp";
val features = readSimpleFeatures(shpPath)
原文中作者一直报错,但是我这里没有

你可能感兴趣的:(Geotrellis)