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

本文介绍了在GIS领域如何使用Geotrellis进行矢量转栅格的过程,探讨了分布式计算中栅格数据的优势。通过阅读相关文章并尝试,作者分享了从读取矢量数据到栅格化的步骤,包括使用Scala处理Shapefile,以及在Spark环境下进行栅格化。在实践中遇到了Feature序列化问题,最终通过修改代码实现了将RDD[(Geometry, Double)]转换为栅格数据。文章还简要讨论了Geotrellis的边界取值策略。" 123420328,1347733,OpenGL ES 实现绿幕抠图与背景替换技术,"['计算机视觉', 'OpenGL ES', '图像处理', 'GPU编程', '视频制作']
摘要由CSDN通过智能技术生成

矢量转栅格一直是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 = readSimpleFeature

cda备考笔记——基础知识篇()主要涉及了计算机科与技术领域的基本概念和知识。 首先,它介绍了计算机网络的基础知识。网络是将多台计算机通过通信链路连接起来,使它们能够相互通信和共享资源的系统。笔记中详细介绍了网络的组成、拓扑结构和通信协议等重要内容。 其次,笔记还解释了计算机系统的基本组成。计算机系统由硬件和软件两部分组成,其中硬件包括中央处理器、存储器、输入输出设备等,而软件则分为系统软件和应用软件。笔记详细介绍了各种硬件和软件的功能和作用。 此外,笔记还对数据库管理系统进行了介绍。数据库管理系统是一种用于管理和组织数据的软件系统,它能够实现数据的存储、检索和更新等操作。笔记中详细介绍了数据库的概念、结构和操作等内容。 最后,笔记还包括了算法和数据结构的基础知识。算法是解决问题的一系列步骤和规则,而数据结构则是组织和存储数据的方式。笔记中介绍了常用的算法和数据结构,如排序算法、树和图等。 总之,通过CDA备考笔记中的基础知识篇(),我们能够更好地理解计算机网络、计算机系统、数据库管理系统以及算法和数据结构等相关概念和知识。这些基础知识对于我们深入研究计算机科与技术领域是非常重要的,也为我们日后的和工作奠定了坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值