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