如何在Kotlin中从JSON文件解析数据生成新的GeoJSON?
将JavaScript GeoJSON转换代码迁移到Kotlin
步骤1:定义对应的数据类
Kotlin是静态类型语言,需先创建数据类映射GeoJSON和输入数据的结构:
// GeoJSON核心结构 data class FeatureCollection( val type: String = "FeatureCollection", val features: MutableList<Feature> = mutableListOf() ) data class Feature( val type: String = "Feature", val properties: Map<String, Any> = emptyMap(), val geometry: Geometry ) data class Geometry( val type: String = "LineString", val coordinates: MutableList<List<Double>> = mutableListOf() ) // 输入的轨迹数据结构(匹配你的JSON格式) data class TrackData( val track: List<TrackPoint> ) data class TrackPoint( val Lon: Double, val Lat: Double )
步骤2:实现转换逻辑
对应原JavaScript的jsonToGeo函数,Kotlin版本如下:
fun jsonToGeo(data: TrackData): FeatureCollection { val routeCollection = FeatureCollection() val coordinates = mutableListOf<List<Double>>() // 遍历轨迹点,收集经纬度坐标 data.track.forEach { point -> val coordPair = listOf(point.Lon, point.Lat) coordinates.add(coordPair) } // 构建Feature并加入集合 val lineFeature = Feature( geometry = Geometry(coordinates = coordinates) ) routeCollection.features.add(lineFeature) return routeCollection }
步骤3:JSON解析与序列化(可选)
如果需要直接处理JSON字符串,可使用Jackson库:
- 添加Gradle依赖:
implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.15.2")
- 解析JSON并执行转换:
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.fasterxml.jackson.module.kotlin.readValue import java.io.File // 读取本地JSON文件内容 val jsonContent = File("your-track-data.json").readText() val mapper = jacksonObjectMapper() // 解析JSON为TrackData对象 val trackData = mapper.readValue<TrackData>(jsonContent) // 转换为GeoJSON结构 val geoJsonCollection = jsonToGeo(trackData) // 可选:将结果转回JSON字符串 val finalGeoJson = mapper.writeValueAsString(geoJsonCollection)
注意事项
- 原JS代码使用全局变量存储临时对象,Kotlin更推荐用局部变量并返回结果,避免可变全局状态的问题。
- 如果你的输入JSON结构和示例中的
TrackData有差异,需调整对应数据类的字段名和结构。
内容的提问来源于stack exchange,提问作者Brianna Drew
相关产品推荐
相关产品推荐

