7

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

但是,我发现它似乎在“猜测”您是否打错字,并且即使您犯了错误也会返回响应。

例如,对“加拿大安大略省贝弗顿”的请求会返回比弗顿的纬度/经度,但没有表明您提供了错误的城市名称。

我正在使用 CSV 响应类型,并且收到 200 响应代码。

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

编辑:澄清......谷歌正在纠正输入(当我预计它会失败时),我需要知道它是否已经这样做了。

4

3 回答 3

4

地理编码器没有任何方法可以让您知道它是否认为您有错字。我同意 Saul 的回答,您最好的办法是检查您的查询是否与回复相符。

我只是想指出,您必须根据几个响应值检查输入的几个元素,以便找到应该匹配的元素。在这种情况下,在“DependentLocalityName”中找到了“Beaverton”。

<?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>

更新:

这可能无法实际实施。如果您的输入是“加拿大安大略省贝弗顿”,您怎么知道要检查这三个词中的哪一个?他们中的两个会很好地匹配。如果它们以不同的顺序输入怎么办?

于 2009-07-21T20:18:35.193 回答
0

它是否以“200 成功代码”响应?它有可能会为您提供不同的状态代码。

以下是谷歌返回的不同状态代码: http ://code.google.com/apis/maps/documentation/reference.html#GGeoStatusCode

于 2009-07-21T19:12:18.383 回答
0

注意:请参阅上面@Chris B 的答案。正如克里斯指出的那样,这可能无法实现。

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

<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>
于 2009-07-21T19:15:31.513 回答