我知道这看起来像一个重复的问题,但我的问题略有不同,没有任何已经发布的帮助我。
我需要检测用户的城市。我目前只是使用一些第三方API将用户的IP编码为城市名称。但这确实是不准确的(考虑我的国家尼泊尔几乎所有地方都显示为首都)。
我尝试使用HTML5的地理位置API,但这只是给了我用户的地理坐标。我尝试使用Google的地理编码API,但我没有得到一致的结果格式(可能是因为不同国家/地区的地址编写方式不同)。我的意思是在生成的JSON对象中,对于美国的地址,第五个对象给出城市名称,而对于英国的地址,它是第四个对象,而其他地方用于印度的地址。
例如,
见
http://maps.googleapis.com/maps/api/geocode/json?latlng=51.441944,%20-0.945556&sensor=true
vs
http://maps.googleapis.com/maps/api/geocode/json?latlng=42.155101995,-71.10080&sensor=true。
这种不一致使我的代码很难从结果JSON中解析城市名称。
同样的问题出现在How to get city from coordinates?的评论中,但没有解决方案。
理想情况下,我喜欢以某种方式将用户的地理坐标映射到他/她的城市名称(如何?),并且仅将基于IP的检测用作后备。但是,我找到的坐标到名称映射(Google API)的唯一解决方案在我的情况下不起作用。
谢谢!
答案 0 :(得分:0)
我认为你用一个无效的假设来解决这个问题:所有地理坐标都受到城市的限制。你可以做的最好的是一个更大的行政区域(例如一个省)。
在解析Google Maps API的地理编码响应时:types
键包含适用于相应值的地址组件数组。这些类型在Geocoding API "Types" section中定义明确。此外,这些类型是普遍的,并且因国家而异。
您需要替换相应的回退,但看起来locality
是您要引用的类型。如果坐标不受城市约束,administrative_area_level_2
可能是次要参考的最佳值。