使用topojson.feature处理JSON数据时出现Cannot read property 'countries' of undefined错误
问题排查:Uncaught TypeError: Cannot read property 'countries' of undefined
嘿,这个错误我太熟悉了!咱们直接揪出问题根源:
核心原因:数据类型完全不匹配
你通过$.getJSON获取的是陨石撞击事件的GeoJSON数据——从你给出的结构就能看到,它是标准的FeatureCollection格式,直接包含features数组(每个元素是单个陨石的点位特征)。
但你执行的代码topojson.feature(data, data.objects.countries).features,是专门用来处理TopoJSON格式地理数据的逻辑!TopoJSON的结构里才会有objects属性,用来归类存储不同的地理要素集合(比如国家countries、州states这类边界数据)。
你的陨石数据里根本没有objects这个属性,所以data.objects会返回undefined,当你试图访问undefined的countries子属性时,自然就抛出了这个错误。
快速解决方案
根据你的需求不同,有两种处理方式:
- 如果你的目标是处理陨石撞击点数据:直接使用GeoJSON自带的
features即可,不需要TopoJSON转换:// 直接提取陨石点位特征 const meteoriteFeatures = data.features; - 如果你同时需要国家边界这类地理数据:你需要单独加载一份TopoJSON格式的国家边界数据集,再用
topojson.feature去提取其中的countries要素,不要把陨石数据和边界数据混在一起处理。
内容的提问来源于stack exchange,提问作者Krishna Kamal
相关产品推荐
相关产品推荐

