开发者学堂课程【大数据 Spark2020版(知识精讲与实战演练)第四阶段:行政区信息_GeoJSON 介绍】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/691/detail/12120
行政区信息_GeoJSON 介绍
GeoJSON 介绍
如何解析 Geometry 对象
1.GeoJSON 读取工具的介绍
打开数据集查看其中格式
进行解析后发现 features 数组,每一个元素代表一个行政区元素有一个类型 feature,有 properties 一些复杂信息,boroughCode 编号,borough 行政区,Staten Island纽约的行政区,有 IP,geometry JSON 对象,JSON 对象指定polygon,polygon 代表区域,coordinates 区域每条边的起始,通过 geometry 对象找到行政区所在的范围,范围最终要进行计算,GeoJSON 解析工具解析内容,生成对应的对象,提供对应的计算功能。
(1)介绍
读取 GeoJSON 的工具有很多,但是大部分都过于复杂,有一些只能 Java 中用
有一个较为简单,也没有使用底层∈语言开发的解析 GeoJSON 的类库叫做 ESRI Geometry , Scala 中也可以支持
(2)使用
ESRI Geometry 的使用比较的简单,大致就如下这样调用即可
val mg = GeometryEngine.geometryFromGeoJson( jsonStr,0,Geometry.Type.Unknown)
①
val geometry = mg
.
getGeometry
②
GeometryEngine.contains(geometry, other, csr)
③
①读取 JSON 生成 Geometry 对象
②重点:一个 Geometry 对象就表示一个 GeoJSON 支持的对象,可能是一个点,也可能是一个多边形
③判断一个 Geometry 中是否包含另外一个 Geometry
有一个 GeometryEngine 对象,通过 geometryFromGeoJson 方法,传入 jsonStr,传入后得到 mg 对象,通过 getGeometry 获取 Geometry 对象,通过 GeometryEngine 判断一个 point 点是否在 geometry 所代表的行政区范围内
找到数据集,复制数据集进入 idea 中,导入
ESRI 是很出名的 GeoJSON 的解析工具,满足 scala 中进行 GeoJSON 解析的需求,提供计算功能,通过 ESRI 将 jsonStr 转为 geometry 对象,geometry 对象代表 geometry 这一类型对象,可以是点、边或多边形,表示多边形就是一个范围,可以判断一个点是否在其范围内,进而判断下车点是否在行政区范围内,使用较为简单 JSON 字符串即 geometry 一段。
2.总结
(1)JSON 解析
FastJSON 和 Gson 直接在 Scala 中使用会出现问题,因为 Scala 的对象体系和 Java 略有不同
最为适合 Scala 的方式是使用 JSON4S 作为上层 API ,Jackson 作为底层提供 JSON 解析能力,共同实现 JSON 解析
其使用方式非常简单,两行即可解析
implicit val formats = Serialization.formats(NoTypeHints)
val obj = read[Person] (product)
(2)GeoJSON 的解析
有一个很适合 Scala 的 GeoJSON 解析工具,叫做 ESRI Geometry ,其可以将 GeoJSON 字符串转为 Geometry 对象,易于使用
GeometryEngine.geometryFromGeoJson(jsonStr,0,Geometry.Type.unknown)
(3)后续工作
读取行政区的数据集,解析 JSON 格式,将 JSON 格式的字符串转为对象.
使用 ESRI 的 GeometryEngine 读取行政区的 Geometry 对象的 JSON 字符串,生成Geometry 对象
使用上车点和下车点的坐标创建 Point 对象(Geometry 的子类)
判断 Point 是否在行政区的 Geometry 的范围内(行政区的 Geometry 其实本质上是子类 Polygon 的对象)