Yritän testata seuraavaa koodia järjestelmässäni, mutta en pysty saamaan oikeaa tulosta.

  1. Onko tämä koodi oikea käytettäväksi geopy kanssa GoogleV3?
  2. Jos niin, kuinka voin palauttaa maan ja maanosan nimen?

import subprocess from geopy.geocoders import GoogleV3 def set_proxy(proxy_addr): cmd = "set HTTPS_PROXY=" + proxy_addr call = subprocess.call(cmd, shell=True) cmd = "set HTTP_PROXY=" + proxy_addr call = subprocess.call(cmd, shell=True) set_proxy("my.proxy") api_key = "my key" geolocator = GoogleV3(api_key) location = geolocator.reverse("52.509669, 13.376294", timeout = 10) #would like to return just country and continent name 

Kommentit

  • Mitä tuotoksia saat? Saanko virheilmoituksen?
  • @MaryBeth Haluan palauttaa maan ja maanosan (jos mahdollista) nimen tälle latille.
  • " Yritän testata seuraavaa koodia järjestelmässäni, mutta en pysty saamaan oikeaa ulostuloa. " Mitä lähtöä vastaanotat vs. mitä odotat? Jos saat virheen, lähetä se. kiertueeltamme : Keskity kysymyksiin todellisesta kohtaamastasi ongelmasta. Sisällytä tiedot siitä, mitä olet kokeillut ja tarkalleen mitä yrität tehdä.
  • Mikä on location -arvon arvo, eli sillä on käänteinen geokoodi onnistunut?

Vastaa

Älä käytä välityspalvelinta ulkoisella komennolla. Jos olet päällä Windows ja välityspalvelimesi on jo määritetty Internet-asetuksissasi, sinun ei tarvitse asettaa sitä komentosarjassa, se havaitaan automaattisesti.

Jos sinulla ei ole välityspalvelinta jo määritetty , voit välittää välityspalvelimen suoraan geokooderille :

 geolocator = GoogleV3(api_key, proxies={"http": proxy_addr, "https": proxy_addr})  

Tai voit asettaa välityspalvelimen ympäristömuuttujaksi ilman ulkoista komentoa:

 os.environ["HTTP_PROXY"] = proxy_addr os.environ["HTTPS_PROXY"] = proxy_addr geolocator = GoogleV3(api_key)  

Sitten voit käyttää palautettua osoitetta seuraavasti:

 location = geolocator.reverse([52.509669, 13.376294], timeout = 10, exactly_one=True) print location.longitude,location.latitude,location.address  

Tulos:

 13.3756952 52.5102143 Potsdamer Platz 4, 10785 Berlin, Germany  

Jos haluat purkaa maan nimen ja postinumeron, katso location.raw sanakirja. Vastauskomponentit määritetään Google-sovellusliittymän ohjeissa .

 from geopy.geocoders import GoogleV3 ################################################## # Some dummy values just so the script is # self contained and runnable api_key=None rows=[{"avg_lat":52.509669, "avg_lon":13.376294}] ################################################## def get_component(location, component_type): for component in location.raw["address_components"]: if component_type in component["types"]: return component["long_name"] geolocator = GoogleV3(api_key) for row in rows: location = geolocator.reverse((row["avg_lat"], row["avg_lon"]), timeout = 10, exactly_one=True) post_code = get_component(location, "postal_code") country = get_component(location, "country") print location.longitude,location.latitude,location.address print post_code,country  

Huomaa, että tämä koskee vain GoogleV3-geokooderia ja saattaa rikkoutua, jos Google muuttaa sovellusliittymää …

Huomaa – Google ei näytä palaavan mantereen nimi.

Kommentit

  • Kiitos avusta. Yritit saada tämän toimimaan viikkoina
  • Luke, missä on dokumentaatio raakakomponenttien käytöstä?
  • @dustin geopy.readthedocs.org käsitellään raw sanakirja
  • Etsin sitä, mutta se ei ollut ' riittävän syvä, jotta voisin ymmärtää. En voinut ' t löytää paljon postinumeroista (postinumerot) tai siitä, miten niihin pääsee, jos mahdollista.
  • Että ' s, koska raw on vain t: n alkuperäinen vastaus palvelin jäseni python-sanakirjaksi. Kunkin geokoodausliittymän vastaus on erilainen. Voit tarkastaa sen tavallisilla python-tekniikoilla, ts. print, location.raw.keys(), dir(location.raw) jne. …

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *