JavaScript如何将JSON数据转换为GeoJSON格式应用于地图项目
问题根因
- 你获取到的
jsonData是数组格式(外层由[]包裹多个站点对象),你直接以对象的方式读取jsonData['latitude']属性,数组本身不存在这两个属性,自然会报未定义错误。 - 单个
Feature结构只能存储单个点位数据,你有多条站点数据,需要生成标准的FeatureCollection格式的GeoJSON,才能符合大多数地图组件的渲染要求。 - 注意GeoJSON的Point类型坐标顺序要求是 [经度, 纬度],你原代码写反了顺序,会导致点位渲染位置偏移。
- 你原始数据中的经纬度是字符串类型,最好转换为数字格式,避免部分地图组件解析时报错。
修正后的转换代码
$.getJSON("./origin/neworigin.json", function(jsonData) { // 初始化标准GeoJSON FeatureCollection结构 var outGeoJson = { "type": "FeatureCollection", "features": [] }; // 遍历所有站点数据,逐个生成Feature jsonData.forEach(function (item) { var feature = { "type": "Feature", "properties": item, "geometry": { "type": "Point", // 坐标顺序为经度在前、纬度在后,同时转换为数字类型 "coordinates": [Number(item.longitude), Number(item.latitude)] } }; outGeoJson.features.push(feature); }); console.log(outGeoJson); // 此处可直接将outGeoJson传入地图组件使用 });
效果验证
运行修正后的代码输出的就是标准GeoJSON格式,可直接传入Leaflet、Mapbox、OpenLayers等主流地图库的点位渲染接口使用,不会再出现属性未定义的报错。
内容的提问来源于stack exchange,提问作者Ander Canales Medina
相关产品推荐
相关产品推荐

