我正在使用Google Maps API,并尝试对某个地址进行地理编码。但是,出于某种原因,谷歌正在返回来自整个国家的类似地址,尽管我指定了一个城市,州和邮政编码。所以现在我有一个巨大的XML响应。如果您在自己的CF模板中运行以下代码,您将看到我在说什么。
我正在尝试获取“Bakersfield CA”地址的地理编码。但是,由于Google首先返回“Homer,LA”响应,这就是我的代码所采用的。
<cfhttp url="http://maps.googleapis.com/maps/api/geocode/xml?address=327%20BEARDSLEY%20AVE%20&city=Bakersfield&state=CA&zip=93308" method="get" timeout="300"> </cfhttp>
<cfif Left(CFHTTP.StatusCode, 3) EQ "200">
<cfset xmlResponse = XmlParse(CFHTTP.FileContent)>
<cfset mylat = xmlResponse.GeocodeResponse.result.geometry.location.lat.xmlText>
<cfset mylon = xmlResponse.GeocodeResponse.result.geometry.location.lng.xmlText>
#mylat#
</cfif>
FOR DEBUGGING
<cfoutput>
<cfdump var="#xmlResponse#">
</cfoutput>
答案 0 :(得分:2)
Google Maps Geocoding网络服务不支持您提供的parameters(城市,州,邮政编码),因此它会看到:
327 BEARDSLEY AVE
远未完全指定。
如果您将完整地址放在正确的参数(地址)中,它将为您提供您期望的结果:
支持的参数(根据documentation referenced above)
地理编码(纬度/经度查找)
地理编码请求中的必需参数:
地址 - 您要进行地理编码的地址。 要么 组件 - 您希望获取地理编码的组件过滤器。有关更多信息,请参阅组件过滤。如果提供了地址,则组件过滤器也将被接受为可选参数。
地理编码请求中的可选参数:
bounds - 视口的边界框可以更加突出地偏向地理编码结果。此参数仅影响(而非完全限制)地理编码器的结果。 (有关详细信息,请参阅下面的“视口偏差”。)
密钥 - 您的应用程序的API密钥。此密钥用于标识您的应用程序以进行配额管理。了解如何从API控制台获取密钥。
语言 - 返回结果的语言。请参阅支持的域语言列表。请注意,我们经常更新支持的语言,因此此列表可能并非详尽无遗。如果未提供语言,则地理编码器将尝试使用尽可能从中发送请求的域的本地语言。
区域 - 区域代码,指定为ccTLD(&#34;顶级域&#34;)双字符值。此参数仅影响(而非完全限制)地理编码器的结果。 (有关更多信息,请参阅下面的区域偏差。)
组件 - 组件过滤器,由管道(|)分隔。每个组件过滤器由一个组件:值对组成,将完全限制地理编码器的结果。有关更多信息,请参阅下面的“组件过滤”。)