2010-01-19 12 views
17

ho cercato un po 'ma non ho trovato nulla, questo è simulare al mio problema.Ricevere un WOEID da Lat, Long con Yahoos API

Sto cercando di utilizzare l'API YAHOO tempo, ad esempio: http://weather.yahooapis.com/forecastrss?w=4097

non so il WOEID nel mio caso, ma mi sono latitudine e longitudine punti.

quindi la mia domanda è: c'è un modo per ottenere il WOEID di un luogo utilizzando i punti lat e long?

+1

Yahoo ha ora un'API per questo: http://developer.yahoo.com/geo/placefinder/ –

risposta

18

Questo è ora disponibile tramite il PlaceFinder API recentemente rilasciato. Complimenti a Yahoo! per aver fornito ancora un altro pezzo importante del puzzle Geo.

+0

A partire da 5 anni fa, l'API di Placefinder è stata dichiarata obsoleta. – Annjawn

-2

Yahoo api utilizza in realtà weather.com, quindi andare su weather.com e cercare il meteo locale. Sono a Chicago così sono entrato 'Chicago, IL' ed ecco il link nella mia barra del browser che mostra il mio tempo:?

http://www.weather.com/weather/today/Chicago+IL+USIL0225 lswe = Chicago,% 20il & from = searchbox_localwx

Nel link è il woeid - che è USIL0225

Puoi ottenere il tuo allo stesso modo.

+0

Ma la domanda non è come ottenere il woeid dalla città e dallo stato. È per latitudine e longitudine. –

+1

"USIL0225" non è un woeid. Le Woeids sono numeriche. –

7

Questo non sta utilizzando API di Yahoo, ma ho trovato questo post del blog: http://geomojo.org/?p=38

Menzionare questo servizio: http://www.geomojo.org/cgi-bin/reversegeocoder.cgi?long=-117.699444&lat=35.4775

Forse si può usare quella? Ha risolto il mio problema, spero che aiuti a risolvere il tuo.

+0

grazie :) penso che questo sia il modo migliore in cui posso farlo. – choise

+0

Geomojo.org non è più disponibile ... Ora è necessario utilizzare: http://where.yahooapis.com/geocode?q=38.898717,+-77.035974&gflags=R&appid=[applicare da soli] –

+2

In entrambi i casi, entrambi i siti non funzionano . Mostra messaggio come "Il sito web che stavi cercando di raggiungere è temporaneamente non disponibile." – Ganesha

0

C'è un argomento su questo problema al forum YDN http://developer.yahoo.net/forum/index.php?showtopic=69

sembra che sia sepolto nella to-do list, a partire dal 2008 ", la possibilità di mappare un insieme di longitudine e latitudine coordinate a un WOEID, da cui derivano informazioni come ZIP e State, è già stato identificato come prezioso funzionalità ed è nella nostra lista di richieste di miglioramento. "

Altre citazioni;

"Flickr ha un metodo: flickr.places.findByLatLon che restituisce un WOEID, ma troncano le coordinate a tre cifre decimali."

In questo argomento, anche uno sviluppatore di Yahoo suggerisce di utilizzare il consiglio allo http://geomojo.org/?p=38 come soluzione provvisoria.

3

È un po 'ridicolo che Yahoo non fornisca un metodo di ricerca per WOEID tramite lat/lon - è stato nella loro lista delle cose da fare dal 2008 - ma questo è lo stato delle cose.

Vorrei evitare l'utilizzo della soluzione alternativa proposta in Geomojo. Se funziona per i tuoi dati, ottimo, ma il servizio di Yahoo su cui si basa Geomojo è imprevedibile. Geomojo utilizza Yahoo PlaceMaker, che estrae informazioni sulla posizione da testo non strutturato per ottenere un WOEID.Lo fa creando un microformato contenente la tua coppia lat/lon e inviandolo a PlaceMaker. Tuttavia, poiché PlaceMaker restituisce WOEID per i codici postali, c'è una perdita di risoluzione e talvolta non sarai in grado di identificare anche la città per le coordinate inviate. Ho un numero di example points sulla costa orientale degli Stati Uniti, dove i WOEID di PlaceMaker non corrispondono alle coppie lat/lon presentate.

Stranamente, come scrive HD, solo l'API di Flickr fornisce un modo semplice per lookup a WOEID from lat/lon. Il metodo findByLatLon di Flickr ha una grande risoluzione. Solitamente restituirà un quartiere (un livello sotto la città) per una coppia di coordinate.

+0

Flickr ha qualche limite di query su ogni ID app? Grazie. – herbertD

+0

