前端JavaScript如何将含GPS的JSON数组转换为GeoJSON对象?
将JSON数组转换为GeoJSON对象(前端JavaScript实现)
问题描述
我有一个包含12个JSON对象的数组,每个对象结构如下:
{ "data_type" : "trainings", "description" : "Training in Narewa", "district" : "Rewa", "gps_lat" : "-18.1295977111", "gps_lon" : "178.556147326", "id" : 24, "location" : "Tavuya", "program" : "Training in Nadi", "project" : "Entrepreneurship", "province" : "Rewa" }
请问如何使用前端JavaScript将该数组转换为GeoJSON对象?
实现方法
GeoJSON中最常用的多要素容器是FeatureCollection,每个地理要素对应一个Feature,包含存储经纬度的geometry和存储其他业务属性的properties。你可以通过数组遍历快速完成转换:
// 假设原始数据数组名为trainingData const trainingData = [/* 你的12个JSON对象数组 */]; // 转换为标准GeoJSON const geoJson = { type: "FeatureCollection", features: trainingData.map(item => { return { type: "Feature", geometry: { type: "Point", coordinates: [ parseFloat(item.gps_lon), // GeoJSON坐标顺序为[经度, 纬度] parseFloat(item.gps_lat) ] }, // 提取除经纬度外的所有属性作为Feature的属性 properties: (({ gps_lat, gps_lon, ...restProps }) => restProps)(item) }; }) }; // 输出转换结果 console.log(geoJson);
关键注意事项
- 坐标顺序:GeoJSON规定
Point类型的坐标是[经度, 纬度],必须和原数据的gps_lon、gps_lat对应,不能颠倒。 - 类型转换:原数据中的经纬度是字符串格式,需要用
parseFloat转为数值类型,符合GeoJSON的规范要求。 - 属性简化:使用对象解构赋值
({ gps_lat, gps_lon, ...restProps }) => restProps可以自动排除经纬度字段,无需手动列举所有其他属性,代码更简洁。
内容的提问来源于stack exchange,提问作者Solo
相关产品推荐
相关产品推荐

