代码之家  ›  专栏  ›  技术社区  ›  Ian Ringrose

在英国,如何根据GPS坐标找到地址?

  •  5
  • Ian Ringrose  · 技术社区  · 15 年前

    对不起,这不是一个很明确的问题,我正在考虑一个产品的想法,所以需要知道什么是可能的…

    假设我站在一所房子的正门前,根据智能手机的GSP坐标,我怎么能找到我所站的地址呢?

    GPS足够吗?

    我需要使用多少数据/服务成本?

    关于这个我还应该问什么问题?

    5 回复  |  直到 12 年前
        1
  •  5
  •   Daniel Vassallo    15 年前

    GPS仅限于返回您所在位置的纬度和经度坐标。

    要将这些坐标解析为地址,需要使用外部数据源。将地理坐标转换为地址的行为通常被称为 reverse geocoding .

    有一些免费的反向地理编码服务,例如 that offered within the Google Maps API . 但是,请确保您阅读并理解 Terms of Use 在使用此类服务之前。


    例如,您可以使用以下HTTP请求使用Google Maps API进行反向地理编码:

    简单CSV:

    http://maps.google.com/maps/geo?q=40.756041,-73.986939&output=csv&sensor=false

    返回:

    200,8,"601-699 7th Ave, New York, NY 10036, USA"
    

    更复杂的XML:

    http://maps.google.com/maps/geo?q=40.756041,-73.986939&output=xml&sensor=false

    返回:

    <kml xmlns="http://earth.google.com/kml/2.0"><Response> 
      <name>40.756041,-73.986939</name> 
      <Status> 
        <code>200</code> 
        <request>geocode</request> 
      </Status> 
      <Placemark id="p1"> 
        <address>601-699 7th Ave, New York, NY 10036, USA</address> 
        <AddressDetails Accuracy="8" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><Country><CountryNameCode>US</CountryNameCode><CountryName>USA</CountryName><AdministrativeArea><AdministrativeAreaName>NY</AdministrativeAreaName><SubAdministrativeArea><SubAdministrativeAreaName>New York</SubAdministrativeAreaName><Locality><LocalityName>New York</LocalityName><DependentLocality><DependentLocalityName>Manhattan</DependentLocalityName><Thoroughfare><ThoroughfareName>601-699 7th Ave</ThoroughfareName></Thoroughfare><PostalCode><PostalCodeNumber>10036</PostalCodeNumber></PostalCode></DependentLocality></Locality></SubAdministrativeArea></AdministrativeArea></Country></AddressDetails> 
        <ExtendedData> 
          <LatLonBox north="40.7595131" south="40.7532178" east="-73.9835667" west="-73.9898620" /> 
        </ExtendedData> 
        <Point><coordinates>-73.9869192,40.7560331,0</coordinates></Point> 
      </Placemark> 
      <Placemark id="p2"> 
        <address>Times Sq - 42nd St Station, New York, NY 10116, USA</address> 
        <AddressDetails Accuracy="9" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><AddressLine>Times Sq - 42nd St Station</AddressLine></AddressDetails> 
        <ExtendedData> 
          <LatLonBox north="40.7591946" south="40.7528994" east="-73.9838014" west="-73.9900966" /> 
        </ExtendedData> 
        <Point><coordinates>-73.9869490,40.7560470,0</coordinates></Point> 
      </Placemark> 
      <Placemark id="p3"> 
        <address>Times Square - 42nd Street</address> 
        <AddressDetails Accuracy="9" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><AddressLine>Times Square - 42nd Street</AddressLine></AddressDetails> 
        <ExtendedData> 
          <LatLonBox north="40.7591476" south="40.7528524" east="-73.9838524" west="-73.9901476" /> 
        </ExtendedData> 
        <Point><coordinates>-73.9870000,40.7560000,0</coordinates></Point> 
      </Placemark> 
      <Placemark id="p4"> 
        <address>W 42 St - 7 Av, New York, NY 10116, USA</address> 
        <AddressDetails Accuracy="9" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><AddressLine>W 42 St - 7 Av</AddressLine></AddressDetails> 
        <ExtendedData> 
          <LatLonBox north="40.7591446" south="40.7528494" east="-73.9839964" west="-73.9902916" /> 
        </ExtendedData> 
        <Point><coordinates>-73.9871440,40.7559970,0</coordinates></Point> 
      </Placemark> 
      <Placemark id="p5"> 
        <address>New Amsterdam Theatre, New York, NY 10036, USA</address> 
        <AddressDetails Accuracy="9" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><Country><CountryNameCode>US</CountryNameCode><CountryName>USA</CountryName><AdministrativeArea><AdministrativeAreaName>NY</AdministrativeAreaName><Locality><LocalityName>New York</LocalityName><PostalCode><PostalCodeNumber>10036</PostalCodeNumber></PostalCode><AddressLine>New Amsterdam Theatre</AddressLine></Locality></AdministrativeArea></Country></AddressDetails> 
        <ExtendedData> 
          <LatLonBox north="40.7593416" south="40.7530464" east="-73.9842484" west="-73.9905436" /> 
        </ExtendedData> 
        <Point><coordinates>-73.9873960,40.7561940,0</coordinates></Point> 
      </Placemark> 
      <Placemark id="p6"> 
        <address>W 42 St - 7 Av, New York, NY 10116, USA</address> 
        <AddressDetails Accuracy="9" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><AddressLine>W 42 St - 7 Av</AddressLine></AddressDetails> 
        <ExtendedData> 
          <LatLonBox north="40.7594606" south="40.7531654" east="-73.9842484" west="-73.9905436" /> 
        </ExtendedData> 
        <Point><coordinates>-73.9873960,40.7563130,0</coordinates></Point> 
      </Placemark> 
      <Placemark id="p7"> 
        <address>Times Sq - 42nd St Station, New York, NY 10116, USA</address> 
        <AddressDetails Accuracy="9" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><AddressLine>Times Sq - 42nd St Station</AddressLine></AddressDetails> 
        <ExtendedData> 
          <LatLonBox north="40.7589406" south="40.7526454" east="-73.9832194" west="-73.9895146" /> 
        </ExtendedData> 
        <Point><coordinates>-73.9863670,40.7557930,0</coordinates></Point> 
      </Placemark> 
      <Placemark id="p8"> 
        <address>W 42 St - Broadway, New York, NY 10116, USA</address> 
        <AddressDetails Accuracy="9" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><AddressLine>W 42 St - Broadway</AddressLine></AddressDetails> 
        <ExtendedData> 
          <LatLonBox north="40.7588236" south="40.7525284" east="-73.9831654" west="-73.9894606" /> 
        </ExtendedData> 
        <Point><coordinates>-73.9863130,40.7556760,0</coordinates></Point> 
      </Placemark> 
      <Placemark id="p9"> 
        <address>7 Av - W 41 St, New York, NY 10116, USA</address> 
        <AddressDetails Accuracy="9" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><AddressLine>7 Av - W 41 St</AddressLine></AddressDetails> 
        <ExtendedData> 
          <LatLonBox north="40.7586296" south="40.7523344" east="-73.9843024" west="-73.9905976" /> 
        </ExtendedData> 
        <Point><coordinates>-73.9874500,40.7554820,0</coordinates></Point> 
      </Placemark> 
    </Response></kml> 
    

    只需更改 q 参数与您的 latitude,longitude .


    请注意,免费版的GoogleMapsAPI每天对每个IP地址有15000个请求限制。( Google Maps API FAQ )

    如果你计划大量使用谷歌的反向地理编码服务,你可能会考虑使用 Premier edition of the Google Maps API .

    “Premier API自动随附” advanced geocoding capabilities with greater volume and speed “,因此,标准API的限制应该被新配额取代。

    作为附加说明,根据一条 unofficial source (2008年4月)Premier API的成本为每年10000美元。

        2
  •  2
  •   NibblyPig    15 年前

    你可以使用各种免费服务,比如谷歌提供的服务,从一些GPS坐标中反向地理编码(技术术语)一个地址。我强烈建议使用他们的API,这里提供完整的文档:

    http://code.google.com/apis/maps/documentation/services.html

        3
  •  1
  •   legoscia    15 年前

    谷歌 Geolocation Network Protocol 可能会帮助我 认为 我上次尝试的时候,它在英国的一些地方工作。

        4
  •  1
  •   TheSteve0    15 年前

    顺便说一句,这项法令调查刚刚发布了他们的数据,许可证确实很松,我认为他们也有一个网络服务。你可能想看看。

        5
  •  0
  •   Graham Asher    12 年前

    openstreetmap(志愿者创建的免费开放源代码世界地图)使用的是nomingim,看起来非常好。见

    http://wiki.openstreetmap.org/wiki/Nominatim#Reverse_Geocoding_.2F_Address_lookup