Ho capito da flickr: Se la tua applicazione rimane sotto 3600 query all'ora sull'intera chiave (che significa l'aggregato di tutti gli utenti della tua integrazione), starai bene. Se rileviamo un abuso sulla tua chiave, dovremo far scadere la chiave o disattivarla per preservare la funzionalità dell'API di Flickr per gli altri (inclusi noi!). – herbertD

2

È possibile utilizzare l'API di geocodifica inversa di Flickr tramite YQL.

Ecco un link al YQL con una query di esempio per trovare il WOEID per una determinata LON lat /: http://developer.yahoo.com/yql/console/#h=select%20place.woeid%20from%20flickr.places%20where%20lat%3D43%20and%20lon%3D-94

La query sopra possono essere chiamati direttamente dalla tua app con questo URL (formati JSON XML/disponibile): http://query.yahooapis.com/v1/public/yql?q=select%20place.woeid%20from%20flickr.places%20where%20lat%3D43%20and%20lon%3D-94&format=xml

10

Yahoo! API PlaceFinder ti permette di trovare un WOEID corrispondente per una coppia di latitudine/longitudine. Considerate questo esempio servizio Web chiamata di metodo:

http://where.yahooapis.com/geocode?location=37.42,-122.12&flags=J&gflags=R&appid=zHgnBS4m 

si può giocare con parametri di richiesta in base alle proprie esigenze, vedere Yahoo! PlaceFinder API documentation di più. E dovresti sostituire l'appid con il tuo Yahoo! appid, puoi crearne uno here.

Questa richiesta restituisce una risposta del genere, che comprende un sacco di dati utili con il WOEID:

{ 
    "ResultSet": { 
     "version": "1.0", 
     "Error": 0, 
     "ErrorMessage": "No error", 
     "Locale": "us_US", 
     "Quality": 99, 
     "Found": 1, 
     "Results": [ 
      { 
       "quality": 99, 
       "latitude": "37.420000", 
       "longitude": "-122.120000", 
       "offsetlat": "37.420000", 
       "offsetlon": "-122.120000", 
       "radius": 500, 
       "name": "37.42,-122.12", 
       "line1": "3589 Bryant St", 
       "line2": "Palo Alto, CA 94306-4207", 
       "line3": "", 
       "line4": "United States", 
       "house": "3589", 
       "street": "Bryant St", 
       "xstreet": "", 
       "unittype": "", 
       "unit": "", 
       "postal": "94306-4207", 
       "neighborhood": "", 
       "city": "Palo Alto", 
       "county": "Santa Clara County", 
       "state": "California", 
       "country": "United States", 
       "countrycode": "US", 
       "statecode": "CA", 
       "countycode": "", 
       "hash": "", 
       "woeid": 12797284, 
       "woetype": 11, 
       "uzip": "94306" 
      } 
     ] 
    } 
} 
+6

È stata interrotta questa API? Ora restituisce: D/StandardLauncher (11881): Yahoo! Meteo - Errore D/StandardLauncher (11881): Yahoo! Meteo Errore D/StandardLauncher (11881): Città non trovata D/StandardLauncher (11881): Invalid Input/forecastrss w = null & u = c D/StandardLauncher (11881): D/StandardLauncher (11881): herbertD

+0

Corretto, questo non funziona più, vedere il mio soluzione sotto ... – jjj

3

Prima ottenere il nome della città da lat/long utilizzando questo codice.

CLGeocoder *geocoder = [[CLGeocoder alloc] init] ; 
[geocoder reverseGeocodeLocation:location 
       completionHandler:^(NSArray *placemarks, NSError *error) { 
        if (error){ 
         NSLog(@"Geocode failed with error: %@", error); 
         return; 
        } 
        CLPlacemark *placemark = [placemarks objectAtIndex:0]; 
        NSLog(@"cityname - %@",placemark.locality); 
       }]; 

quindi utilizzare tale nome della città in url sotto

https://search.yahoo.com/sugg/gossip/gossip-gl-location/?appid=weather&output=sd1&p2=pt&command=YOURCITYNAME

Esempio - https://search.yahoo.com/sugg/gossip/gossip-gl-location/?appid=weather&output=sd1&p2=pt&command=sydney

Ciò restituirà JSON e trovare ottenere WOEID in questo ...

{ "l" : { "gprid" : "eIL89mltSzSfgDWdP7uyBA" }, 
    "q" : "sydney", 
    "r" : [ { "d" : "pt:iso=AU&woeid=1105779&lon=151.021&lat=-33.8563&s=New South Wales&c=Australia&sc=NSW&n=Sydney, Australia", 
     "k" : "Sydney" 
     } ] 
} 
2

Yahoo ha recentemente chiuso Geo Placefind er API, lasciando molti che lo usavano per la ricerca WOEID in base alle coordinate di latitudine & longitudine, scrambling per una soluzione.

seguente post descrive come si può fare questo usando la versione più recente di loro API:

http://www.joe0.com/2016/03/06/how-to-get-woeid-where-on-earth-identifier-based-on-latitude-longitude/

seguente codice:

String url = "https://query.yahooapis.com/v1/public/yql?q=select%20woeid%20from%20geo.places%20where%20text%3D%22(" + Latitude + "," + Longitude + ")%22%20limit%201&diagnostics=false";  

Document yahooApiResponse = Jsoup.connect(url).timeout(10 * 1000).get(); 
String xmlString = yahooApiResponse.html(); 
Document doc = Jsoup.parse(xmlString, "", Parser.xmlParser()); 

System.out.println(doc.select("woeid").first().text().toString()); 
Problemi correlati