如何使用反向地理编码在Mapbox上获取城市/州/国家信息?

13

我已经阅读了这个API,并基于一些示例测试了很多坐标。https://www.mapbox.com/developers/api/geocoding/

这个示例提供了很多信息,但问题是我没有找到简单的方法只获取城市、州和国家。

http://api.tiles.mapbox.com/v4/geocode/mapbox.places/-114.0701,51.0495.json?access_token=pk.eyJ1IjoibWFyaXNhZmx5bm4iLCJhIjoibG9JcmhrbyJ9.yDc_eDeDW2DeM_JVSQPp7g

我可以获得类似以下的结果

美国弗吉尼亚州麦克林22102

美国加利福尼亚州旧金山94103

英国威斯敏斯特市SW1H6伦敦

美国加利福尼亚州旧金山94114

澳大利亚西澳大利亚州珀斯6053

问题是我必须想办法解析出每个国家的邮政编码(不现实)。

我认为http://api.tiles.mapbox.com/v4/geocode/mapbox.places/可能是错误的端点。 我曾经发现http://api.tiles.mapbox.com/v4/geocode/mapbox.places-country-v1/,但它只返回国家名称。

任何指导如何从 Mapbox 反向地理编码 API 查找中获取城市/州/国家数据?

基本上,答案可以从 feature.properties.context 中的项目构建,只需根据 https://docs.mapbox.com/api/search/geocoding/#data-types 中的文档找到所需的项目即可。 - Václav Stummer
2个回答

13

基于 mapbox 返回的结果,我最终写出了这个函数。根节点给出城镇/城市,然后给出周围的上下文。重点是检查哪个上下文是邮政编码并排除它,同时重建字符串。

                //builds proper format of location string based on mapbox data. city,state/province,country
                function parseReverseGeo(geoData) {
                    // debugger;
                    var region, countryName, placeName, returnStr;
                    if(geoData.context){
                        $.each(geoData.context, function(i, v){
                            if(v.id.indexOf('region') >= 0) {
                                region = v.text;
                            }
                            if(v.id.indexOf('country') >= 0) {
                                countryName = v.text;
                            }
                        });
                    }
                    if(region && countryName) {
                        returnStr = region + ", " + countryName;
                    } else {
                        returnStr = geoData.place_name;
                    }
                    return returnStr;
                }

-1

同上。当我使用地理编码结果数据设置输入字段时,我将使用此格式。

        placeName = geoData.place_name.split(',');
        $('#addressLine1').val(placeName[1]);

            if(v.id.indexOf('region') >= 0) {
                region = v.text;
                $('input[name="vstate"]').val(region);
            }
            if(v.id.indexOf('postcode') >= 0) {
                postcode = v.text;
                $('input[name="vpostalCode"]').val(postcode);
            }
            if(v.id.indexOf('place') >= 0) {
                city = v.text;
                $('input[name="vcity"]').val(city);
            }               
            if(v.id.indexOf('country') >= 0) {
                countryName = v.text;
                if (countryName.indexOf('United States') > 0) {
                    $('input[name="vcountry"]').val("US");
                }
                if (countryName.indexOf('Canada') > 0) {
                    $('input[name="vcountry"]').val("CA");
                }
                else {
                    $('input[name="vcountry"]').val("US");
                }
            }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接