Google maps 谷歌地理编码服务返回假地址响应

Google maps 谷歌地理编码服务返回假地址响应,google-maps,geocoding,Google Maps,Geocoding,我正在使用谷歌地理编码服务来验证在我们的系统中输入的城市名称(加上地区和国家)是否存在,并获取lat/long 然而,我发现它似乎在“猜测”您是否输入了错误,并且即使您犯了错误也会返回响应 例如,对“加拿大安大略省贝弗顿”的请求会返回比弗顿的lat/long,但不表示您提供了错误的城市名称 我使用的是CSV响应类型,得到的是200响应代码 我可以阻止服务这样做,或者,更好的是,找出它是否这样做了 编辑:为了澄清。。。谷歌正在纠正输入(我预计它会失败),我需要知道它是否做到了这一点 是否用“200

我正在使用谷歌地理编码服务来验证在我们的系统中输入的城市名称(加上地区和国家)是否存在,并获取lat/long

然而,我发现它似乎在“猜测”您是否输入了错误,并且即使您犯了错误也会返回响应

例如,对“加拿大安大略省贝弗顿”的请求会返回比弗顿的lat/long,但不表示您提供了错误的城市名称

我使用的是CSV响应类型,得到的是200响应代码

我可以阻止服务这样做,或者,更好的是,找出它是否这样做了

编辑:为了澄清。。。谷歌正在纠正输入(我预计它会失败),我需要知道它是否做到了这一点

是否用“200成功码”进行响应?它可能会给你一个不同的状态码

以下是google返回的不同状态代码:

注意:请参见上述内容。正如Chris指出的,这可能不可能实现

您必须使用CSV响应类型吗?如果没有,其他响应类型(如KML)将提供足够的详细信息来确定坐标所指的位置。您可以根据响应的LocationName元素验证输入

<kml xmlns="http://earth.google.com/kml/2.0">
  <Response>
    <name>1600 amphitheatre mountain view ca</name>
    <Status>
      <code>200</code>
      <request>geocode</request>
    </Status>
    <Placemark>
      <address> 
        1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA
      </address>
      <AddressDetails Accuracy="8">
        <Country>
          <CountryNameCode>US</CountryNameCode>
          <AdministrativeArea>
            <AdministrativeAreaName>CA</AdministrativeAreaName>
           <SubAdministrativeArea>
             <SubAdministrativeAreaName>Santa Clara</SubAdministrativeAreaName>
             <Locality>
               <LocalityName>Mountain View</LocalityName>
               <Thoroughfare>
                 <ThoroughfareName>1600 Amphitheatre Pkwy</ThoroughfareName>
               </Thoroughfare>
               <PostalCode>
                 <PostalCodeNumber>94043</PostalCodeNumber>
               </PostalCode>
             </Locality>
           </SubAdministrativeArea>
         </AdministrativeArea>
       </Country>
     </AddressDetails>
     <Point>
       <coordinates>-122.083739,37.423021,0</coordinates>
     </Point>
   </Placemark>
  </Response>
</kml>

如果地理编码员认为你有打字错误,他没有办法让你知道。我同意索尔的回答,你最好的办法是对照回答核对你的问题

我只是想指出,您必须对照几个响应值检查输入的几个元素,以便找到应该匹配的元素。在本例中,在“DependentLocalityName”中找到了“Beaverton”

更新:


这可能不可能真正实现。如果您输入的是“加拿大安大略省贝弗顿”,您如何知道这三个词中的哪一个要检查?他们两人配得很好。如果输入的顺序不同怎么办?

是的,我得到200。更新的问题。我认为CSV响应类型是所有选项中最不详细的。请参阅下面我的答案,了解可能的替代方案。我找不到任何地图服务的“安大略省贝弗顿”。你确定这是对的吗?对,没有“贝弗顿”。。。这个城镇是“比弗顿”(注A)好的-我理解。您得到了正确的结果,但您只想知道地理编码员是否认为您有输入错误。此外,您可以使用JSON或XML响应类型来获取相同的数据。事实证明是这样的。就个人而言,我认为API在没有告诉您的情况下返回与您提供的请求完全不同的响应是很奇怪的!在我看来,谷歌的地理编码服务还有改进的余地。也许它们可以以某种方式表明位置数据中提供了“模糊”响应。
<?xml version="1.0" encoding="UTF-8" ?>
<kml xmlns="http://earth.google.com/kml/2.0"><Response>
  <name>Beverton, Ontario, Canada</name>
  <Status>
    <code>200</code>
    <request>geocode</request>
  </Status>
  <Placemark id="p1">

    <address>Beaverton, Brock, ON, Canada</address>
    <AddressDetails Accuracy="4" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><Country><CountryNameCode>CA</CountryNameCode><CountryName>Canada</CountryName><AdministrativeArea><AdministrativeAreaName>ON</AdministrativeAreaName><SubAdministrativeArea><SubAdministrativeAreaName>Durham Regional Municipality</SubAdministrativeAreaName><Locality><LocalityName>Brock</LocalityName><DependentLocality><DependentLocalityName>Beaverton</DependentLocalityName></DependentLocality></Locality></SubAdministrativeArea></AdministrativeArea></Country></AddressDetails>
    <ExtendedData>
      <LatLonBox north="44.4502166" south="44.4183470" east="-79.1199562" west="-79.1839858" />
    </ExtendedData>

    <Point><coordinates>-79.1519710,44.4342840,0</coordinates></Point>
  </Placemark>
</Response></kml>