Estou tentando testar o código a seguir em meu sistema, mas não consigo obter a saída correta.

  1. Este código está correto para usar geopy com GoogleV3?
  2. Se então, como posso retornar o nome do país e do continente?

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 

Comentários

  • Qual resultado você está obtendo? Você está recebendo uma mensagem de erro?
  • @MaryBeth, desejo retornar o nome do país e do continente (se possível) dessa latitude longa.
  • " Estou tentando testar o código a seguir em meu sistema, mas não consigo obter a saída correta. " Qual saída você está recebendo em comparação com o que está esperando? Se você estiver recebendo um erro, poste-o. De nosso tour : Concentre-se nas perguntas sobre um problema real que você enfrentou. Inclua detalhes sobre o que você tentou e exatamente o que está tentando fazer.
  • Qual é o valor de location, ou seja, tem o geocódigo reverso teve sucesso?

Resposta

Não use um comando externo para definir o seu proxy. Se você estiver no O Windows e seu proxy já estão configurados nas opções de internet, você não precisa configurá-lo no script, ele será detectado automaticamente.

Se você ainda não tiver um proxy configurado , você pode passar o proxy diretamente para o geocodificador :

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

Ou você pode definir o proxy como uma variável de ambiente sem um comando externo:

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

Então você pode acessar o endereço retornado como:

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

Resultado:

 13.3756952 52.5102143 Potsdamer Platz 4, 10785 Berlin, Germany  

Se você deseja extrair o nome do país e código postal, dê uma olhada no location.raw dicionário. Os componentes de resposta são especificados na documentação da API do Google .

 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  

Observe que isso só se aplica ao geocodificador Google V3 e está sujeito a interrupções se o Google alterar sua API …

Observação – o Google não parece retornar o nome do continente.

Comentários

  • Obrigado pela ajuda. Estou tentando fazer com que isso funcione semanas agora
  • Luke, onde está a documentação para acessar os componentes brutos?
  • @dustin geopy.readthedocs.org discute o raw dicionário
  • Eu estava procurando lá, mas não era ' tão detalhado para que eu pudesse entender. Não consegui ' t descobrir muito sobre CEPs (códigos postais) ou como acessá-los, se possível.
  • Isso ' s porque raw é apenas a resposta original de t O servidor analisado em um dicionário python. A resposta de cada API de geocodificação será diferente. Você pode usar técnicas padrão do Python para inspecioná-lo, ou seja, print, location.raw.keys(), dir(location.raw) etc. …

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *