是否有任何 gmap 的 api 函数可以连接 AddressDetails 结构中的地址字符串?

Posted

技术标签:

【中文标题】是否有任何 gmap 的 api 函数可以连接 AddressDetails 结构中的地址字符串?【英文标题】:Is there any gmap’s api function to concatenate address string from AddressDetails structure? 【发布时间】:2010-03-11 19:49:07 【问题描述】:

我正在使用 Google Map 的 GClientGeocoder 将地图坐标反转为字符串地址。完全如谷歌的例子所示http://code.google.com/apis/ajax/playground/?exp=maps#geocoding_reverse

但是,我想从 place.address 中删除 LocalityName (place.AddressDetails.Country.AdministrativeArea.Locality.LocalityName) 并使用不带任何 LocalityName 的地址字符串。

直接的方法是加入所有 AddressDetails 元素,不包括 LocalityName。然而,最终字符串表示中结构元素的顺序取决于地理位置。

例如:

澳大利亚城市顺序:

ThoroughfareName + “, ” + LocalityName + “ ” + AdministrativeAreaName + “ ” + PostalCodeNumber + “, ” + CountryName

俄罗斯城市顺序:

CountryName + “, ” + PostalCodeNumber + “, ” + LocalityName + “, ” +ThoroughfareName

此外,最后一个示例的 AddressDetails 中没有提供 PostalCodeNumber。

请帮忙!

【问题讨论】:

【参考方案1】:

获取 LocalityName 并在没有它的情况下创建一个新字符串。由于 LocalityName 以未知的方式隐藏在 JSON 结构中,因此您需要递归地遍历整个 AddressDetails 直到找到 LocalityName。示例:

function findLocalityName(item) 
  for (key in item)         
    if (key == "LocalityName") return item[key];
    else if (item[key] instanceof Object) return findLocalityName(item[key]);
  


var place = response.Placemark[0];
var localityName = findLocalityName(place.AddressDetails);          
var noLocalityAddress = place.address.replace(localityName, '');

工作示例:

http://savedbythegoog.appspot.com/?id=6da11815a8a7435cc971acc9cebe99f4732fc5d0

单击地图中的任意位置以显示完整地址、LocalityName 和固定地址。

这可能需要一些小的改进,例如,如果您点击“Redfern St.”在示例中,它将删除街道名称而不是地区名称,因为街道名称与地区名称相同!

【讨论】:

不幸的是,在某些(并非罕见的)情况下,给定的方法不起作用。例如,当 LocalityName 匹配街道地址或城市甚至国家的部分时。 ` 完整地址:Steinalpl 6, 8694 Steinalpl, Austria 地区名称:Steinalpl 否 地区地址:6, 8694 Steinalpl, Austria 经纬度:47.739323,15.556641 纬度:47.7483495,15.5527866 状态代码:200 状态请求:地理代码准确度:8 国家代码:AT ` 目前我没有看到任何解决此问题的方法。但我给你 +1 是出于好意:) 是的,这就是我在上一段中提到的。但是我把解决这个问题留给了你 :) 例如,你可以删除字符串中单词的最后一次出现而不是第一次出现,因为通常 LocalityName 接近结尾。如果 LocalityName 与 Country 相同(它将删除该国家/地区),这仍然会失败,我认为这种情况更为罕见。为了解决这个问题,您可以检查该单词是否出现在字符串的末尾,如果是,则删除该单词的倒数第二个出现。如果不是(国家与 LocalityName 不同),则删除最后一次出现。

以上是关于是否有任何 gmap 的 api 函数可以连接 AddressDetails 结构中的地址字符串?的主要内容,如果未能解决你的问题,请参考以下文章

是否有任何 C 函数或 API 来获取在当前登录用户下运行的进程列表

是否有任何API可以检查WiFi是否已连接到Internet?

可以吗? GMap API V2 中的 clearOverlays() 到 Google Maps API V3?

GMaps API - 删除默认 POI

相当于gmaps api 3中的getBoundsZoomLevel() [重复]

Gmaps API - 许多带有图标和标签的标记在移动设备上加载缓慢