基于Spark读取Shapefile:如何提取多边形数据?
解决Spark-shp读取Shapefile中Polygon的问题
首先,spark-shp读取Shapefile返回的RDD元素类型是com.esri.core.geometry.Geometry,Point只是它的子类之一,Polygon同样继承自Geometry类。你可以通过类型匹配+过滤来提取Polygon数据:
先导入依赖类:
import com.esri.core.geometry.{Geometry, Polygon, Point} import org.apache.spark.rdd.RDD对读取后的Geometry RDD做类型转换:
// 假设已读取得到 geometryRDD: RDD[Geometry] val polygonRDD: RDD[Polygon] = geometryRDD .filter(_.isInstanceOf[Polygon]) .map(_.asInstanceOf[Polygon])
如果需要操作Polygon的具体属性(比如顶点、环结构),可以调用Polygon类的内置方法:
polygonRDD.foreach(polygon => { // 获取多边形的环数量 val ringNum = polygon.getRingCount() // 遍历第一个环的所有顶点 val outerRing = polygon.getRing(0) for (i <- 0 until outerRing.getPointCount()) { val vertex = outerRing.getPoint(i) println(s"顶点坐标: (${vertex.getX()}, ${vertex.getY()})") } })
最后需要确认:你读取的Shapefile本身是否包含Polygon类型要素。如果源文件只有Point数据,自然提取不到Polygon,可以用QGIS等工具先验证Shapefile的要素类型。
内容的提问来源于stack exchange,提问作者blackstorm
相关产品推荐
相关产品推荐

